Voltar ao Diminua Blog

Artigo

Desvendando o `setfacl` e `getfacl`: Permissões Estendidas no Linux para Controle Granular

Vá além das permissões tradicionais de usuário, grupo e outros com Access Control Lists (ACLs) no Linux.

Desvendando o `setfacl` e `getfacl`: Permissões Estendidas no Linux para Controle Granular

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

No universo Linux, o controle de acesso a arquivos e diretórios é fundamental para a segurança e a integridade do sistema. Tradicionalmente, as permissões são definidas com base em três categorias principais: o proprietário do arquivo (user), o grupo associado ao arquivo (group) e todos os outros usuários (others). Para cada uma dessas categorias, existem três tipos de permissões: leitura (r), escrita (w) e execução (x).

Essas permissões são representadas em um formato de 10 caracteres, onde o primeiro indica o tipo de arquivo (- para arquivo regular, d para diretório, etc.), seguido pelos nove caracteres de permissão. Por exemplo, -rwxr-xr-- indica um arquivo regular onde o proprietário tem permissão de leitura, escrita e execução, o grupo tem permissão de leitura e execução, e os outros usuários têm apenas permissão de leitura.

Embora eficazes para muitos cenários, as permissões tradicionais podem se tornar limitantes quando precisamos de um controle mais granular. Cenários comuns incluem a necessidade de permitir que um usuário específico, que não é o proprietário nem pertence ao grupo principal, acesse um arquivo, ou a necessidade de conceder permissões diferentes para múltiplos grupos em um mesmo arquivo.

A Necessidade de um Controle Mais Fino: Access Control Lists (ACLs)

É aqui que entram as Access Control Lists (ACLs). As ACLs estendem o modelo de permissões tradicional, permitindo que administradores de sistema definam permissões mais específicas para usuários e grupos individuais, sem a necessidade de alterar a propriedade do arquivo ou criar grupos complexos.

Com ACLs, você pode:

  • Conceder permissões de leitura, escrita e execução a usuários específicos que não são o proprietário.
  • Conceder permissões a grupos específicos que não são o grupo principal do arquivo.
  • Definir permissões de acesso a diretórios de forma mais detalhada.
  • Estabelecer permissões padrão para novos arquivos e subdiretórios criados dentro de um diretório.

Verificando o Suporte e Instalando ACLs

Antes de começar a usar ACLs, é importante verificar se o seu sistema de arquivos as suporta e se as ferramentas necessárias estão instaladas. A maioria dos sistemas de arquivos modernos, como ext3, ext4, XFS e Btrfs, suporta ACLs. No entanto, elas podem precisar ser habilitadas durante a montagem do sistema de arquivos.

Para verificar se o suporte a ACL está habilitado para um sistema de arquivos específico, você pode usar o comando mount e procurar pela opção acl na linha correspondente ao seu ponto de montagem. Por exemplo:

mount | grep ' / '

Se a opção acl não estiver presente, você pode habilitá-la editando o arquivo /etc/fstab e adicionando a opção acl à linha do sistema de arquivos desejado, e então remontando o sistema de arquivos ou reiniciando o sistema. Cuidado: Alterar o /etc/fstab incorretamente pode impedir o boot do sistema.

As ferramentas para gerenciar ACLs, getfacl e setfacl, geralmente vêm pré-instaladas. Caso contrário, você pode instalá-las usando o gerenciador de pacotes da sua distribuição:

# Para distribuições baseadas em Debian/Ubuntu
sudo apt update && sudo apt install acl

# Para distribuições baseadas em RHEL/CentOS/Fedora
sudo yum install acl  # ou sudo dnf install acl

Usando `getfacl` para Visualizar Permissões

O comando getfacl é usado para exibir as ACLs de um arquivo ou diretório. Ele mostra não apenas as permissões tradicionais, mas também quaisquer ACLs estendidas aplicadas.

Sintaxe básica:

getfacl <arquivo_ou_diretorio>

Exemplo:

Vamos criar um arquivo de exemplo e verificar suas permissões:

touch meu_arquivo.txt
ls -l meu_arquivo.txt

A saída de ls -l mostrará as permissões tradicionais. Agora, usando getfacl:

getfacl meu_arquivo.txt

A saída típica será:

# file: meu_arquivo.txt
# owner: usuario
# group: grupo
user::rw-
group::r--
other::r--

Observe que as permissões tradicionais são exibidas. Se ACLs adicionais forem aplicadas, elas aparecerão aqui.

Usando `setfacl` para Modificar Permissões

O comando setfacl é a ferramenta para definir e modificar ACLs. Ele permite adicionar, remover ou modificar entradas de ACL para usuários e grupos específicos.

Adicionando Permissões para um Usuário Específico

Para conceder permissões de leitura e escrita a um usuário chamado alice no arquivo meu_arquivo.txt:

setfacl -m u:alice:rw meu_arquivo.txt
  • -m: Indica que estamos modificando as ACLs existentes.
  • u:alice:rw: Especifica que estamos definindo permissões para o usuário (u) alice com permissões de leitura (r) e escrita (w).

Após executar este comando, getfacl meu_arquivo.txt mostrará uma nova linha:

user:alice:rw-

Adicionando Permissões para um Grupo Específico

Para conceder permissões de leitura a um grupo chamado desenvolvedores no mesmo arquivo:

setfacl -m g:desenvolvedores:r meu_arquivo.txt
  • g:desenvolvedores:r: Especifica que estamos definindo permissões para o grupo (g) desenvolvedores com permissão de leitura (r).

getfacl agora mostrará:

group:desenvolvedores:r--

Definindo Permissões Padrão em Diretórios

Uma das funcionalidades mais poderosas das ACLs é a capacidade de definir permissões padrão para novos arquivos e subdiretórios criados dentro de um diretório. Isso é feito com a opção -d.

Por exemplo, para garantir que todos os novos arquivos e subdiretórios criados em /srv/dados herdem permissões de leitura e escrita para o usuário bob:

setfacl -d -m u:bob:rw /srv/dados

Agora, qualquer arquivo ou subdiretório criado dentro de /srv/dados terá automaticamente uma ACL para bob com permissões rw.

Removendo ACLs

Para remover uma ACL específica para um usuário ou grupo, use a opção -x:

setfacl -x u:alice meu_arquivo.txt
setfacl -x g:desenvolvedores meu_arquivo.txt

Para remover todas as ACLs estendidas de um arquivo ou diretório, deixando apenas as permissões tradicionais:

setfacl -b meu_arquivo.txt

A Máscara (Mask) e seu Impacto

Quando você aplica ACLs a um arquivo ou diretório, o sistema cria uma entrada especial chamada máscara. A máscara atua como um limite superior para as permissões concedidas a usuários nomeados e ao grupo nomeado. As permissões efetivas para esses usuários e grupos são a interseção de suas permissões definidas e as permissões da máscara.

Por padrão, a máscara geralmente reflete as permissões do grupo padrão do arquivo. Se você definir permissões para um usuário ou grupo que são mais permissivas do que a máscara, as permissões efetivas serão limitadas pela máscara.

Você pode visualizar e modificar a máscara usando setfacl e getfacl. Se você notar que um usuário com ACL não tem as permissões esperadas, verifique a máscara.

Considerações de Segurança e Boas Práticas

  • Comece com o Mínimo Necessário: Sempre conceda apenas as permissões estritamente necessárias para que usuários e grupos realizem suas tarefas.
  • Use ACLs de Padrão com Cautela: Embora úteis, as ACLs de padrão podem levar a permissões inesperadas se não forem bem gerenciadas. Teste rigorosamente em ambientes controlados.
  • Documente suas ACLs: Mantenha um registro das ACLs aplicadas, especialmente em servidores de produção, para facilitar a auditoria e a resolução de problemas.
  • Entenda a Máscara: Familiarize-se com o conceito de máscara para evitar confusões sobre as permissões efetivas.
  • Combine com Permissões Tradicionais: As ACLs complementam, mas não substituem, as permissões tradicionais. Entenda como ambos os sistemas interagem.

Conclusão

As Access Control Lists (ACLs) no Linux, gerenciadas pelos comandos setfacl e getfacl, oferecem um nível de controle de acesso a arquivos e diretórios muito mais granular do que as permissões tradicionais. Ao permitir a definição de permissões específicas para usuários e grupos individuais, e ao possibilitar o estabelecimento de permissões padrão em diretórios, as ACLs se tornam uma ferramenta indispensável para administradores de sistemas que buscam otimizar a segurança e a flexibilidade em ambientes complexos.

Dominar o uso de ACLs é um passo importante para quem deseja aprofundar seus conhecimentos em administração de sistemas Linux e garantir que os dados e recursos do sistema estejam protegidos de forma eficaz e adequada às necessidades específicas.

Foto de cottonbro studio no Pexels.