Como definir ACLs padrão do Linux de forma diferente para diretórios e arquivos

7

Eu tenho algumas ACLs definidas em um diretório da seguinte forma:

# owner: root
# group: root
user::rwx
group::r--
mask::r-x
other::r--
default:user::r--
default:group::r--
default:mask::r-x
default:other::r--

Eu gostaria que qualquer novo arquivo criado naquela pasta fosse u: apache: r-- e qualquer novo diretório a ser u: apache: r-x. Como especifico essa intenção usando ACLs?

Eu tentei o -dm u:apache:rX e ele não parece fazer nada diferente em comparação com apenas rx

overt htdocs # getfacl .
# file: .
# owner: root
# group: root
user::rwx
user:apache:r--
group::r--
mask::r-x
other::r--
default:user::r--
default:user:apache:r--
default:group::r--
default:mask::r--
default:other::r--

overt htdocs # setfacl -dm u:apache:rx .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

overt htdocs # rm blah.txt
overt htdocs # setfacl -dm u:apache:rX .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

A permissão X maiúscula só parece ser útil para definir as permissões atuais, não para definir permissões padrão:

overt htdocs # setfacl -x u:apache blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
group::r--
mask::r--
other::r--

overt htdocs # setfacl -m u:apache:rX blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r--
group::r--
mask::r--
other::r--
    
por joshperry 22.12.2009 / 00:46

4 respostas

1

Esta postagem em ACLs e máscaras realmente me ajudou a entender como fazer o que eu queria e por quê.

A parte que faltava no meu entendimento era que ao criar um arquivo o kernel usa um conjunto de permissões padrão de 0666 e para novos diretórios 0777. Portanto, por padrão, os diretórios terão o bit de execução (transversal) definido.

A máscara ACL é basicamente uma maneira de definir um umask em um nível de diretório / arquivo / usuário.

    
por 19.09.2014 / 21:50
6

Bem, mas seu exemplo faz exatamente o que você quer;)

Veja o segundo:

overt htdocs # setfacl -dm u:apache:rx .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

A linha importante é:

user:apache:r-x #effective:r--

Mesmo que acl esteja configurado para r-x, é efetivamente r - para arquivos. É por causa da máscara.

E a máscara será sempre apenas rw- para arquivos se o usuário a criar com as permissões rw para usuário. (Não tenho 100% de certeza, mas a máscara não pode ser menos restritiva que as permissões básicas).

Com efeito, você obtém r-- para arquivos e r-x para diretórios.
Porque diretórios criados terão usuário: r-x - > máscara será r-x - > permissão efetiva será rx.
Para arquivos: eles terão r - então a máscara será r - e permissões efetivas para ACLs também serão r--. (Se você criar um arquivo e conceder a ele permissões user :: r-x, a máscara será modificada e os usuários formarão os acls também receberão o x)

    
por 29.12.2009 / 01:06
1

Infelizmente, não há como fazer isso com as ACLs do Linux. É verdade que a máscara aparecerá para fazer exatamente o que você quer, até permissões efetivas. Mas da próxima vez que você fizer uma operação que recalcula a máscara de direitos, bam , todos os seus arquivos serão executados.

Você pode muito bem se resignar a esperar que todos os arquivos em uma ACL sejam executáveis. Isso é realmente apenas uma conveniência e não um recurso de segurança, e desde que você não coloque essas pastas em seu $ PATH, não deve ser um problema. Se ainda incomoda você, a única opção é colocar suas pastas controladas pela ACL em um sistema de arquivos montado sem opção de execução.

    
por 22.04.2015 / 18:22
0

-d (ou - default) é usado para definir os padrões no diretório para que os itens criados nele herdem os perms (como você parece estar fazendo).

Aqui está uma visão geral rápida. link

Não é possível ter arquivos com um padrão e os diretórios têm um padrão diferente.

Você pode executar um script do cron que faz um setfacl em todos os dirs a cada minuto - embora isso seja menos que ideal de uma solução.

localizar / caminho / para / top / dir -tipo d -exec setfacl -dm u: apache: rx {} \;

ou

localizar / caminho / para / top / dir -tipo d | xargs setfacl -dm u: apache: rx

    
por 28.12.2009 / 20:40