Skip to content

Aprenda o comando Linux ‘setfacl’

25 de maio de 2021

Neste artigo

O utilitário Setfacl 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, etc.).

  • As opções -m, e -x espere uma ACL na linha de comando. Várias entradas ACL são separadas por caracteres de vírgula (`, ‘). As opções -M, e -X leia uma ACL de um arquivo ou da entrada padrão. O formato de entrada ACL é descrito na Seção ACL ENTRIES.
  • O –definir e –set-file as opções definem a ACL de um arquivo ou diretório. A ACL anterior é substituída. As entradas ACL para esta operação devem incluir permissões.
  • O -m (–modify) e -M (–modify-file) opções modificam a ACL de um arquivo ou diretório. As entradas ACL para esta operação devem incluir permissões.
  • O -x (–remove) e -X (–remove-file) opções removem entradas ACL. Apenas entradas ACL sem o permanentes campos são aceitos como parâmetros, a menos que POSIXLY_CORRECT seja definido.

Ao ler arquivos usando o -M, e -X opções, setfacl aceita a saída que getfacl produz. Existe 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 oferece suporte a ACLs, setfacl operará nos bits de permissão do modo de arquivo. Se a ACL não couber completamente nos bits de permissão, setfacl modifica os bits de permissão do modo de arquivo para refletir a 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.

Usando Setfacl

Primeiro, tente configurar uma lista básica para uma pasta em seu diretório pessoal. Já que você está experimentando isso pela primeira vez, faça um novo para brincar. Dessa forma, você não correrá o risco de ficar sem documentos importantes. mkdir ~ / acl-test

Em seguida, use setfacl para conceder a outro usuário em seu sistema acesso à pasta. Setfacl usa o -m sinalizador para modificar as listas de controle de acesso para um arquivo. Isso geralmente significa adicionar um usuário ou grupo. setfacl -mu: nome de usuário: rwx ~ / acl-test /

O você antes dos primeiros dois pontos informam ao comando que você está falando sobre um nome de usuário. O rwx seguindo o segundo concede read, Crito, e expermissões ecute. O mesmo funciona para grupos, especificando g em vez de você antes do primeiro cólon. setfacl -mg: groupname: rwx ~ / acl-test /

Ele funciona da mesma forma que o exemplo anterior, exceto que concede permissões para todo o grupo. O -x bandeira funciona ao contrário de -m. Isso revogará o acesso ao usuário ou grupo especificado. setfacl -xu: nome de usuário: w ~ / acl-test /

O comando revoga o acesso de gravação ao diretório para o usuário. Você também pode modificar diretamente as permissões para todos os usuários atuais. Isso inclui o proprietário do arquivo e todos os usuários adicionais aos quais foram concedidas permissões. É uma espécie de atalho, usando o comando existente, mas omitindo o nome de usuário. setfacl -mu :: rx ~ / acl-test /

Isso concede a todos os usuários existentes permissões de leitura e execução, mas remove o acesso de gravação. O mesmo funciona com o -x sinalizar e remover permissões. setfacl -xu :: w ~ / acl-test /

Este é essencialmente o mesmo que o exemplo anterior, invertido. setfacl também permite copiar as listas de controle de acesso de um arquivo para outro. Certifique-se de que seu usuário tenha acesso total à pasta de teste e crie dois novos arquivos para trabalhar. toque em ~ / acl-test / arquivo {1,2} .txt

Agora, modifique as permissões do primeiro arquivo. setfacl -mu: nome de usuário: rx ~ / acl-text / arquivo1.txt

Agora, você pode canalizar os resultados de getfacl, o comando para recuperar as informações da ACL atual, em setfacl. getfacl ~ / acl-test / file1.txt | setfacl –set-file = – ~ / acl-text / file2.txt

O segundo preenchimento terá as mesmas permissões do primeiro. Finalmente, você pode remover todas as entradas de ACL estendidas criadas pelo comando. Isso deixará o arquivo com as permissões de usuário e grupo que tinha originalmente. Para fazer isso, use o sinalizador -b. setfacl -b ~ / acl-test /

Esses são os usos mais comuns de setfacl. Se você quiser se aprofundar, a próxima parte deste guia é uma análise técnica completa do comando.

Análise Técnica de Setfacl

setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] Arquivo …

setfacl –restore = arquivo

Permissões

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

Opções

-b, –remove-all

  • Remova todas as entradas de ACL estendidas. As entradas ACL básicas do proprietário, grupo e outros são retidas.

-k, –remove-default

  • Remova a ACL padrão. Se não houver ACL padrão, nenhum aviso será emitido.

-n, –no-mask

  • Não recalcule a máscara de direitos efetiva. O comportamento padrão de setfacl é recalcular a entrada de máscara ACL, a menos que uma entrada de máscara tenha sido explicitamente fornecida. A entrada da máscara é definida para a união de todas as permissões do grupo proprietário e todas as entradas de usuário e grupo nomeadas. (Essas são exatamente as entradas afetadas pela entrada da máscara).

–mascarar

  • Recalcule a máscara de direitos efetivos, mesmo se uma entrada de máscara ACL tiver sido fornecida explicitamente. (Veja o -n opção.)

-d, –default

  • Todas as operações se aplicam à ACL padrão. As entradas ACL regulares no conjunto de entrada são promovidas a entradas ACL padrão. As entradas ACL padrão no conjunto de entrada são descartadas. (Um aviso é emitido se isso acontecer).

–restore = arquivo

  • Restaura 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 este mecanismo. Se a entrada contiver comentários do proprietário ou comentários do grupo e setfacl for executado pelo root, o proprietário e o grupo proprietário de todos os arquivos também serão restaurados. Esta opção não pode ser misturada com outras opções exceto `–test ‘.

–teste

  • Modo de teste. Em vez de alterar as ACLs de quaisquer arquivos, as ACLs resultantes são listadas.

-R, –recursive

  • Aplicar operações a todos os arquivos e diretórios recursivamente. Esta opção não pode ser misturada com `–restore ‘.

-L, –logical

  • Caminhada lógica, siga links simbólicos. O comportamento padrão é seguir os argumentos do link simbólico e pular os links simbólicos encontrados nos subdiretórios. Esta opção não pode ser misturada com `–restore ‘.

-P, –físico

  • Caminhada física, pule todos os links simbólicos. Isso também ignora os argumentos do link simbólico. Esta opção não pode ser misturada com `–restore ‘.

–versão

  • Imprima a versão de setfacl e saia.

–ajuda

  • Imprimir 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 se começarem com um travessã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 ACL

O utilitário setfacl reconhece os seguintes formatos de entrada ACL:

[d[efault]:] [u[ser]:]uid [:perms]

  • Permissões de um usuário nomeado. Permissões do proprietário do arquivo se uid está vazia.

[d[efault]:]g[roup]:gid [:perms]

  • Permissões de um grupo nomeado. Permissões do grupo proprietário se gid está vazia.

[d[efault]:]m[ask][:] [:perms]

  • Máscara de direitos efetivos

[d[efault]:]o[ther][:] [:perms]

  • Permissões de outros

O espaço em branco entre os caracteres delimitadores e não delimitadores é ignorado. As entradas ACL adequadas, incluindo permissões, são usadas nas operações de modificação e definição. (opções -m, -M, –definir e –set-file) Inscrições sem o permanentes campo são usados ​​para eliminação de entradas (opções -x e -X) Para uid e gid você pode especificar um nome ou um número. O permanentes campo é uma combinação de caracteres que indicam as permissões: ler (r), Escreva (C), execute (x), execute apenas se o arquivo for um diretório ou já tiver permissão de execução para algum usuário(X). Alternativamente, o permanentes campo pode ser um dígito octal (0-7).

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 de base.
  • Sempre que uma ACL contém entradas de usuário nomeadas ou objetos de grupo nomeados, ela também deve conter uma máscara de direitos efetivos.
  • Sempre que uma ACL contém qualquer entrada de ACL padrão, as três entradas de base 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ário nomeadas ou objetos de grupo 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 usuário nomeado ou entradas de grupo nomeadas e nenhuma entrada de máscara existir, uma entrada de máscara contendo as mesmas permissões da entrada de grupo será criada. A menos que -n for fornecida, as permissões da entrada da máscara são ajustadas posteriormente para incluir a união de todas as permissões afetadas pela entrada da máscara. (Veja o -n descrição da opção).
  • Se uma entrada ACL padrão for criada e a ACL padrão não contiver nenhum proprietário, grupo proprietário ou outra entrada, 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 nenhuma entrada de máscara existir, uma entrada de máscara contendo as mesmas permissões da entrada de grupo da ACL padrão padrão será adicionada. A menos que -n for fornecida, as permissões da entrada da máscara são ajustadas posteriormente para incluir a união de todas as permissões afetadas pela entrada da máscara. (Veja o -ndescrição da opção).

Exemplos

  • Conceder a um usuário adicional acesso de leitura
  • arquivo setfacl -mu: lisa: r
  • Revogando o acesso de gravação de todos os grupos e todos os usuários nomeados (usando a máscara de direitos efetivos)
  • arquivo setfacl -mm :: rx
  • Remover uma entrada de grupo nomeado da ACL de um arquivo
  • setfacl -xg: arquivo de equipe
  • Copiar a ACL de um arquivo para outro
  • getfacl file1 | setfacl –set-file = – file2
  • Copiando a ACL de acesso para a ACL padrão
  • getfacl -a dir | setfacl -d -M- dir

Conformidade com Posix 1003.1e Draft Standard 17

Se a variável de ambiente POSIXLY_CORRECT for definida, o comportamento padrão de setfacl muda conforme a seguir: Todas as opções não padrão são desabilitadas. O prefixo “ default: ” está desabilitado. O -x e -X as opções também aceitam campos de permissão (e os ignora).