Voltar ao Diminua Blog

Artigo

Desvendando o `setfacl` no Linux: Permissões Aprimoradas para Arquivos e Diretórios

Vá além das permissões tradicionais do Unix e controle o acesso aos seus dados com precisão.

Desvendando o `setfacl` no Linux: Permissões Aprimoradas para Arquivos e Diretórios

Introdução às Permissões Tradicionais do Linux

No universo Linux, o controle de acesso a arquivos e diretórios é fundamental para a segurança e integridade do sistema. Tradicionalmente, o Linux utiliza um modelo de permissões baseado em três categorias de usuários: o proprietário (user), o grupo (group) e outros (others). Para cada uma dessas categorias, definimos três tipos de permissões: leitura (read), escrita (write) e execução (execute).

Essas permissões são representadas por uma string de nove caracteres, onde os três primeiros indicam as permissões do proprietário, os três seguintes as permissões do grupo e os três últimos as permissões para outros. Por exemplo, a permissão -rwxr-xr-- significa:

  • -: Indica que é um arquivo regular (d seria para diretório).
  • rwx: O proprietário tem permissão de leitura, escrita e execução.
  • r-x: Membros do grupo têm permissão de leitura e execução, mas não de escrita.
  • r--: Outros usuários têm apenas permissão de leitura.

Os comandos chmod e chown são as ferramentas padrão para gerenciar essas permissões. No entanto, em cenários mais complexos, onde precisamos de um controle mais granular, as permissões tradicionais podem se tornar limitantes.

A Necessidade de Permissões Estendidas: ACLs

Imagine uma situação onde você precisa conceder permissão de escrita a um usuário específico que não é o proprietário do arquivo e nem pertence ao grupo principal do arquivo. Ou talvez você precise permitir que um grupo específico de usuários tenha acesso de leitura a um diretório, enquanto outros grupos tenham acesso diferente. As permissões tradicionais do Linux, baseadas em proprietário, grupo e outros, não oferecem essa flexibilidade de forma direta.

É aqui que entram as Listas de Controle de Acesso (ACLs - Access Control Lists). As ACLs permitem definir permissões mais específicas para usuários e grupos individuais, além das permissões padrão. Elas funcionam como uma camada adicional sobre o modelo de permissões tradicional, oferecendo um controle de acesso muito mais granular.

Introdução ao `setfacl`

O comando setfacl (set file ACL) é a ferramenta utilizada para definir e modificar as ACLs em arquivos e diretórios no Linux. Ele permite adicionar, remover ou modificar entradas de permissão para usuários e grupos específicos.

Verificando ACLs Existentes com `getfacl`

Antes de começar a modificar, é útil saber como verificar as ACLs de um arquivo ou diretório. Para isso, utilizamos o comando getfacl:

getfacl nome_do_arquivo_ou_diretorio

A saída do getfacl mostrará as permissões tradicionais, além das entradas de ACL específicas. Uma entrada de ACL é identificada pelo tipo (user, group, other) e pelo nome do usuário ou grupo, seguido pelas permissões (r, w, x).

Adicionando Permissões com `setfacl`

Para adicionar permissões a um usuário específico, usamos a opção -m (modify). A sintaxe básica é:

setfacl -m u:nome_usuario:permissoes nome_do_arquivo_ou_diretorio

Onde:

  • u: indica que estamos definindo permissões para um usuário.
  • nome_usuario é o nome do usuário ao qual você deseja conceder permissões.
  • permissoes é uma string contendo as permissões desejadas (r para leitura, w para escrita, x para execução).

Exemplo: Conceder permissão de leitura e escrita ao usuário alice no arquivo documento.txt:

setfacl -m u:alice:rw documento.txt

Para adicionar permissões a um grupo específico, usamos g: em vez de u::

setfacl -m g:nome_do_grupo:permissoes nome_do_arquivo_ou_diretorio

Exemplo: Conceder permissão de leitura ao grupo desenvolvedores no diretório projetos:

setfacl -m g:desenvolvedores:r projetos

Removendo Permissões com `setfacl`

Para remover uma entrada de ACL, utilizamos a opção -x (remove):

setfacl -x u:nome_usuario nome_do_arquivo_ou_diretorio

Exemplo: Remover todas as permissões ACL do usuário alice no arquivo documento.txt:

setfacl -x u:alice documento.txt

Similarmente, para remover permissões de um grupo:

setfacl -x g:nome_do_grupo nome_do_arquivo_ou_diretorio

Permissões Padrão para Diretórios (Default ACLs)

Uma das funcionalidades mais poderosas das ACLs é a capacidade de definir permissões padrão para diretórios. Quando você define uma ACL padrão em um diretório, todos os novos arquivos e subdiretórios criados dentro dele herdarão essas permissões automaticamente. Isso é extremamente útil para garantir que novas criações sigam uma política de acesso consistente.

Para definir ACLs padrão, usamos a opção -d (default) em conjunto com a opção -m:

setfacl -d -m u:nome_usuario:permissoes nome_do_diretorio

Exemplo: Definir que todos os novos arquivos criados em compartilhado terão permissão de leitura e escrita para o usuário bob:

setfacl -d -m u:bob:rw compartilhado

Note que as ACLs padrão só afetam os novos arquivos e diretórios criados. Elas não alteram as permissões de itens já existentes.

Permissões Especiais e a Máscara

Ao usar setfacl, você pode notar uma entrada de ACL chamada mask. A máscara define o conjunto máximo de permissões efetivas para todos os usuários que não são o proprietário e não são explicitamente listados nas entradas user: ou group:. Quando você concede permissões a um usuário ou grupo, o sistema calcula as permissões efetivas com base na máscara.

Por exemplo, se você define u:alice:rwx e a máscara é r-x, as permissões efetivas para alice serão r-x, pois a máscara limita a escrita.

Em muitos casos, o sistema gerencia a máscara automaticamente. No entanto, em situações mais avançadas, pode ser necessário ajustar a máscara manualmente usando setfacl -m m:permissoes nome_do_arquivo.

Cuidados e Boas Práticas

Embora as ACLs ofereçam um controle de acesso robusto, é importante usá-las com cautela:

  • Complexidade: Um grande número de ACLs pode tornar o gerenciamento de permissões complexo. Documente suas configurações.
  • Compatibilidade: Nem todos os sistemas de arquivos ou versões mais antigas do Linux suportam ACLs nativamente. Certifique-se de que o sistema de arquivos esteja montado com suporte a ACL (geralmente habilitado por padrão em sistemas modernos como ext4, XFS).
  • Scripts: Ao escrever scripts que manipulam arquivos e diretórios, considere como as ACLs podem afetar o comportamento do script.
  • Auditoria: Utilize ferramentas como auditd para monitorar alterações nas permissões e ACLs, garantindo a segurança e conformidade do sistema.
  • Testes: Sempre teste suas configurações de ACL em um ambiente de desenvolvimento ou staging antes de aplicá-las em produção.

Conclusão

As Listas de Controle de Acesso (ACLs), gerenciadas pelo comando setfacl, são uma ferramenta poderosa para administradores de sistemas Linux que precisam de um controle de acesso mais refinado do que o modelo tradicional oferece. Ao permitir a definição de permissões específicas para usuários e grupos individuais, e ao introduzir a capacidade de definir permissões padrão, as ACLs aumentam significativamente a flexibilidade e a segurança na gestão de arquivos e diretórios. Dominar setfacl é um passo importante para qualquer profissional que busca otimizar a administração de permissões em ambientes Linux mais complexos.

Foto de Brett Sayles no Pexels.