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

81

Eu tenho um diretório chamado data . Então eu estou executando um script sob o id do usuário 'robot'. O robô grava no diretório data e atualiza os arquivos dentro dele. A ideia é que data esteja aberto para eu e o robô atualizarmos.

Então eu configuro a permissão e o grupo do proprietário assim

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

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

Eu carrego regularmente novos arquivos no diretório data 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 , ele 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

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

    
por Wai Yip Tung 12.06.2010 / 06:06

4 respostas

51

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 em que o diretório está. Se você tiver tune2fs , poderá realizar o seguinte:

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

Se você não tiver tune2fs , 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 é feito pelo seguinte:

setfacl -Rm g:users:rwX,d:g:users:rwX data/
    
por 13.06.2010 / 04:10
31

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

    
por 12.06.2010 / 06:13
4

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 sinalizador -a faz as permissões de cópia rsync; use -r istead de -a ou adicione -no-p (para nenhuma permissão de sincronização) e -no-g (para nenhuma sincronização de grupo). O rsync também suporta --chmod flag para alterar permissões em arquivos recém-criados.

    
por 03.09.2015 / 17:36
3

Sua umask está errada para as permissões que você deseja. Você quer 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 do arquivo Unix são, na verdade, um modelo muito simples. Eu acho as ACLs completamente confusas. : -)

    
por 12.06.2010 / 06:43