Como a maioria dos usuários de
GNU/Linux já sabe, o sistema do pinguim utiliza um sistema de permissionamento de arquivos e diretórios muito robusto, limitando um
inode a permissões para o dono do
inode, o grupo dono e demais usuários.
Porém, é possível que se estabeleçam permissões personalizadas por meio da criação de
ACLs (Access Control List), conforme o exemplo a seguir.
Neste contexto, tenho uma máquina chamada "debian" e 2 usuários: "daniel" e "teste".
Primeiramente, criarei o diretório
/home/daniel/teste:
mkdir /home/daniel/teste
touch /home/daniel/teste/arquivo_daniel.txt
ls -lh /home/daniel/teste/
total 0
-rw-r--r-- 1 daniel daniel 0 Jul 14 00:02 arquivo_daniel.txt
ls -ld /home/daniel/teste/
drwxr-xr-x 2 daniel daniel 4096 Jul 13 23:38 /home/daniel/teste/
Em seguida, vou utilizar o comando
getfacl para visualizar todas as permissões do diretório
/home/daniel/teste, tanto as permissões normais, quanto ACLs:
getfacl /home/daniel/teste/
getfacl: Removing leading '/' from absolute path names
# file: home/daniel/teste/
# owner: daniel
# group: daniel
user::rwx
group::r-x
other::r-x
Logado com o usuário "teste", tentaremos criar um arquivo em
/home/daniel/teste:
touch /home/daniel/teste/arquivo_teste.txt
touch: não foi possível tocar "/home/daniel/teste/arquivo_teste.txt": Permissão negada
Agora, vamos incluir uma ACL por meio do comando
setfacl, permitindo que o usuário "teste" tenha poderes totais no diretório
/home/daniel/teste:
setfacl -m u:teste:rwx /home/daniel/teste
Legendas:
- -m :: Modifica uma ACL existente ou cria ela, se não existir.
- u:teste:rwx :: Indica a ACL para o usuário "teste", com as permissões de leitura, escrita e execução, respectivamente.
É possível perceber o "+" na saída do comando
ls, após a criação da ACL. Este sinal indica justamente a existência de uma ACL configurada para este diretório, com permissões totais para o usuário "teste", além das permissões normais, e é visível por meio do comando
getfacl:
ls -ld /home/daniel/teste/
drwxrwxr-x+ 2 daniel daniel 4096 Jul 13 23:41 /home/daniel/teste/
getfacl /home/daniel/teste/
getfacl: Removing leading '/' from absolute path names
# file: home/daniel/teste/
# owner: daniel
# group: daniel
user::rwx
user:teste:rwx
group::r-x
mask::rwx
other::r-x
Após a criação da ACL, logaremos como usuário "teste" e tentaremos novamente criar o arquivo
arquivo_teste.txt em
/home/daniel/teste:
touch /home/daniel/teste/arquivo_teste.txt
ls -lh /home/daniel/teste/
total 0
-rw-r--r-- 1 daniel daniel 0 Jul 14 00:02 arquivo_daniel.txt
-rw-r--r-- 1 teste teste 0 Jul 13 23:41 arquivo_teste.txt
Observações:
- O comando setfacl também possui uma opção --set, porém, esta opção sobrescreve quaisquer regras de ACL criadas previamente. Prefira utilizar a opção -m;
- Os comandos getfacl e setfacl são providos pelo pacote acl, em sistemas Debian e derivados;
- Para maiores informações, consulte man getfacl e man setfacl.