Capabilities (Português)

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)