# Access Control Lists (Português)

From ArchWiki
Jump to navigation Jump to search
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

- 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)

Category:

- Access control (Português)