![Como as máscaras ACL permitem ajustar as permissões de arquivos no Linux? 1 person using a gaming mouse under pink neon lights next to an rgb keyboard](https://aplicativosandroid.com/wp-content/uploads/2024/02/person-using-a-gaming-mouse-under-pink-neon-lights-next-to-an-rgb-keyboard.jpg)
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.
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:
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’.
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/