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

As capacidades (POSIX 1003.1e, capabilities(7)) fornecem controle refinado sobre permissões de superusuário, permitindo que o usuário root seja evitado. Os desenvolvedores de software são incentivados a substituir os usos do poderoso atributo setuid em um sistema binário com um conjunto mais mínimo de capacidades. Muitos pacotes utilizam capacidades, como `CAP_NET_RAW`, sendo usada para o binário `ping` fornecido pelo iputils. Isso permite, por exemplo, `ping` ser executado por um usuário normal (como no método setuid), ao mesmo tempo em que limita as consequências de segurança de uma possível vulnerabilidade no `ping`.

## Implementação

Capacidades são implementadas no Linux usando atributos estendidos (xattr(7)) no espaço de nomes de segurança. Atributos estendidos são suportados por todos os principais sistemas de arquivos do Linux, incluindo Ext2, Ext3, Ext4, Btrfs, JFS, XFS e Reiserfs. O exemplo a seguir imprime as capacidades do ping com `getcap` e, em seguida, imprime os mesmos dados em seu formato codificado usando `getfattr`:

    $ getcap /usr/bin/ping

    /usr/bin/ping = cap_net_raw+ep

    $ getfattr -d -m "^security\\." /usr/bin/ping

    # file: usr/bin/ping
    security.capability=0sAQAAAgAgAAAAAAAAAAAAAAAAAAA=

Atributos estendidos são copiados automaticamente por `cp -a`, mas alguns outros programas requerem um sinalizador especial: `rsync -X`.

As capacidades são definidas por scripts de instalação de pacotes no Arch (por exemplo, `iputils.install`).

## Administração e manutenção

É considerado um bug se um pacote tiver capacidades excessivamente permissivas; portanto, esses casos devem ser relatados em vez de serem listados aqui. Uma capacidade essencialmente equivalente ao acesso root (`CAP_SYS_ADMIN`) ou permitir trivialmente o acesso root (`CAP_DAC_OVERRIDE`) não conta como um bug, pois o Arch não suporta nenhum sistema MAC/RBAC.

Atenção: Muitas capacidades permitem escalonamento trivial de privilégios. Para exemplos e explicações, veja a publicação de Brad Spengler False Boundaries and Arbitrary Code Execution.

## Outros programas que se beneficiam de capacidades

Os pacotes a seguir não possuem arquivos com o atributo setuid, mas requerem privilégios de root para funcionar. Ao ativar algumas capacidades, usuários comuns podem usar o programa sem elevação de privilégios.

### beep

    # setcap cap_dac_override,cap_sys_tty_config+ep /usr/bin/beep

### chvt

    # setcap cap_dac_read_search,cap_sys_tty_config+ep /usr/bin/chvt

### iftop

    # setcap cap_net_raw+ep /usr/bin/iftop

### mii-tool

    # setcap cap_net_admin+ep /usr/bin/mii-tool

### mtr

    # setcap cap_net_raw+ep /usr/bin/mtr-packet

### nethogs

    # setcap cap_net_admin,cap_net_raw+ep /usr/bin/nethogs

### wavemon

    # setcap cap_net_admin+ep /usr/bin/wavemon

## Comandos úteis

Encontrar arquivos com setuid-root:

    $ find /usr/bin /usr/lib -perm /4000 -user root

Encontrar arquivos com setgid-root:

    $ find /usr/bin /usr/lib -perm /2000 -group root

## Veja também

- Páginas man: capabilities(7), setcap(8), getcap(8)
- Wikibooks:Grsecurity/Appendix/Capability Names and Descriptions
- Seccomp BPF (SECure COMPuting with filters)

Category:

- Security (Português)