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 setfacl. As opções mais comuns são:

    • -d: define a ACL padrão, que será herdada por subdiretórios e arquivos.

    • -k: remove a ACL padrão.

    • -R: aplica as configurações de ACL de forma recursiva.

    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 -d, o comando setfacl opera apenas em arquivos existentes. Para garantir que todos os novos arquivos recebam as configurações desejadas de ACL, é necessário usar o comando setfacl duas vezes: primeiro com a opção -d para definir a ACL padrão, e depois com a opção -R e sem a opção -d para lidar com os arquivos existentes.

  • operation: define a ação a ser realizada, como adicionar ou remover uma configuração de ACL. As operações disponíveis são:

    • --set: usada para definir uma ACL. Note que ela substituirá qualquer ACL existente.

    • -m: adiciona às configurações atuais de ACL sem substituí-las completamente.

    • -x: remove uma ACL existente.

  • entity e entity name: tipo e nome do objeto para o qual a ACL será definida. Existem dois tipos de objetos: u para usuário e g para grupo. Após especificar o tipo de objeto, deve-se indicar o nome do objeto.

  • 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, o grupo "users" (g:users) recebe permissões "=rwx"=, ou seja, permissões de leitura, escrita e execução. A operação -m indica que essa configuração deve ser adicionada às listas ACL existentes.

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, onde o grupo "users" recebe permissões rwx e o grupo "developers" recebe permissões rx.

Para obter informações sobre as listas ACL, usa-se o comando getfacl, passando o nome do arquivo ou diretório:

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, enquanto o grupo proprietário e todos os outros têm permissões 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, que deveria criar o arquivo, não funciona sem o comando 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 para o grupo "users" no diretório /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, indicando as permissões para o grupo "users".

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 segue as listas de acesso definidas para o diretório /test. Agora vamos modificá-las:

programicio@Programicio:/test$ sudo setfacl -d -m g:users:rwx /test

A opção -d define a lista de acesso ACL padrão para todos os novos arquivos e diretórios com base na ACL definida para o diretório /test. Por exemplo, vamos criar um novo arquivo chamado hello2.txt e verificar suas ACLs:

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 já aplica as ACLs definidas para o diretório. No entanto, o primeiro arquivo de texto - hello1.txt - ainda não segue a ACL do diretório. Para resolver esse problema, precisamos aplicar as ACLs de forma recursiva:

sudo setfacl -R -m g:users:rwx /test
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com