Como as máscaras ACL permitem ajustar as permissões de arquivos no Linux?

7 de fevereiro de 2024 às 15:05
person using a gaming mouse under pink neon lights next to an rgb keyboard

Principais conclusões

  • As máscaras ACL garantem compatibilidade com programas que não reconhecem ACL, traduzindo entradas ACL em permissões POSIX.
  • As máscaras ACL representam as permissões máximas permitidas para qualquer objeto de usuário ou grupo que não seja o usuário, grupo ou “outra” classe proprietária.
  • Ao adicionar novas entradas de ACL, a máscara se ajusta automaticamente para refletir o máximo de permissões permitidas para todos os usuários ou grupos nomeados.

Você está usando Listas de controle de acesso (ACLs) mas está confuso sobre o conceito de máscaras? Você não está sozinho. Vamos mergulhar neste conceito importante, dando uma olhada no que são e como interagem com as permissões do sistema de arquivos Linux.

O que são máscaras ACL?

As máscaras ACL são uma forma de garantir a interoperabilidade de permissões com programas e utilitários que não reconhecem ACL.

CONTINUA DEPOIS DA PUBLICIDADE - OTZADS

Uma máscara ACL em um arquivo ou diretório equivale ao máximo de permissões permitidas a qualquer objeto de usuário ou grupo que não seja o usuário, grupo ou “outra” classe proprietária do paradigma de usuário/grupo/outra classe. Dito de outra forma, ela traduz entradas ACL em permissões POSIX para fins de compatibilidade com versões anteriores.

Vamos dar uma olhada em um arquivo recém-criado com o qual trabalharemos neste artigo, mysupersecretfile.txt:

ls -l mysupersecretfile.txt

Permissões bastante simples para um documento tão confidencial, certo?

Observe o ponto (.) após o conjunto de permissões. Isso indica um contexto SELinux, que não está relacionado a ACLs ou máscaras ACL.

Para maior clareza, vamos também examinar as entradas ACL do arquivo, usando o comando getfacl:

getfacl mysupersecretfile.txt

As entradas ACL atuais para entradas de usuário e grupo proprietários são mapeadas diretamente para o usuário proprietário POSIX real e o grupo proprietário do arquivo. Isso é normal para qualquer arquivo que não tenha entradas de ACL estendidas e é chamado de “ACLs mínimas”.

Digamos que recebemos uma solicitação para adicionar um usuário chamado manager como uma entrada ACL neste arquivo, com permissões de leitura. Faremos isso com o comando setfacl. Então, vamos examinar as novas permissões ACL usando os comandos ls e getfacl:

setfacl -m u:manager:r mysupersecretfile.txt
ls -l mysupersecretfile.txt
getfacl mysupersecretfile.txt

Agora você notará o sinal “+” ao lado das entradas de permissões no comando ls, indicando que há entradas ACL associadas ao arquivo.

Você vê a linha “mascarar” na saída do comando getfacl agora? Além da entrada ACL do usuário gerente (r), esta entrada de máscara foi atribuída automaticamente. Isso é necessário; ela representa o máximo de permissões permitidas para qualquer usuário nomeado ou objeto de grupo (além do usuário proprietário e dos objetos de grupo proprietários). No momento, a permissão de leitura equivale à permissão de leitura da máscara existente.

Agora vamos adicionar outro usuário de uma segunda solicitação, contratante, à ACL do nosso arquivo. Desta vez, porém, precisamos dar-lhes permissões de leitura e gravação. Vamos ver como isso afeta a máscara:

CONTINUA DEPOIS DA PUBLICIDADE - OTZADS
setfacl -m u:contractor:rw mysupersecretfile.txt
getfacl mysupersecretfile.txt

Quando adicionamos o usuário contratado com permissões de leitura e gravação, isso afetou a máscara ACL porque, como mencionei acima, a máscara está relacionada ao máximo de permissões permitidas de usuários ACL e entradas de grupo. Como adicionamos permissões de gravação à entrada ACL do usuário contratado, a máscara também obtém permissão de gravação.

Ao trabalhar com ACLs, você verá que a função das permissões de classe de grupo (como na saída do comando ls -l) é reaproveitada para refletir a máscara ACL. Não se preocupe, as permissões do proprietário do grupo ainda são refletidas como a entrada ACL do ‘grupo proprietário’.

CONTINUA DEPOIS DA PUBLICIDADE

Lembre-se de que se você adicionar outro usuário com menos permissões, por exemplo somente leitura, ele não herdará as permissões de máscara, assim como o usuário gerente não obteve a permissão de gravação quando adicionamos a entrada ACL do usuário contratado.

Permissões efetivas

Podemos definir as permissões de entrada da máscara manualmente usando o comando setfacl. Isso nos permitirá filtrar quaisquer permissões de usuário e/ou grupo nomeados definidas no arquivo ao mesmo tempo, ou para entradas ACL de usuários existentes no arquivo, para o menor denominador comum. Isso é chamado de permissões efetivas.

setfacl -m m::r mysupersecretfile.txt
getfacl mysupersecretfile.txt

O comentário que mostra as permissões efetivas do usuário contratante nos permite saber que, embora tenham recebido permissões de leitura e gravação, na realidade, ele só possui permissão de leitura. Modificar a máscara causou isso. Se olharmos novamente para o arquivo com ls -l, veremos que as permissões da classe de grupo (que novamente são reaproveitadas para refletir a máscara) foram alteradas:

ls -l mysupersecretfile.txt

Máscaras padrão

Ao trabalhar com ACLs, o conceito de máscaras padrão é muito semelhante às entradas de ACL padrão. Por exemplo, quando você adiciona uma máscara padrão a um diretório, todos os arquivos e subdiretórios recém-criados dentro dele herdarão a mesma máscara (assim como a entrada da máscara padrão). Basta usar o -d parâmetro com o comando setfacl para aplicar uma máscara padrão:

mkdir mysupersecretdirectory
setfacl -d -m m::rX mysupersecretdirectory/
getfacl mysupersecretdirectory/
mkdir mysupersecretdirectory/mysupersecretsubdirectory/
getfacl mysupersecretdirectory/mysupersecretsubdirectory/

Com informações

Mais sobre:
SUGESTÕES PARA VOCÊ