2010-06-12 04:06:50 +0000 2010-06-12 04:06:50 +0000
86
86

Como fazer herdar a permissão de novos ficheiros do directório parental?

Tenho um directório chamado data. Depois estou a executar um script sob o id de utilizador ‘robot’. robot escreve para o directório data e actualiza ficheiros no seu interior. A ideia é data está aberta tanto para mim como para o robô para actualizar.

Então eu configuro a permissão e grupo de proprietários como este

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

onde tanto eu como o robô pertencemos ao ‘robot-grp’. Mudo a permissão e o grupo de proprietários recursivamente, como o directório dos pais.

I carregam regularmente novos ficheiros no directório data usando rsync. Infelizmente, os novos ficheiros carregados não herdam a permissão do directório pai, como eu espero. Em vez disso, parece que

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

Quando o robô tenta actualizar new-file.txt, falha devido à falta de permissão do ficheiro.

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

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

Fico muitas vezes confuso com a permissão do ficheiro Unix. Será que tenho sequer um plano correcto? Estou a usar Debian lenny.

Respostas (4)

53
53
53
2010-06-13 02:10:58 +0000

Não quer alterar a máscara por defeito do seu sistema, isso é um risco de segurança. A opção do bit pegajoso funcionará até certo ponto, mas usar ACL’s é o melhor caminho a seguir. Isto é mais fácil do que pensa. O problema com ACL’s básicas é que não são recorrentes por defeito. Se definir uma LCA num directório, apenas os ficheiros dentro desse directório herdarão a LCA. Se criar um subdirectório, este não recebe a LCA pai, a menos que a LCA seja definida para ser recorrente.

Primeiro, certifique-se de que as ACLs estão activadas para o volume em que o directório está ligado. Se tiver tune2fs, pode executar o seguinte:

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

Se não tiver tune2fs, então 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 4ª coluna que diz “padrões” significa no meu sistema (CentOS 5.5), os ACL’s estão ligados. Em caso de dúvida, deixe-a como padrão. Se tentar definir a LCA e esta errar, volte atrás e adicione a opção acl ao /etc/fstab logo após os valores por defeito: defaults,acl.

Pelo que entendi, quer que todos no grupo de utilizadores tenham acesso de escrita ao directório de dados. Isto é conseguido através do seguinte:

setfacl -Rm g:users:rwX,d:g:users:rwX data/
32
32
32
2010-06-12 04:13:24 +0000

A marcação de um setgid de directório (g+s) fará com que novos ficheiros herdem a propriedade do grupo do directório, mas a opção -g do rsync tentará anular isto.

4
4
4
2015-09-03 15:36:56 +0000

Outras respostas aplicam-se num caso geral, mas como menciona que o rsync é uma fonte do problema, poderá apenas precisar de afinar a sua invocação.

Para começar, a popular bandeira -a faz rsync copy permissions; use -r em vez de -a ou adicione -no-p (para nenhuma sincronização de permissão) e -no-g (para nenhuma sincronização de grupo). Também o rsync suporta --chmod flag para alterar as permissões em ficheiros recém-criados.

3
3
3
2010-06-12 04:43:45 +0000

A sua umask está errada para as permissões que deseja. Quer uma umask de 002. Actualmente, tem um frasco de 022. Além disso, o comentário sobre a criação do directório setgid está correcto, mas não tenho a certeza se a propriedade do grupo de ficheiros é algo que deseja alterar ou não. As permissões de ficheiros

Unix são na realidade um modelo muito simples. Acho que as ACLs me confundem completamente :-)