Ao listar o diretório /usr/bin
, vê-se que ping
é mostrado em amarelo sobre vermelho:
O arquivo não possui recursos especiais:
$ file /usr/bin/ping
/usr/bin/ping: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for
GNU/Linux 2.6.32, BuildID[sha1]=2508ea2a85b70c68967b3e6345541430f5317d5f,
stripped
$ stat /usr/bin/ping
File: '/usr/bin/ping'
Size: 62096 Blocks: 136 IO Block: 4096 regular file
Device: 802h/2050d Inode: 4457229 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:ping_exec_t:s0
Access: 2016-11-01 10:02:57.332925719 +0100
Modify: 2016-06-22 14:01:14.000000000 +0200
Change: 2016-07-10 23:41:59.623796126 +0200
Birth: -
De acordo comO que significam as diferentes cores no terminal?, onde podemos encontrar um script para listar as interpretações das cores, "amarelo sobre vermelho" significa "ca":
O que significa "ca"? Talvez isso signifique que este arquivo tenha um link físico de outro lugar ( /usr/bin/ping
e /usr/ping
seja o mesmo arquivo)
PS A pergunta ocorreu enquanto assistiaExplicando a VACA Suja, onde o ping
comando no Ubuntu é mostrado como setuid root, o que parece estranho:
Responder1
Isso indica que ping
possui recursos extras:
$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep
ou mesmo (no Fedora até 30):
$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_admin,cap_net_raw+ep
Isso permite ping
abrir um soquete bruto (e enviar e receber pacotes ICMP) sem executar como root
.setcap(8)
ecapabilities(7)
dê mais detalhes.
Historicamente, ping
o setuid foi instalado para que pudesse rodar root
e poder usar soquetes brutos; assim que os recursos se tornaram utilizáveis, muitas distribuições passaram a usá-los, já que o controle mais refinado que eles oferecem sobre as permissões parece preferível. Porém, no Ubuntu,aparentemente há problemas com o instalador, então ping
ainda está instalado o setuid root
(o código de recursos está desabilitado emo script do mantenedor relevante, que vem do Debian onde ping
está configuradousando recursosse possível).
A ping
página de manualdescreve seus requisitospor isso:
ping
requerCAP_NET_RAW
capacidade para ser executado 1) se o programa for usado para consultas sem eco (ver-N
opção), ou 2) se o kernel não suportar soquetes ICMP não brutos, ou 3) se o usuário não tiver permissão para criar um eco ICMP soquete. O programa pode ser usado como set-uid root.
Kernels 2.6.39 e posteriores fornecemoutro mecanismo para permitir que programas enviem e recebam mensagens de eco ICMP:net.ipv4.ping_group_range
. Isto é usado no Fedora 31 e posteriores para permitir ping
trabalhar sem recursos extras (notavelmente, dentro de contêineres sem root); verComo o ping funciona no Fedora sem setuid e recursos?para detalhes.