"/ Usr / bin / ping" wird im Standard-Fedora-Bash-Farbschema als gelb auf rot angezeigt. Was bedeutet das?

32

Wenn man das Verzeichnis auflistet /usr/bin, sieht man, dass ping es gelb auf rot angezeigt wird:

Ping wird gelb auf rot angezeigt

Die Datei hat keine Besonderheiten:

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

Entsprechend Was bedeuten die verschiedenen Farben im Terminal? , wo wir ein Skript zum Auflisten von Farbinterpretationen finden, bedeutet "gelb auf rot" "ca":

Farben, die im Fedora-Standard-Bash-Farbschema angezeigt werden

Was bedeutet "ca"? Möglicherweise bedeutet dies, dass diese Datei von einer anderen Stelle aus fest verlinkt ist ( /usr/bin/pingund /usr/pingdieselbe Datei ist).

PS Die Frage trat auf, als ich Dirty COW erklärte, wo der pingBefehl unter Ubuntu als setuid root angezeigt wird, was seltsam klingt:

setuid root ping

David Tonhofer
quelle

Antworten:

51

Dies weist auf pingzusätzliche Funktionen hin:

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

oder sogar (auf Fedora):

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

Dies ermöglicht pingdas Öffnen eines Raw-Sockets (und das Senden und Empfangen von ICMP-Paketen), ohne als ausgeführt zu werden root.

setcap(8)und capabilities(7)geben Sie weitere Details.

In der Vergangenheit pingwurde setuid so installiert, dass es als rootRaw-Sockets ausgeführt wird und verwendet werden kann. Sobald die Funktionen nutzbar wurden, wurden viele Distributionen auf diese umgestellt, da die feinere Kontrolle, die sie über Berechtigungen bieten, vorzuziehen scheint. In Ubuntu gibt es jedoch anscheinend Probleme mit dem Installationsprogramm , weshalb pingsetuid immer noch installiert ist root(der Capabilities-Code ist im entsprechenden Betreuerskript deaktiviert , das von Debian stammt, wo wenn möglich mit Capabilitiesping konfiguriert wird ).

Die pingManpage beschreibt ihre Anforderungen folgendermaßen :

pingerfordert CAP_NET_RAWdie Ausführung von Funktionen 1) wenn das Programm für Nicht-Echo-Abfragen verwendet wird (siehe -NOption), oder 2) wenn der Kernel keine Nicht-Raw-ICMP-Sockets unterstützt, oder 3) wenn der Benutzer kein ICMP-Echo erstellen darf Steckdose. Das Programm kann als set-uid root verwendet werden.

Stephen Kitt
quelle
1
Danke Stephen. Meine Systemkenntnisse sind schwach! Ich wusste nicht einmal, dass Fähigkeiten existieren, und sie sind seit Kernel 2.2 ... 26. Januar 1999 da . Laut der capabilities(7)Manpage regeln keine Standards die Funktionen, aber die Implementierung der Linux-Funktionen basiert auf dem zurückgezogenen POSIX.1e-Standardentwurf. siehe hier
David Tonhofer
Sein Bildschirmfoto zeigt Suid Root.
Joshua
1
@ Joshua in Ubuntu ja, aber die Frage ist über Fedora (erster Screenshot).
Stephen Kitt
2
Es kann erwähnenswert sein, dass der Grund für setuid root auf einem anderen System derselbe ist (um ICMP-Pakete senden und empfangen zu können), nur mit einer weniger detaillierten Berechtigung.
Kevin Reid
Danke @ KevinReid, das habe ich zu meiner Antwort hinzugefügt. (Die Ubuntu Erklärung ist ein bisschen komplexer als ich dachte!)
Stephen Kitt