Capabilities (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 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