Por exemplo, quero dar aos meus colegas acesso de gravação a determinado diretório. Vamos supor que os subdiretórios continham direitos de acesso 775, arquivos 664 e também havia alguns arquivos executáveis no diretório - 775.
Agora eu quero adicionar permissões de gravação. Com o chmod, eu poderia tentar algo como
chmod o+w -R mydir/
Mas isso não é legal, já que não quero tornar o diretório gravável em todo o mundo - quero dar acesso apenas a certos usuários, então quero usar a ACL. Mas existe uma maneira fácil de definir essas permissões? Na minha opinião, preciso resolver pelo menos três casos (diretórios, arquivos, arquivos executáveis) separadamente:
find -type d -exec setfacl -m u:colleague:rwx {} \;
find -type f -executable -exec setfacl -m u:colleague:rwx {} \;
find -type f \! -executable -exec setfacl -m u:colleague:rw {} \;
Parece um monte de linhas de código para uma tarefa tão simples. Existe uma maneira melhor?
fonte
-X
não funciona como esperado em incluído nosetfacl 2.2.49
.Conforme mencionado por umläute, o comando
setfacl -R
com "X" maiúsculo é o caminho a seguir, como:No entanto, para aqueles que precisam reaplicar a ACL de forma recruta (ou seja, como "reaplicar permissões em subdiretórios" no Windows).
Esse comando pode ser dividido para evitar erros
setfacl: foobar: Only directories can have default ACLs
.Observe que a sintaxe
<( something )
é Substituição de processo , específica para o bash. Pode ser necessário criar um arquivo temporário se você usar outro shell.fonte
fonte
for i in $(find …)
.find /data -mindepth 0 -type d -exec setfacl -m u:zabbix:r-X {} \;
$(find /data -mindepth 0 -type d)
não retornará resultados linha por linha, ele armazenará em buffer todos os resultados. Se houver um espaço em uma linha, você obterá um registro incorreto na$i
variável.