Listas de Controle de Acesso (ACL) - Linux
No Linux, as ACL, ou Listas de Controle de Acesso,fornecem uma maneira adicional de conceder permissões a vários usuários e grupos para um único arquivo ou diretório. As ACLs ajudam a superar algumas limitações de outras ferramentas comuns de gerenciamento de permissões, especificamente:
Um arquivo ou diretório pode ter apenas um proprietário e um grupo proprietário.
Não há herança de permissões para que as permissões de um diretório sejam transmitidas aos seus arquivos e subdiretórios.
As ACLs são frequentemente aplicadas a diretórios para garantir que novos arquivos criados dentro deles recebam automaticamente as permissões necessárias. Para configurar as ACLs, utiliza-se o comando setfacl
setfacl [options] operation entity:entityname:permissions file
O comando setfacl aceita os seguintes argumentos:
options: opções opcionais para gerenciar o funcionamento do comando
. As opções mais comuns são:setfacl
: define a ACL padrão, que será herdada por subdiretórios e arquivos.-d
: remove a ACL padrão.-k
: aplica as configurações de ACL de forma recursiva.-R
A ACL padrão é destinada a novos arquivos e não afeta os arquivos existentes. Todos os novos arquivos receberão as permissões definidas na ACL padrão. Sem a opção
, o comando-d
opera apenas em arquivos existentes. Para garantir que todos os novos arquivos recebam as configurações desejadas de ACL, é necessário usar o comandosetfacl
duas vezes: primeiro com a opçãosetfacl
para definir a ACL padrão, e depois com a opção-d
e sem a opção-R
para lidar com os arquivos existentes.-d
operation: define a ação a ser realizada, como adicionar ou remover uma configuração de ACL. As operações disponíveis são:
: usada para definir uma ACL. Note que ela substituirá qualquer ACL existente.--set
: adiciona às configurações atuais de ACL sem substituí-las completamente.-m
: remove uma ACL existente.-x
entity e entity name: tipo e nome do objeto para o qual a ACL será definida. Existem dois tipos de objetos:
para usuário eu
para grupo. Após especificar o tipo de objeto, deve-se indicar o nome do objeto.g
permissions: as permissões a serem definidas usando as listas de controle de acesso.
file: nome do arquivo ou diretório ao qual as ACLs devem ser aplicadas.
Exemplo:
setfacl -m g:users:rwx /somedir
Neste caso, para o diretório /somedir
g:users
rwx
Também é possível definir ACLs para vários usuários ou grupos de uma vez:
setfacl -d -m g:users:rwx,g:developers:rx /somedir
Este comando define a ACL padrão para a pasta /somedir
rwx
rx
Para obter informações sobre as listas ACL, usa-se o comando getfacl
getfacl file
Por exemplo, vamos criar um novo diretório chamado "test" na raiz do sistema de arquivos:
programicio@Programicio:~$ sudo mkdir /test
Vamos verificar as listas ACL para este diretório:
programicio@Programicio:~$ getfacl test # file: test # owner: root # group: root user::rwx group::r-x other::r-x
Aqui vemos que o proprietário do usuário tem permissões rwx
r-x
Vamos entrar neste diretório e tentar criar um novo arquivo chamado "hello.txt":
programicio@Programicio:~$ cd /test programicio@Programicio:/test$ touch hello.txt touch: cannot touch 'hello.txt': Permission denied
Como podemos ver, o comando touch
sudo
Agora, vamos definir as listas de controle de acesso para este diretório. Por exemplo, no meu caso, o usuário atual pertence ao grupo "users":
programicio@Programicio:/test$ groups programicio adm cdrom sudo dip plugdev users lpadmin
Vamos definir permissões rwx
/test
programicio@Programicio:/test$ sudo setfacl -m g:users:rwx /test [sudo] password for programicio:
Depois disso, vamos verificar novamente as listas de controle de acesso para o diretório usando o comando getfacl
programicio@Programicio:/test$ getfacl test # file: test # owner: root # group: root user::rwx group::r-x group:users:rwx mask::rwx other::r-x
Agora vemos que a saída do comando inclui um novo item, group:users:rwx
Após isso, os usuários do grupo "users" poderão modificar o conteúdo do diretório, como criar um arquivo de texto, sem precisar do comando sudo
programicio@Programicio:/test$ touch hello1.txt
Vamos verificar as ACLs para o arquivo criado:
programicio@Programicio:/test$ getfacl hello1.txt # file: hello1.txt # owner: programicio # group: programicio user::rw- group::rw- other::r--
Podemos ver que o arquivo hello1.txt
/test
programicio@Programicio:/test$ sudo setfacl -d -m g:users:rwx /test
A opção -d
/test
hello2.txt
programicio@Programicio:/test$ touch hello2.txt programicio@Programicio:/test$ getfacl hello2.txt # file: hello2.txt # owner: programicio # group: programicio user::rw- group::r-x group:users:rwx mask::rw- other::r--
Podemos ver que o arquivo "hello2.txt
hello1.txt
sudo setfacl -R -m g:users:rwx /test