Al enumerar el directorio /usr/bin
, se ve que ping
se muestra en amarillo sobre rojo:
El archivo no tiene características especiales:
$ 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 acuerdo a¿Qué significan los diferentes colores en el terminal?, donde podemos encontrar un script para enumerar las interpretaciones de colores, "amarillo sobre rojo" significa "ca":
¿Qué significa "ca"? Tal vez signifique que este archivo está vinculado desde otro lugar ( /usr/bin/ping
y /usr/ping
es el mismo archivo)
PD: La pregunta surgió mientras miraba.Explicando la VACA sucia, donde el ping
comando en Ubuntu se muestra como setuid root, lo que suena extraño:
Respuesta1
Esto indica que ping
tiene capacidades extra:
$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep
o incluso (en Fedora hasta 30):
$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_admin,cap_net_raw+ep
Esto permite ping
abrir un socket sin formato (y enviar y recibir paquetes ICMP) sin ejecutarlo como root
.setcap(8)
ycapabilities(7)
dar más detalles.
Históricamente, ping
se instaló setuid para que se ejecutara root
y pudiera usar sockets sin formato; Una vez que las capacidades se volvieron utilizables, muchas distribuciones pasaron a usarlas, ya que parece preferible el control más detallado que ofrecen sobre los permisos. Sin embargo, en Ubuntu,aparentemente hay problemas con el instalador, por lo que ping
todavía está instalado setuid root
(el código de capacidades está deshabilitado enel script de mantenimiento relevante, que viene de Debian donde ping
está configuradousando capacidadessi es posible).
La ping
página de manualdescribe sus requisitosde este modo:
ping
requiereCAP_NET_RAW
capacidad para ejecutarse 1) si el programa se utiliza para consultas sin eco (ver-N
opción), o 2) si el kernel no admite sockets ICMP sin formato, o 3) si el usuario no tiene permiso para crear un eco ICMP enchufe. El programa se puede utilizar como root set-uid.
Los kernels 2.6.39 y posteriores proporcionanOtro mecanismo para permitir que los programas envíen y reciban mensajes de eco ICMP.:net.ipv4.ping_group_range
. Esto se utiliza en Fedora 31 y posteriores para permitir ping
trabajar sin capacidades adicionales (en particular, dentro de contenedores sin raíz); ver¿Cómo funciona el ping en Fedora sin setuid ni capacidades?para detalles.