Permissões avançadas parte 2

Nos sistemas operacionais do tipo Unix, o comando setfacl define as listas de controle de acesso a arquivos .

Este documento cobre a versão Linux do setfacl .

Segue tradução da saída do man setfacl

Sintaxe

setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} arquivo_acl] arquivo …

setfacl –restore={arquivo|-}

Descreição

Este utilitário define listas de controle de acesso (ACLs) de arquivos e diretórios. Na linha de comando, uma sequência de comandos é seguida por uma sequência de arquivos (que por sua vez pode ser seguida por outra sequência de comandos, …).

As opções -m e -x esperam uma ACL na linha de comando. Várias entradas de ACL são separadas por vírgulas (`,’). As opções -M e -X leem uma ACL de um arquivo ou de uma entrada padrão. O formato de entrada ACL é descrito na Seção ACL ENTRIES.

As opções –set e –set-file definem a ACL de um arquivo ou diretório. A ACL anterior é substituída. As entradas de ACL para esta operação devem incluir permissões.

As opções -m (–modify) e -M (–modify-file) modificam a ACL de um arquivo ou diretório. As entradas de ACL para esta operação devem incluir permissões.

As opções -x (–remove) e -X (–remove-file) removem entradas ACL. Não é um erro remover uma entrada que não existe. Somente entradas ACL sem o campo perms são aceitas como parâmetros, a menos que POSIXLY_CORRECT seja definido.

Ao ler arquivos usando as opções -M e -X, setfacl aceita a saída produzida por getfacl. Há no máximo uma entrada ACL por linha.
Depois de um sinal de Libra (`#’), tudo até o final da linha é tratado como um comentário.

Se setfacl for usado em um sistema de arquivos que não suporte ACLs, setfacl operará nos bits de permissão do modo de arquivo. Se o ACL não couber completamente nos bits de permissão, setfacl modifica os bits de permissão do modo de arquivo para refletir o ACL o mais próximo possível, grava uma mensagem de erro no erro padrão e retorna com um status de saída maior que 0.

Permissões
O proprietário do arquivo e os processos capazes de CAP_FOWNER recebem o direito de modificar as ACLs de um arquivo. Isso é análogo às permissões necessárias para acessar o modo de arquivo. (Nos sistemas Linux atuais, root é o único usuário com o recurso CAP_FOWNER.)

Nos sistemas Linux atuais, o root é o único usuário com o recurso CAP_FOWNER, portanto, você deve ser o superusuário para usar setfacl se você não for o proprietário do arquivo.

Opções

-b, –remove-all
Remova todas as entradas estendidas da ACL. As entradas da ACL base do proprietário, grupo e outras pessoas são mantidas.
-k, –remove-default
Remova a ACL padrão. Se não existir uma ACL padrão, nenhum aviso será emitido.
-n, –no-mask
Não recalcule a máscara de direitos efetivos . O comportamento padrão do setfacl é recalcular a entrada da máscara da ACL, a menos que uma entrada da máscara tenha sido explicitamente fornecida. A entrada da máscara é configurada para a união de todas as permissões do grupo proprietário e de todas as entradas de usuário e grupo nomeadas. (Essas são exatamente as entradas afetadas pela entrada da máscara).
–mask
Recalcule a máscara de direitos efetivos, mesmo que uma entrada da máscara da ACL tenha sido explicitamente fornecida. (Veja a opção -n .)
-d, –default
Todas as operações se aplicam à ACL padrão. As entradas regulares da ACL no conjunto de entradas são promovidas para entradas padrão da ACL. As entradas padrão da ACL no conjunto de entradas são descartadas. (Um aviso é emitido se isso acontecer).
–restore={file|-}
Restaure um backup de permissão criado por `getfacl -R’ ou similar. Todas as permissões de uma subárvore de diretório completa são restauradas usando esse mecanismo. Se a entrada contiver comentários do proprietário ou comentários do grupo, setfacl tentará restaurar o proprietário e o grupo proprietário. Se a entrada contiver comentários de sinalizadores (que definem os bits setuid, setgid e sticky), setfacl define esses três bits de acordo; caso contrário, ele os limpa. Esta opção não pode ser misturada com outras opções exceto `–test’. Se o arquivo especificado for ‘-‘, ele será lido a partir da entrada padrão.
” –test “.
–teste
Modo de teste. Em vez de alterar as ACLs de qualquer arquivo, as ACLs resultantes são listadas.
-R, –recursive
Aplica operações a todos os arquivos e diretórios recursivamente . Esta opção não pode ser combinada com ” –restore “.
-L, –logical
Caminho lógico, siga links simbólicos para diretórios. O comportamento padrão é seguir os argumentos do link simbólico e ignorar os links simbólicos encontrados nos subdiretórios. Só é eficaz em combinação com -R. Esta opção não pode ser combinada com `–restore’.
-P, –physical
Caminho físico, não siga links simbólicos para diretórios. Isso também ignora os argumentos do link simbólico. Só é eficaz em combinação com -R. Esta opção não pode ser combinada com `–restore’.
-v, –version
Imprime a versão do setfacl.
-h, –help
Imprima uma mensagem de ajuda explicando as opções da linha de comando.
— Fim das opções de linha de comando. Todos os parâmetros restantes são interpretados como nomes de arquivo, mesmo que comecem com um traço.
– Se o parâmetro do nome do arquivo for um único traço, setfacl lê uma lista de arquivos da entrada padrão.

Entradas da ACL

O utilitário setfacl reconhece os seguintes formatos de entrada ACL (em branco inseridos para maior clareza):

[d[efault]:] [u[ser]:]uid [:perms]
Permissões de um usuário nomeado. Permissões do proprietário do arquivo se uid estiver vazio.

[d[efault]:] g[group]:gid [:perms]
Permissões de um grupo nomeado. Permissões do grupo proprietário se o gid estiver vazio.

[d[efault]:] m[ask][:] [:perms]
máscara de direitos efetivos

[d[efault]:] o[ther][:] [:perms]
Permissões de outros.

Os espaços em branco entre caracteres delimitadores e não delimitadores são ignorados.

Entradas de ACL apropriadas, incluindo permissões, são usadas em operações de modificação e definição. (opções -m, -M, –set e –set-file). As entradas sem o campo perms são usadas para exclusão de entradas (opções -x e -X).

Para uid e gid, você pode especificar um nome ou um número. Literais de caracteres podem ser especificados com uma barra invertida seguida pelos dígitos octais de 3 dígitos correspondentes ao código ASCII para o caractere (por exemplo, \101 para ‘A’). Se o nome contiver uma barra invertida literal seguida de 3 dígitos, a barra invertida deve ter escape (ou seja, \\).

O campo perms é uma combinação de caracteres que indicam as permissões de leitura (r), gravação (w), execução (x). Os traços no campo perms (-) são ignorados. O caractere X representa a permissão de execução caso o arquivo seja um diretório ou já possua permissão de execução para algum usuário. Como alternativa, o campo perms pode definir as permissões numericamente, como uma combinação bit a bit de leitura (4), gravação (2) e execução (1). Campos de zero permissões ou campos de permissões que consistem apenas em traços indicam que não há permissões.

Entradas criadas Automaticamente

Inicialmente, os arquivos e diretórios contêm apenas as três entradas ACL básicas para o proprietário, o grupo e outros. Existem algumas regras que precisam ser satisfeitas para que uma ACL seja válida:

* As três entradas básicas não podem ser removidas. Deve haver exatamente uma entrada de cada um desses tipos de entrada base.

* Sempre que uma ACL contém entradas de usuários nomeados ou objetos de grupos nomeados, ela também deve conter uma máscara de direitos efetiva.

* Sempre que uma ACL contiver entradas de ACL padrão, as três entradas básicas de ACL padrão (proprietário padrão, grupo padrão e outros padrão) também devem existir.

* Sempre que uma ACL padrão contém entradas de usuários nomeados ou objetos de grupos nomeados, ela também deve conter uma máscara de direitos efetivos padrão.

Para ajudar o usuário a garantir essas regras, setfacl cria entradas a partir de entradas existentes nas seguintes condições:

* Se uma ACL contiver entradas de usuário ou grupo nomeado e não existir nenhuma entrada de máscara, será criada uma entrada de máscara contendo as mesmas permissões da entrada de grupo. A menos que a opção -n seja fornecida, as permissões da entrada de máscara são ajustadas para incluir a união de todas as permissões afetadas pela entrada de máscara. (Consulte a descrição da opção -n).

* Se uma entrada de ACL padrão for criada e a ACL padrão não contiver nenhuma entrada de proprietário, grupo proprietário ou outros, uma cópia do proprietário da ACL, grupo proprietário ou outra entrada será adicionada à ACL padrão.

* Se uma ACL padrão contiver entradas de usuário nomeadas ou entradas de grupo nomeadas e não existir nenhuma entrada de máscara, será adicionada uma entrada de máscara contendo as mesmas permissões que a entrada de grupo da ACL padrão padrão. A menos que a opção -n seja fornecida, as permissões da entrada de máscara são ajustadas para incluir a união de todas as permissões afetadas pela entrada de máscara. (Consulte a descrição da opção -n).

Exemplos

Concedendo a um usuário adicional acesso de leitura
setfacl -m u:lisa:r arquivo

Revogando o acesso de gravação de todos os grupos e todos os usuários nomeados (usando a máscara de direitos efetiva)
setfacl -m m::arquivo rx

Removendo uma entrada de grupo nomeado da ACL de um arquivo
setfacl -x g: arquivo de equipe

Copiando a ACL de um arquivo para outro
getfacl arquivo1 | setfacl –set-file=- arquivo2

Copiando a ACL de acesso para a ACL padrão
getfacl –dir de acesso | setfacl -d -M- dir

Conformidade com POSIX 1003.1e DRAFT NORMA 17
Se a variável de ambiente POSIXLY_CORRECT for definida, o comportamento padrão de setfacl será alterado da seguinte forma: Todas as opções não padrão serão desativadas. O prefixo “default:” está desabilitado. As opções -x e -X também aceitam campos de permissão (e os ignoram).

Problemas podem ocorrer na aplicação das ACL’s

O suporte a ACLs pode variar de distribuição para distribuição. Se ao executar o comando setfacl, receber uma mensagem:

$ setfacl -m u:paulo:r arquivo_permissao
setfacl: arquivo_permissao: Operation not supported

Significa que é necessário habilitar o suporte a ACLs no filesystem.

apt install acl

Após instalar, basta editar o arquivo /etc/fstab e na partição em que se desejar habilitar o uso de ACLs:

Deste
UUID=64f59ab1-d7f3-4fbc-b794-8b3eb7924d32 / ext4 defaults 0 2

Para este
UUID=64f59ab1-d7f3-4fbc-b794-8b3eb7924d32 / ext4 defaults,acl 0 2

Finalmente, para habilitar o uso das listas de acesso, você precisa montar novamente a(s) partição(ões):

mount / -o remount,acl

Com isso, a partição raiz foi remontada com a opção acl. Tudo deve funcionar perfeitamente.