Access Control Lists (Português)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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