Eu tenho algumas ACLs definidas em um diretório da seguinte maneira:
# 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--
Gostaria que os novos arquivos criados nessa pasta fossem u: apache: r-- e quaisquer novos diretórios fossem u: apache: rx. Como faço para especificar essa intenção usando ACLs?
Eu tentei o -dm u:apache:rX
e não parece fazer nada diferente em comparação com apenasrx
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 maiúscula X parece ser útil apenas para definir 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--
fonte
#effective
texto! Obrigado pela explicação de como as máscaras efetuam permissões efetivas.Infelizmente, não há como fazer isso com as ACLs do Linux. É verdade que a máscara parecerá fazer exatamente o que você deseja, na medida em que as 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ê também pode renunciar 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 contanto que você não coloque essas pastas no seu $ PATH, isso não deve ser um problema. Se isso ainda o incomoda, a única opção é colocar as pastas controladas pela ACL em um sistema de arquivos montado sem opção de execução.
fonte
-d (ou --default) é usado para definir os padrões no diretório para que as coisas criadas nele herdem as permissões (como você parece estar fazendo).
Aqui está uma rápida visão geral. http://www.vanemery.com/Linux/ACL/linux-acl.html#default
Não é possível ter arquivos com um padrão e dirs com um padrão diferente.
Você pode executar um script fora do cron que faça um setfacl em todos os diretórios a cada minuto - embora isso seja menos do que o ideal de uma solução.
localizar / caminho / para / top / dir -tipo d -exec setfacl -dm u: apache: rx {} \;
ou
localizar / caminho / para / topo / dir -type d | xargs setfacl -dm u: apache: rx
fonte
Este post sobre ACLs e máscaras realmente me ajudou a entender como fazer o que eu queria e por quê.
A parte que faltava do meu entendimento era que, ao criar um arquivo, o kernel usa um conjunto de permissões padrão 0666 e para novos diretórios 0777. Portanto, por padrão, os diretórios terão o bit execute (transversal) definido.
A máscara da ACL é basicamente uma maneira de definir um nível
umask
de diretório / arquivo / usuário.fonte