Access Control Lists (Português)

From ArchWiki
Status de tradução: Esse artigo é uma tradução de Access Control Lists. Data da última tradução: 2020-04-07. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

Lista de controle de acesso (ACL, do inglês "Access Control List") fornece um mecanismo de permissão adicional e mais flexível para sistemas de arquivos. Ele foi projetado para ajudar com as permissões de arquivo UNIX. A ACL permite conceder permissões para qualquer usuário ou grupo a qualquer recurso de disco.

Instalação

O pacote acl é uma dependência do systemd, e já deve estar instalado.

Habilitar ACL

Para habilitar a ACL, o sistema de arquivos deve ser montado com a opção acl. Você pode usar fstab para torná-lo permanente em seu sistema.

Existe a possibilidade de a opção acl já estar habilitada como opção de montagem padrão no sistema de arquivos. Btrfs faz e os sistemas de arquivos Ext2/3/4 também. Use o seguinte comando para verificar a opção de partições ext* formatadas:

# tune2fs -l /dev/sdXY | grep "Default mount options:"
Default mount options:    user_xattr acl

Verifique também se a opção de montagem padrão não está substituída; nesse caso, você verá noacl em /proc/mounts na linha relevante.

Você pode definir as opções de montagem padrão de um sistema de arquivos usando o comando tune2fs -o opção partição, por exemplo:

# tune2fs -o acl /dev/sdXY

Usar as opções de montagem padrão em vez de uma entrada em /etc/fstab é muito útil para unidades externas, essa partição será montada com a opção acl também em outras máquinas Linux. Não há necessidade de editar o /etc/fstab em todas as máquinas.

Nota:
  • acl é especificado como opção de montagem padrão ao criar um sistema de arquivos ext2/3/4. Isso está configurado em /etc/mke2fs.conf.
  • As opções padrão de montagem não estão listadas em /proc/mounts.

Uso

Definir ACL

A ACL pode ser modificada usando o comando setfacl.

Dica: Você pode listar as alterações de permissão de arquivo/diretório sem modificar as permissões (ou seja, "dry-run") anexando a opção --test.

Para definir permissões para um usuário (usuário é o nome do usuário ou o ID):

# setfacl -m "u:usuário:permissões" <arquivo/diretório>

Para definir permissões para um grupo (grupo é o nome ou o ID do grupo):

# setfacl -m "g:grupo:permissões" <arquivo/diretório>

Para definir permissões para outras pessoas:

# setfacl -m "other:permissões" <arquivo/diretório>

Para permitir que todos os arquivos ou diretórios recém-criados herdem entradas do diretório pai (isso não afetará os arquivos que serão copiados para o diretório):

# setfacl -dm "entrada" <diretório>

Para remover uma entrada específica:

# setfacl -x "entrada" <arquivo/diretório>

Para remover as entradas padrão:

# setfacl -k <arquivo/diretório>

Para remover todas as entradas (as entradas do dono, grupo e outras são mantidas):

# setfacl -b <arquivo/diretório>
Nota: O comportamento padrão de setfacl é recalcular a entrada da máscara da ACL, a menos que uma entrada --mask 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).
Dica: Para aplicar operações a todos os arquivos e diretórios recursivamente, acrescente o argumento -R.

Mostrar ACL

Para mostrar permissões, use:

# getfacl <arquivo/diretório>

Exemplos

Defina todas as permissões para o usuário joao no arquivo chamado abc:

# setfacl -m "u:joao:rwx" abc

Verifica permissões:

# getfacl abc
# file: abc
# owner: alguém
# group: alguém
user::rw-
user:joao:rwx
group::r--
mask::rwx
other::r--

Altera permissões para o usuário joao:

# setfacl -m "u:joao:r-x" abc

Verifica permissões:

# getfacl abc
# file: abc
# owner: alguém
# group: alguém
user::rw-
user:joao:r-x
group::r--
mask::r-x
other::r--

Remove todas as entradas estendidas ACL:

# setfacl -b abc

Verifica permissões:

# getfacl abc
# file: abc
# owner: alguém
# group: alguém
user::rw-
group::r--
other::r--

Saída do comando ls

Você notará que há uma ACL para um determinado arquivo porque ele exibirá um + (sinal de mais) após as permissões do Unix na saída de ls -l.

$ ls -l /dev/audio
crw-rw----+ 1 root audio 14, 4 nov.   9 12:49 /dev/audio
$ getfacl /dev/audio
getfacl: Removing leading '/' from absolute path names
# file: dev/audio
# owner: root
# group: audio
user::rw-
user:solstice:rw-
group::rw-
mask::rw-
other::---

Concedendo permissões de execução para arquivos privados a um servidor web

A técnica a seguir descreve como um processo como um servidor web pode receber acesso a arquivos que residem no diretório inicial de um usuário, sem comprometer a segurança, fornecendo acesso ao mundo inteiro.

A seguir, presumimos que o servidor web é executado como usuário http e concedemos acesso ao diretório "home" do geoffrey /home/geoffrey.

A primeira etapa é conceder permissões de execução para o usuário http:

# setfacl -m "u:http:--x" /home/geoffrey
Nota: Permissões de execução para um diretório são necessárias para um processo listar o conteúdo do diretório.

Como o usuário http agora pode acessar arquivos em /home/geoffrey, outros não precisam mais acessar:

# chmod o-rx /home/geoffrey

Use getfacl para verificar as alterações:

$ getfacl /home/geoffrey
getfacl: Removing leading '/' from absolute path names
# file: home/geoffrey
# owner: geoffrey
# group: geoffrey
user::rwx
user:http:--x
group::r-x
mask::r-x
other::---

Como mostra a saída acima, o other não tem mais permissões, mas o usuário http ainda pode acessar os arquivos, portanto, a segurança pode ser considerada aumentada.

Nota: Pode ser necessário conceder acesso de gravação para o usuário http em diretórios e/ou arquivos específicos:
# setfacl -dm "u:http:rwx" /home/geoffrey/project1/cache

Veja também