Access Control Lists (Portuguê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.
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.
--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>
--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).-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
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.
http
em diretórios e/ou arquivos específicos:
# setfacl -dm "u:http:rwx" /home/geoffrey/project1/cache
Veja também
- getfacl(1)
- setfacl(1)
- Um guia antigo, mas ainda relevante (e completo) sobre ACL
- Como definir permissões de arquivo padrão para todas as pastas/arquivos em um diretório? (inglês)