Pode ser a hora da noite, mas isso está me intrigando. Imagine o seguinte.
[root@node1 acltest]# getfacl foo/
# file: foo
# owner: root
# group: testuser
user::rwx
group::r-x
other::---
[root@node1 acltest]# ls -la .
total 24
drwxr-xr-x 3 root root 4096 Feb 9 21:53 .
drwxr-xr-x 25 root root 4096 Feb 9 21:54 ..
drwxr-x--- 2 root testuser 4096 Feb 9 21:53 foo
[root@node1 acltest]# setfacl -m m::rwx foo
[root@node1 acltest]# getfacl foo/
# file: foo
# owner: root
# group: testuser
user::rwx
group::r-x
mask::rwx
other::---
[root@node1 acltest]# ls -la .
total 24
drwxr-xr-x 3 root root 4096 Feb 9 21:53 .
drwxr-xr-x 25 root root 4096 Feb 9 21:54 ..
drwxrwx---+ 2 root testuser 4096 Feb 9 21:53 foo
[root@node1 acltest]# su - testuser
[testuser@node1 ~]$ cd /acltest/foo/
[testuser@node1 foo]$ ls -la .
total 16
drwxrwx---+ 2 root testuser 4096 Feb 9 21:53 .
drwxr-xr-x 3 root root 4096 Feb 9 21:53 ..
[testuser@node1 foo]$ touch bar
touch: cannot touch 'bar': Permission denied
Em palavras: eu crio um diretório foo
, com o modo 0750
, root
como proprietário e testuser
como o grupo. ( testuser
é o grupo privado de testuser
, mas isso não importa.)
O comando getfacl
mostra corretamente nenhuma ACL neste diretório e ainda não há máscara. A máscara será definida de acordo com as permissões do grupo se eu adicionar um grupo ou usuário nomeado agora.
Se eu definir explicitamente a máscara para rwx
agora, as permissões de grupo, conforme mostrado por ls
, também serão alteradas. Eu sei que acontece o contrário (a máscara muda quando as permissões do grupo mudam), mas isso parece intrigante.
Quanto mais intrigante, porque a saída getfacl
não mostra as permissões do grupo como rwx
, mas - como dito - ls
faz.
Qual é o certo? Aparentemente, a saída de getfacl
está correta, porque testuser
não pode gravar em foo
. Como esperado, a propósito, porque eu não concedi ao grupo testuser
nenhuma permissão para fazer isso.
Continua. Não posso permitir as permissões de gravação do grupo testuser
em foo
usando apenas chmod
. Eu tenho que definir explicitamente uma ACL usando setfacl -m g:testuser:rwx foo
para permitir que testuser
toque em foo/bar
.
Alguém pode explicar a lógica por trás da diferença nas saídas de getfacl
e ls
? Eu sei que pode ser difícil ter permissões normais junto com as ACLs, mas isso parece errado. (Embora eu espere estar faltando algo claramente óbvio;))
Eu já vi Por que o chmod (1 ) no grupo afetam a máscara ACL?