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.
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/sd''XY'' | 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 ( é 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>
Mostrar ACL
Para mostrar permissões, use:
# getfacl <arquivo/diretório>
Exemplos
Defina todas as permissões para o usuário no arquivo chamado abc
:
# setfacl -m "u:joao:rwx" abc
Verifica permissões:
Altera permissões para o usuário :
# setfacl -m "u:joao:r-x" abc
Verifica permissões:
Remove todas as entradas estendidas ACL:
# setfacl -b abc
Verifica permissões:
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
.
$ 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 e concedemos acesso ao diretório "home" do /home/geoffrey
.
A primeira etapa é conceder permissões de execução para o usuário :
# setfacl -m "u:http:--x" /home/geoffrey
Como o usuário agora pode acessar arquivos em /home/geoffrey
, outros não precisam mais acessar:
# chmod o-rx /home/geoffrey
Use para verificar as alterações:
Como mostra a saída acima, o não tem mais permissões, mas o usuário 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
- 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)