estranhezas na interferência de ACLs estendidas do Linux e permissões 'regulares'

estranhezas na interferência de ACLs estendidas do Linux e permissões 'regulares'

Eu tenho um código legado que verifica se algum arquivo é somente leitura e legível apenas por seu proprietário, ou seja, permissões definidas como 0400. Também preciso conceder acesso somente leitura a esse arquivo para algum outro usuário no sistema. Estou tentando definir ACLs estendidas, mas isso também altera os bits de permissão 'regulares' de uma maneira estranha:

$ ls -l hostkey.pem 
-r-------- 1 root root 0 Jun  7 23:34 hostkey.pem
$ setfacl -m user:apache:r hostkey.pem 
$ getfacl hostkey.pem 
# file: hostkey.pem
# owner: root
# group: root
user::r--
user:apache:r--
group::---
mask::r--
other::---

$ ls -l hostkey.pem 
-r--r-----+ 1 root root 0 Jun  7 23:34 hostkey.pem

E depois disso, o código legado começa a reclamar que o arquivo pode ser lido pelo grupo (embora na verdade não seja!)

É possível definir as ACLs estendidas de forma que algum outro usuário também tenha acesso somente leitura, enquanto o arquivo parecerá ter apenas 0400 permissões 'regulares'?

Responder1

Vimos algo assim em nossos experimentos com ACLs do Linux, especialmente via Samba. Mas na maioria dos casos, mesmo que os bits regulares de permissão/modo de arquivo sejam alterados de maneiras estranhas, o sistema ainda funciona conforme o esperado.

Lembro-me de ter lido em algum lugar (não me lembro onde, desculpe) que ao criar arquivos (possivelmente via Samba) as permissões ACL não eram refletidas corretamente nos bits de modo até que os dados fossem gravados no arquivo. Isso afetaria os arquivos criados usando, por exemplo, touch.

Outra coisa a considerar é se você deseja definir ACLs padrão.

Usamos algo assim ao criar um novo diretório com arquivos protegidos por ACL; o último comando, com getfacl canalizado para setfacl, copia as ACLs atualmente definidas para serem usadas como ACLs padrão para novos arquivos criados neste diretório:

chown --recursive $username:$userrole /home/data/private/$datadir
chmod --recursive u=rwx,g=,o= /home/data/private/$datadir

# remove previous ACLs
setfacl --recursive --remove-all /home/data/private/$datadir

# User/group access for owner, group leader and web server
setfacl --recursive -m u:$username:rwx /home/data/private/$datadir
setfacl --recursive -m g:RGLeader:rx /home/data/private/$datadir
setfacl --recursive -m u:www-data:rwx /home/data/private/$datadir

# Copy access modes to default access modes
getfacl --access /home/data/private/$datadir | setfacl --recursive -d -M- /home/data/private/$datadir

informação relacionada