Estou tentando executar o ls
comando em um diretório que possui permissões acl para o proprietário e o grupo do diretório (sem conjunto de permissões posix padrão). Isso resulta em uma permissão negada, embora getfacl
diga que o usuário deve poder fazê-lo.
Aqui está o que estou fazendo:
- Crie um diretório e um arquivo dentro dele.
mkdir /tmp/mydir && touch /tmp/mydir/myfile
- Verifique se consigo executar
ls
neste diretório.
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
total 896
drwxrwxr-x 2 jgazula jgazula 4096 Nov 1 11:57 .
drwxrwxrwt 25 root root 909312 Nov 1 11:57 ..
-rw-rw-r-- 1 jgazula jgazula 0 Nov 1 11:57 myfile
- Agora, vamos remover todas as permissões posix padrão neste diretório.
chmod 000 /tmp/mydir
- Verifique as permissões.
jgazula@gazula:/tmp$ ls -al /tmp | grep mydir
d--------- 2 jgazula jgazula 4096 Nov 1 11:57 mydir
- Não deveríamos poder
ls
agora.
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
ls: cannot open directory '/tmp/mydir/': Permission denied
- Defina as permissões de acl para o
jgazula
usuário e grupo.
sudo setfacl --mask -Rm u:jgazula:rwx,g:jgazula:rwx /tmp/mydir/
- Verifique as permissões de acl.
jgazula@gazula:/tmp$ getfacl -ep /tmp/mydir/
# file: /tmp/mydir/
# owner: jgazula
# group: jgazula
user::---
user:jgazula:rwx #effective:rwx
group::--- #effective:---
group:jgazula:rwx #effective:rwx
mask::rwx
other::---
- Como as permissões acl (incluindo as permissões efetivas) parecem boas, devo poder executar
ls
no diretório?
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
ls: cannot open directory '/tmp/mydir/': Permission denied
Mas não posso e não entendo o porquê.
- Curiosamente, quando eu verifico as permissões posix padrão, os bits de permissão do grupo foram definidos? Não tenho certeza se entendi por que apenas as permissões de grupo foram atualizadas.
jgazula@gazula:/tmp$ ls -al /tmp | grep mydir
d---rwx---+ 2 jgazula jgazula 4096 Nov 1 12:13 mydir
- Vamos definir as permissões de acl para o proprietário e o grupo (ou seja, omita o proprietário/grupo do comando).
sudo setfacl --mask -Rm u::rwx,g::rwx /tmp/mydir/
- Verifique as permissões de acl novamente.
jgazula@gazula:/tmp$ getfacl -ep /tmp/mydir/
# file: /tmp/mydir/
# owner: jgazula
# group: jgazula
user::rwx
user:jgazula:rwx #effective:rwx
group::rwx #effective:rwx
group:jgazula:rwx #effective:rwx
mask::rwx
other::---
- Verifique se posso executar
ls
agora.
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
total 896
drwxrwx---+ 2 jgazula jgazula 4096 Nov 1 11:57 .
drwxrwxrwt 25 root root 909312 Nov 1 11:57 ..
-rwxrwxr--+ 1 jgazula jgazula 0 Nov 1 11:57 myfile
Por que o passo 6 não funciona sozinho? Estou definindo as permissões de acl explicitamente para um usuário e grupo. Por que preciso executar a etapa 11?
Ao executar
sudo setfacl --mask -Rm u:jgazula:rwx,g:jgazula:rwx /tmp/mydir/
, você está criando umaACL_USER
entrada para usuáriojgazula
. Mas oACL_USER_OBJ
para o proprietário do arquivo ainda é---
. (Você pode ver isso nagetfacl
saída na etapa 7.)De acordo com
man ACL
, o algoritmo de verificação de acesso vai:Portanto, a
ACL_USER
entrada nunca é verificada.Há essencialmente a mesma pergunta no serverfault: ACL: dando - - - permissões para o proprietário do arquivo . (Mas parece que a resposta ficou
ACL_USER
vsACL_USER_OBJ
invertida.)