Questão Como fazer a nova permissão de arquivo herdar do diretório pai?


Eu tenho um diretório chamado data. Então eu estou executando um script sob o id do usuário 'robot'. robô escreve para o data diretório e atualizar arquivos dentro. A ideia é data está aberto para mim e para o robô para atualizar.

Então eu configurei a permissão e o grupo de proprietários assim

drwxrwxr-x  2 me robot-grp 4096 Jun 11 20:50 data

onde eu e o robô pertencemos ao 'robô-grp'. Eu mudo a permissão e o grupo do proprietário recursivamente como o diretório pai.

Eu carrego regularmente novos arquivos no data diretório usando rsync. Infelizmente, novos arquivos enviados não herdam a permissão do diretório pai como espero. Em vez disso, parece com isso

-rw-r--r-- 1 me users       6 Jun 11 20:50 new-file.txt

Quando o robô tenta atualizar new-file.txt, falha devido à falta de permissão de arquivo.

Não tenho certeza se a configuração de umask ajuda. Em qualquer caso, os novos arquivos não o seguem.

$ umask -S
u=rwx,g=rx,o=rx

Eu sou frequentemente confundido pela permissão de arquivo do Unix. Eu tenho mesmo um plano certo? Eu estou usando o Debian lenny.


80


origem




Respostas:


Você não deseja alterar a umask padrão do seu sistema, que é um risco de segurança. A opção sticky bit funcionará até certo ponto, mas usar o ACL é o melhor caminho a percorrer. Isso é mais fácil do que você pensa. O problema com as ACLs básicas é que elas não são recursivas por padrão. Se você definir uma ACL em um diretório, somente os arquivos dentro desse diretório herdarão a ACL. Se você criar um subdiretório, ele não obterá a ACL pai, a menos que a ACL esteja configurada para recursar.

Primeiro, verifique se as ACLs estão ativadas para o volume no qual o diretório está. Se você tem tune2fs, você pode executar o seguinte:

# tune2fs -l /dev/sda1 | grep acl
Default mount options:    user_xattr acl

Se você não tem tune2fs, em seguida, examine fstabs:

# cat /etc/fstab 
/dev/system/root        /                       ext3    defaults        1 1
/dev/system/home        /home                   ext3    defaults        1 2
/dev/storage/data       /data                   ext3    defaults        1 2
LABEL=/boot             /boot                   ext3    defaults        1 2

A quarta coluna que diz "defaults" significa no meu sistema (CentOS 5.5), as ACLs estão ligadas. Em caso de dúvida, deixe como padrão. Se você tentar definir a ACL e os erros, volte e adicione a opção acl ao / etc / fstab logo após os padrões: defaults,acl.

Pelo que entendi, você quer que todos no grupo de usuários tenham acesso de gravação ao diretório de dados. Isso é realizado pelo seguinte:

setfacl -Rm g:users:rwX,d:g:users:rwX data/

50



Eu usei esse comando, mas ele não resolveu meu problema, como posso desfazer esse comando, por favor? - Itai Ganot
Fez o truque no Ubuntu com sudo setfacl -Rm g:users:rwX,d:g:users:rwX /var/www/logs_or_something. Tive problemas com testes PHPUnit. Depois de criar arquivos de log a partir da execução de testes, o usuário do apache www-data não conseguia escrever / lê-los. - s3m3n
@Itai Ganot - de acordo com o setfacl página man, -b ou --remove-all remove as ACLs estendidas. - jww
Então, você apenas acrescentaria setfacl -Rm g:users:rwX,d:g:users:rwX data/ no fim de /etc/fstab? - 425nesp
@ piña não. a única mudança que você faz no / etc / fstab é mudar defaults para defaults,acl. setfacl é um comando que você deve executar a partir do terminal. data/ deve ser substituído pelo caminho para o diretório que você deseja alterar. - Segfault


Marcando um diretório setgid (g+s) fará com que novos arquivos herdem a propriedade do grupo do diretório, mas o -g opção de rsync tentará substituir isso.


31



O bit setgid apenas faz com que os arquivos criados herdam o grupo / se / a pessoa que cria o novo arquivo for um membro desse grupo; se o usuário criador for o proprietário, mas não um membro do grupo, ou o diretório for gravável mundialmente, o bit setgid não fará nada. E a umask para todos os usuários de criação de arquivos ainda precisa ser configurada para permitir o acesso apropriado ao grupo. - dannysauer


Outras respostas se aplicam em um caso geral, mas, como você mencionou que o rsync é uma fonte do problema, talvez seja necessário ajustar sua chamada.

Para começar, o popular -a flag faz permissões de cópia rsync; usar -r istead de -a ou adicionar -no-p (sem permissão de sincronização) e -no-g (para nenhum grupo de sincronização). Também suporta rsync --chmod sinalizador para alterar permissões em arquivos recém-criados.


4





Sua umask está errada para as permissões que você deseja. Você quer um umask de 002. Atualmente você tem um umask de 022. Além disso, o comentário sobre como tornar o diretório setgid está correto, mas não tenho certeza se a propriedade do grupo de arquivos é algo que você deseja alterar ou não.

As permissões de arquivos do Unix são, na verdade, um modelo muito simples. Eu acho as ACLs completamente confusas. :-)


3



"As permissões de arquivos Unix são, na verdade, um modelo muito simples. Acho as ACLs completamente confusas." - Eu meio que sinto o oposto (mas de qualquer maneira o +1). As ACLs (e Permitir / Negar ACEs) são simples e as permissões do Unix não fazem sentido. Mas isso vem de um cara que está sofrendo uma instalação do Postfix / Dovecot / Clam / SpamAssassin. - jww