“/ Usr / bin / ping” est indiqué en jaune sur rouge dans le jeu de couleurs Fedora bash par défaut - qu'est-ce que cela signifie?

32

En listant le répertoire /usr/bin, on voit que ping c'est indiqué en jaune sur rouge:

ping montré jaune sur rouge

Le fichier n'a pas de particularité:

$ 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: -

Selon Que signifient les différentes couleurs dans le terminal? , où nous pouvons trouver un script pour lister les interprétations des couleurs, "yellow-on-red" signifie "ca":

Couleurs vues dans le schéma de coloration bash par défaut de Fedora

Que veut dire "ca"? Peut-être cela signifie-t-il que ce fichier est lié par un lien figé ailleurs ( /usr/bin/pinget /usr/pingsont le même fichier)

PS La question s'est posée en regardant Explaining Dirty COW , où la pingcommande sur Ubuntu est affichée sous la forme setuid root, ce qui peut paraître étrange:

setuid root ping

David Tonhofer
la source

Réponses:

51

Cela indique qu'il pinga des capacités supplémentaires:

$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep

ou même (sur Fedora):

$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_admin,cap_net_raw+ep

Cela permet pingd'ouvrir un socket brut (et d'envoyer et de recevoir des paquets ICMP) sans s'exécuter en tant que root.

setcap(8)et capabilities(7)donner plus de détails.

Historiquement, a pingété installé setuid afin qu’il puisse fonctionner comme rootet puisse utiliser des sockets bruts; une fois que les fonctionnalités sont devenues utilisables, de nombreuses distributions ont préféré les utiliser, car le contrôle plus détaillé qu'elles offrent sur les autorisations semble préférable. Cependant, dans Ubuntu, il y a apparemment des problèmes avec le programme d'installation , de sorte qu'il pingest toujours installé setuid root(le code de capacités est désactivé dans le script de maintenance correspondant , qui provient de Debian où il pingest configuré en utilisant des capacités si possible).

La pingpage de manuel décrit ses exigences ainsi:

pingnécessite une CAP_NET_RAWcapacité à exécuter 1) si le programme est utilisé pour des requêtes non-écho (voir -Noption), ou 2) si le noyau ne prend pas en charge les sockets ICMP non bruts, ou 3) si l'utilisateur n'est pas autorisé à créer un écho ICMP. prise. Le programme peut être utilisé comme racine de set-uid.

Stephen Kitt
la source
1
Merci Stephen. Ma connaissance du système est faible! Je ne savais même pas que les capacités existaient, et elles existent depuis le noyau 2.2 ... 26 janvier 1999 . Selon la capabilities(7)page de manuel, Aucune norme ne régit les fonctionnalités, mais l'implémentation des fonctionnalités Linux est basée sur le projet de norme POSIX.1e retiré. voir ici
David Tonhofer
Sa capture d'écran indique la racine suid.
Josué
1
@ Josua dans Ubuntu oui, mais la question concerne Fedora (première capture d'écran).
Stephen Kitt
2
Il convient de mentionner que la raison de setuid root sur un autre système est la même (pouvoir envoyer et recevoir des paquets ICMP) simplement via une autorisation moins détaillée.
Kevin Reid
Merci @ KevinReid, j'ai ajouté cela à ma réponse. (L'explication Ubuntu est un peu plus complexe que ce que je pensais!)
Stephen Kitt