Linux NFS cria máscara e força o equivalente ao usuário

11

Eu tenho dois servidores Linux:

servidor de arquivos
Debian 5.0.3 (2.6.26-2-686)
Samba versão 3.4.2

Apache
Ubuntu 10.04 LTS (2.6.32-23-genérico)
Apache 2.2.14

Eu tenho vários compartilhamentos do Samba no servidor de arquivos para que eu possa acessar arquivos de PCs com Windows. Também estou exportando /data/www-datapara o servidor apache , onde eu o montei como /var/www.

A instalação está boa, exceto quando eu for criar arquivos na montagem do NFS. Acabo com arquivos que não podem ser lidos pelo Apache ou que não podem ser modificados por outros usuários no meu sistema.

Com Samba, posso especificar force user, force group, create maske directory mask, e isso garante que todos os arquivos são criados com permissões adequadas para o meu servidor web Apache. Não consigo encontrar uma maneira de fazer isso com o NFS. Existe uma maneira de forçar permissões e propriedade com o NFS - estou perdendo algo óbvio?

Embora eu tenha passado bastante tempo com o Linux e esteja me afastando do Windows, ainda não consegui lidar com as permissões do Linux ... Se esse não é o caminho certo para fazer as coisas, estou aberto a sugestões alternativas.

Mike
fonte

Respostas:

12

Como você é do Windows, verá que o NFS é .... diferente.

O problema que você está enfrentando é bastante comum. O NFS está passando o UID e o GID dos arquivos / diretórios entre as máquinas, pressupondo que os IDs do usuário e do grupo sejam mapeados de forma idêntica em ambos . Isso significa que você pode obter uma situação em que o UID / GID no servidor é passado de volta para um cliente NFS, mas não pode corresponder ao do cliente /etc/passwdou /etc/group, o que significa que não há acesso.

No passado (distante), isso foi co-organizado com o NIS e o NIS +, embora existam outros esquemas que foram incorporados a essa estrutura (o Winbind do Samba é um deles). No entanto, isso requer um servidor de identificação central, seguido por muitas permissões de correção manual.

Existem diferentes maneiras de corrigir isso, mas o mais barato / rápido é criar um grupo com o mesmo número de ID de grupo nas duas máquinas - por exemplo, ID de grupo 50000 - e definir os bits do grupo no servidor de arquivos enquanto adiciona o usuário apropriado ao grupo no cliente; em seguida, use as permissões de grupo nos arquivos para controlar o acesso. Não é uma ótima solução, mas funcionará. Observe que você pode ter problemas com serviços que alteram explicitamente seu grupo no tempo de execução (também conhecido como queda de privacidade) e pode ser necessário alterar a configuração que controla qual grupo é assumido no tempo de execução para garantir que ele seja o que você criou.

Para os arquivos que chegam através de um compartilhamento do Windows (também conhecido como Samba), basta forçar o grupo a ser o mesmo que você criou. Dessa forma, todos os arquivos obtêm automaticamente o GID "certo".

Avery Payne
fonte
Obrigado pela resposta considerada. Vou analisar o método de bits de grupo e informar como eu vou.
Mike
Criei um www-datagrupo no servidor de arquivos, designei os usuários necessários e, em seguida, defina o mesmo www-dataID de grupo nos dois servidores. Também defino os bits do grupo na /data/www-datapasta com chmod -R g+s /var/www-data. Agora está funcionando perfeitamente. Obrigado pela ajuda.
Mike
Fico feliz em ouvir isso!
Avery Payne
Seria bom se o NFS pudesse fazer isso para clientes Mac.
precisa
9

Você também pode usar a all_squashopção que torna anônimo (usuário e grupo) todos os arquivos e pastas exportados e anexá-los a um GID e UID específico.

/data/www-data apache(rw,all_squash,anonuid=<your UID>,anongid=<your GID>,sync)

O problema disso é que todos os usuários no apacheservidor verão seu ponto de montagem nobody nobodycomo usuário e grupo e poderão escrever na montagem (mas, de qualquer maneira, no servidor Samba, os arquivos serão criados como <your UID>/ <your GID>).

Anthony O.
fonte
Isso resolveu meu problema!
Luciano Andress Martini