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:
- Definir permissões individuais para arquivos e diretórios para usuários e grupos específicos.
- Herança de permissões para novos arquivos dentro de um diretório.
- 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áriouser2
(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:
Conceder acesso total à
Alice
:sudo setfacl -m u:alice:rwx /project
Conceder acesso de leitura apenas ao
Bob
:sudo setfacl -m u:bob:r-- /project
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
Os ACLs não funcionam, embora você os tenha configurado. Talvez a partição não esteja montada com a opção
acl
. Use omount
para verificar e remonte a partição, se necessário.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.
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.
GO TO FULL VERSION