As permissões definidas pela ACL padrão são mascaradas com qualquer que seja o modo que o programa que cria o arquivo fornece. Geralmente, um programa que cria um arquivo regular configura as permissões para 0666
(ou seja, nenhum bit de execução) e permite que o umask
manipule a remoção do acesso do grupo e de outros. Para diretórios, o modo geralmente é definido como 0777
, de modo que os x-bits são , uma vez que são geralmente necessários.
Um programa que cria um arquivo "privado", como chaves SSH, especifica as permissões como 0600
, para garantir que ninguém, a não ser o usuário, tenha acesso.
O manual acl(5)
diz que:
OBJECT CREATION AND DEFAULT ACLs
- The access ACL entries corresponding to the file permission bits are modified so that they contain no permissions that are not contained in the permissions specified by the mode parameter.
Portanto, como a ACL u::
corresponde aos bits de permissão usuais para o usuário do arquivo, as permissões são mascaradas pelo que o programa de criação fornece.
(Em certo sentido, a ACL padrão parece tomar o lugar da umask.) Eu suspeito que, se você criar um diretório, verá que ele obtém o x
-bit como você queria.
Tecnicamente, isso não afeta as entradas da ACL para um usuário específico , como em u:foo:rwx
, mas elas são limitadas pela máscara ACL. A máscara tem uma correspondência com os bits de permissão de grupo tradicionais, e parece que a regra citada acima também se aplica à máscara, de forma que a máscara de ACL é limitada pelos bits de permissão de grupo definidos quando o arquivo é criado.
Vamos tentar:
$ mkdir dir ; chmod 750 dir ; setfacl -d -m u::rx -m g::rx -m u:foo:rwx dir
$ touch dir/file ; mkdir dir/subdir
O arquivo criado tem os x-bits mascarados ( getfacl
aqui mostra os bits definidos e os valores efetivos após a aplicação da máscara):
$ getfacl dir/file
user::r--
user:foo:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-
other::---
Mas o diretório não:
$ getfacl dir/subdir/
user::r-x
user:foo:rwx
group::r-x
mask::rwx
...
Isso pode responder (1) e (3). Quanto a (2): IIRC, o setgid -bit ( g+s
) em um diretório faz com que novos arquivos criados dentro dele herdem o grupo do diretório (não o modo ). O bit pegajoso ( +t
) controla a exclusão de arquivos não pertencentes a você e, na verdade, não tenho idéia do que o bit setuid ( u+s
) faria em um diretório.