CodeGym /Cursos /Docker SELF /Gerenciamento de permissões de acesso com ACL (`setfacl`,...

Gerenciamento de permissões de acesso com ACL (`setfacl`, `getfacl`)

Docker SELF
Nível 5 , Lição 3
Disponível

Gerenciamento de permissões de acesso com ACL setfacl, getfacl

1. Introdução ao ACL

Imagina que você é o anfitrião de uma festa (ou administrador do sistema). Você quer que os convidados possam entrar em alguns quartos, mas outros só com sua permissão. As permissões padrão no Linux rwx permitem que você gerencie o acesso apenas para três categorias: dono (user), grupo (group) e todos os outros (others). Mas e se você precisar dar acesso a um quarto só para um amigo especial? O guardião do modelo padrão de permissões vai te dizer: "Ei, isso não funciona assim". É aí que o ACL entra em cena pra salvar o dia.

O ACL (Access Control Lists) resolve o problema da limitação do sistema clássico de três níveis de permissões, permitindo definir permissões específicas para usuários e grupos.

Principais funcionalidades do ACL:

  1. Definir permissões individuais para arquivos e diretórios para usuários e grupos específicos.
  2. Herança de permissões para novos arquivos dentro de um diretório.
  3. Configuração mais flexível do que a abordagem tradicional do chmod.

2. Como saber se o ACL está ativado?

Antes de começar a gerenciar o ACL, bora descobrir se ele é suportado pelo seu sistema. Você pode verificar isso com o comando:

mount | grep acl

Se o sistema de arquivos foi montado com a opção acl, você tá pronto pra ação! Caso contrário, será necessário remontar a partição adicionando acl:

sudo mount -o remount,acl /seu/ponto/de/montagem

Pronto, agora você tá preparado. Chegou a hora de botar a mão na massa.


3. Comandos principais para trabalhar com ACL

Comando Descrição
getfacl Obter a lista atual de ACL para um arquivo ou diretório.
setfacl Definir ou modificar ACL para um arquivo ou diretório.
setfacl -m Modificar (modify) as permissões atuais.
setfacl -x Remover (remove) permissões específicas.
setfacl -b Excluir todas as entradas de ACL para um arquivo ou diretório.
setfacl -d Definir permissões padrão para diretórios, aplicadas a arquivos criados dentro deles.

Agora bora ver cada comando desses com exemplos!


Obtendo os ACL atuais getfacl

Vamos supor que temos um arquivo chamado example.txt. Queremos ver as permissões atuais usando ACL. Basta um comando:

getfacl example.txt

O resultado esperado será algo assim:

# file: example.txt
# owner: user1
# group: group1
user::rw-
group::r--
other::---

Essa lista mostra as permissões padrão: o dono user1 pode ler e escrever, o grupo group1 só pode ler, e outros usuários não têm acesso.


Definindo permissões individuais (setfacl)

Agora imagine que o usuário user2 precisa de permissão para escrever no arquivo example.txt. Fazemos isso assim:

sudo setfacl -m u:user2:rw example.txt

O comando significa:

  • -m: modificar permissões.
  • u:user2:rw: adicionar ou modificar permissões para o usuário user2 (read-write).

Vamos verificar o resultado:

getfacl example.txt

Agora o resultado será assim:

# file: example.txt
# owner: user1
# group: group1
user::rw-
user:user2:rw  # Regra adicional!
group::r--
other::---

Removendo permissões individuais setfacl -x

Se decidirmos que o usuário user2 não deve mais ter permissão para escrever, podemos remover essas permissões:

sudo setfacl -x u:user2 example.txt

Vamos verificar:

getfacl example.txt

Não há mais regras adicionais para user2!


Definindo permissões para grupos

As permissões via ACL podem ser atribuídas não só a usuários específicos, mas também a grupos inteiros. Por exemplo, para dar ao grupo devteam acesso de leitura e escrita:

sudo setfacl -m g:devteam:rw example.txt

Definindo permissões padrão setfacl -d

Às vezes, é preciso definir permissões automaticamente para todos os novos arquivos e diretórios dentro de uma pasta específica. Por exemplo, digamos que você quer que todos os arquivos no diretório project_dir tenham permissão de escrita para o usuário developer. Nesse caso:

sudo setfacl -d -m u:developer:rw project_dir

Para verificar as permissões, use:

getfacl project_dir

Agora, todos os novos arquivos e subdiretórios em project_dir seguirão essa regra padrão.


Removendo todos os ACL setfacl -b

Se você quiser limpar todos os ACL de um arquivo:

sudo setfacl -b example.txt

Agora o arquivo volta ao modelo padrão de permissões user:group:others.


4. Aplicação prática do ACL

Cenário: Trabalho colaborativo em um projeto

Suponha que você tenha um projeto armazenado no diretório /project. Trabalham três pessoas:

  • Alice deve ter acesso completo (leitura, escrita, execução).
  • Bob deve apenas ler os arquivos.
  • Eve não deve ter acesso ao diretório.

Configuramos isso usando ACL:

  1. Conceder acesso total à Alice:

    sudo setfacl -m u:alice:rwx /project
    
  2. Conceder acesso de leitura apenas ao Bob:

    sudo setfacl -m u:bob:r-- /project
    
  3. Para a Eve, não fazemos nada — ela não terá acesso por padrão.

Vamos verificar a lista atual de ACL:

getfacl /project

Saída:

# file: /project
# owner: root
# group: root
user::rwx
user:alice:rwx
user:bob:r--
group::---
other::---

Agora, Alice pode trabalhar sem restrições, Bob pode apenas visualizar os arquivos, e Eve fica de fora.


5. Possíveis erros e como resolvê-los

  1. Os ACLs não funcionam, embora você os tenha configurado. Talvez a partição não esteja montada com a opção acl. Use o mount para verificar e remonte a partição, se necessário.

  2. Conflito entre permissões padrão e ACL. ACL sempre tem prioridade sobre as permissões padrão. Por exemplo, mesmo que "others" esteja configurado para negar leitura, o ACL pode permitir acesso para um usuário específico.

  3. Esquece sobre ACLs herdadas. Se você configurou permissões -d (default), verifique se essas regras foram herdadas por novos arquivos.

Por que isso é importante?

Gerenciar permissões com ACL te permite configurar acesso de forma flexível para diferentes usuários e grupos. Isso é especialmente útil em servidores de trabalho, onde a distribuição de permissões precisa levar em conta as funções. Por exemplo, em empresas, ACLs são usadas para restringir acesso só para quem "entende do assunto" — uma das chaves para a segurança.

Você pode aprender mais com o manual oficial de ACL, para entender melhor o que elas podem fazer.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION