Beim Auflisten des Verzeichnisses /usr/bin
sieht man, dass ping
es gelb auf rot dargestellt wird:
Die Datei weist keine Besonderheiten auf:
$ 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: -
EntsprechendWas bedeuten die unterschiedlichen Farben im Terminal?, wo wir ein Skript zum Auflisten von Farbinterpretationen finden können. „Gelb auf Rot“ bedeutet „ca“:
Was bedeutet "ca"? Vielleicht bedeutet es, dass diese Datei von woanders aus fest verknüpft ist ( /usr/bin/ping
und /usr/ping
es sich um dieselbe Datei handelt).
PS Die Frage ist beim Anschauen aufgetauchtErklärung zu Dirty COW, wobei der ping
Befehl unter Ubuntu als setuid root angezeigt wird, was seltsam klingt:
Antwort1
Dies weist darauf hin, dass ping
über zusätzliche Funktionen verfügt:
$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep
oder sogar (unter Fedora bis zu 30):
$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_admin,cap_net_raw+ep
Dies ermöglicht ping
das Öffnen eines Raw-Sockets (und das Senden und Empfangen von ICMP-Paketen), ohne als ausgeführt zu werden root
.setcap(8)
Undcapabilities(7)
Geben Sie weitere Einzelheiten an.
In der Vergangenheit ping
wurde setuid installiert, damit es als root
Raw Sockets ausgeführt werden und diese verwenden konnte. Sobald die Funktionen nutzbar wurden, wechselten viele Distributionen zu diesen, da die feinere Kontrolle, die sie über Berechtigungen bieten, vorzuziehen scheint. In Ubuntu jedoches gibt offenbar Probleme mit dem Installationsprogramm, also ping
ist immer noch setuid installiert root
(der Fähigkeiten-Code ist deaktiviert indas entsprechende Maintainer-Skript, das von Debian stammt und ping
konfiguriert istFunktionen nutzenwenn möglich).
Die ping
Manpagebeschreibt seine Anforderungendaher:
ping
erfordertCAP_NET_RAW
die Fähigkeit zur Ausführung, 1) wenn das Programm für Nicht-Echo-Abfragen verwendet wird (siehe-N
Option), oder 2) wenn der Kernel keine nicht-rohen ICMP-Sockets unterstützt, oder 3) wenn der Benutzer keinen ICMP-Echo-Socket erstellen darf. Das Programm kann als Set-UID-Root verwendet werden.
Kernel 2.6.39 und höher bietenein weiterer Mechanismus, der es Programmen ermöglicht, ICMP-Echonachrichten zu senden und zu empfangen:net.ipv4.ping_group_range
. Dies wird in Fedora 31 und höher verwendet, um ping
das Arbeiten ohne zusätzliche Fähigkeiten zu ermöglichen (insbesondere in Rootless-Containern); sieheWie funktioniert Ping unter Fedora ohne Setuid und Fähigkeiten?für Details.