Como dar permissão automática para novos arquivos e pastas no Linux com ACL

Dica Rápida

Dica Rápida

Você tem uma pasta compartilhada por um serviço, aplicação ou vários usuários e precisa que tudo o que for criado dentro dela já nasça com as permissões certas?

Rodar chmod ou chown toda vez até resolve momentaneamente, mas não é uma boa solução. Uma hora alguém esquece, e o acesso quebra.

Uma forma adequada de resolver isso no Linux é utilizando ACL padrão.

O que é ACL?

As permissões tradicionais do Linux trabalham basicamente com três níveis: dono, grupo e outros.

A ACL (Access Control List, ou lista de controle de acesso) permite conceder permissões adicionais a usuários ou grupos específicos sem mudar o dono ou o grupo principal do arquivo.

Assim, por exemplo, você pode dar acesso ao usuário pedro sem alterar o proprietário da pasta e sem liberar o acesso para todos os usuários do sistema.

O que é ACL padrão?

Podemos trabalhar com dois tipos de ACL:

  • ACL de acesso: define permissões para o arquivo ou diretório onde foi aplicada.
  • ACL padrão (default): é definida em um diretório e serve como base para as permissões ACL dos novos arquivos e subdiretórios criados dentro dele.

É a ACL padrão que permite automatizar as permissões.

Instalando o suporte a ACL

Na maioria das distribuições Linux atuais, o suporte já está disponível.

Se os comandos setfacl e getfacl não existirem no seu sistema, no Debian, Ubuntu, Linux Mint e derivados você pode instalar o pacote:

sudo apt install acl

Como configurar

Vamos utilizar como exemplo a pasta:

/srv/compartilhado

Queremos garantir que o usuário pedro tenha acesso de leitura e escrita ao conteúdo.

Primeiro, aplicamos a ACL ao que já existe:

sudo setfacl -R -m u:pedro:rwX /srv/compartilhado

Depois, configuramos a ACL padrão para o que for criado daqui para frente:

sudo setfacl -R -d -m u:pedro:rwX /srv/compartilhado

Entendendo os parâmetros

  • -R: aplica a alteração recursivamente em arquivos e subdiretórios.
  • -m: modifica ou adiciona uma entrada na ACL.
  • -d: modifica a ACL padrão (default) do diretório.
  • u:pedro:rwX: concede as permissões indicadas ao usuário pedro.

O X maiúsculo é proposital.

Diferentemente de x, ele não sai marcando todos os arquivos comuns como executáveis durante uma aplicação recursiva. Diretórios recebem a permissão necessária para serem acessados, enquanto arquivos comuns continuam sem execução, salvo quando ela já era aplicável.

Fazer tudo em um único comando

Também é possível configurar a ACL atual e a ACL padrão de uma só vez:

sudo setfacl -R -m u:pedro:rwX,d:u:pedro:rwX /srv/compartilhado

Para facilitar o entendimento, porém, usar os dois comandos separadamente deixa mais clara a diferença entre a ACL aplicada ao conteúdo existente e a ACL padrão utilizada nos novos itens.

Liberando acesso para um grupo

A lógica é praticamente a mesma.

Em vez de u: (user), utilizamos g: (group).

Por exemplo, para conceder acesso ao grupo equipe:

sudo setfacl -R -m g:equipe:rwX /srv/compartilhado
sudo setfacl -R -d -m g:equipe:rwX /srv/compartilhado

Como conferir

Utilize o getfacl:

getfacl /srv/compartilhado

Você deverá encontrar linhas semelhantes a:

user:pedro:rwx
default:user:pedro:rwx

A linha sem default representa a ACL aplicada ao próprio diretório.

A linha iniciada por default faz parte da ACL padrão e será utilizada na criação de novos itens.

Outra maneira rápida de identificar a existência de uma ACL é usando:

ls -ld /srv/compartilhado

Se aparecer um + depois das permissões, existem informações adicionais de ACL:

drwxrwx---+

Testando se a herança está funcionando

Depois de configurar a ACL, podemos criar um arquivo e um diretório de teste:

touch /srv/compartilhado/teste.txt
mkdir /srv/compartilhado/teste

Agora consulte as permissões:

getfacl /srv/compartilhado/teste.txt
getfacl /srv/compartilhado/teste

O usuário pedro deverá aparecer nas ACLs dos novos itens.

Por exemplo, no arquivo:

user:pedro:rw-

E no diretório:

user:pedro:rwx

Isso confirma que a ACL padrão está sendo herdada corretamente.

Atenção à máscara

A ACL possui um item chamado máscara (mask).

Ela funciona como um limite para as permissões efetivas concedidas às entradas de usuários adicionais, grupos e grupo proprietário.

O setfacl normalmente calcula a máscara automaticamente, mas ela pode ser alterada posteriormente, inclusive por determinadas alterações feitas com chmod.

Por isso, às vezes a ACL parece estar correta, mas o usuário não possui todas as permissões esperadas.

O getfacl deixa isso evidente:

user:pedro:rwx        #effective:r--

Nesse exemplo, a ACL solicita rwx, mas a máscara está limitando a permissão efetiva.

Consulte a ACL completa:

getfacl /srv/compartilhado

Se realmente for necessário permitir rwx, a máscara pode ser ajustada com:

sudo setfacl -m m::rwx /srv/compartilhado

A máscara não deve ser alterada automaticamente sem verificar as demais entradas da ACL, pois ela também pode afetar as permissões efetivas de outros usuários e grupos.

Arquivos novos não ficam executáveis. É normal?

Sim.

Normalmente, programas criam arquivos comuns sem solicitar permissão de execução. A ACL padrão não deve transformar automaticamente esses arquivos em executáveis.

Por isso, é normal encontrar:

user:pedro:rw-

em um arquivo novo e:

user:pedro:rwx

em um novo diretório.

Se você criar um script que realmente precise ser executável, pode habilitar essa permissão explicitamente:

chmod +x script.sh

Como remover uma ACL

Para remover a ACL específica do usuário pedro:

sudo setfacl -R -x u:pedro /srv/compartilhado

Para remover a entrada correspondente da ACL padrão:

sudo setfacl -R -x d:u:pedro /srv/compartilhado

Se a intenção for remover todas as entradas ACL estendidas:

sudo setfacl -R -b /srv/compartilhado

E para remover as ACLs padrão (default) dos diretórios:

sudo setfacl -R -k /srv/compartilhado

Em resumo:

  • -b: remove as entradas estendidas da ACL de acesso.
  • -k: remove a ACL padrão (default).

Resumindo

Aplicar a permissão ao conteúdo que já existe:

sudo setfacl -R -m u:pedro:rwX /srv/compartilhado

Fazer novos arquivos e diretórios herdarem a ACL:

sudo setfacl -R -d -m u:pedro:rwX /srv/compartilhado

Conferir:

getfacl /srv/compartilhado

Testar:

touch /srv/compartilhado/teste.txt
mkdir /srv/compartilhado/teste

getfacl /srv/compartilhado/teste.txt
getfacl /srv/compartilhado/teste

Pronto. A partir daí, os novos arquivos e diretórios criados dentro da pasta passam a herdar a ACL configurada, evitando a necessidade de corrigir manualmente as permissões a cada novo item.


Este conteúdo foi útil?

Deixe sua avaliação, compartilhe ou envie uma sugestão.

Enviar sugestão
Sem anúncios, só conteúdo. Apoie o site com um Pix a partir de R$ 1,00 e ajude a mantê-lo no ar! ✨

Deixe um Comentário