„/ Usr / bin / ping” jest wyświetlany jako domyślnie żółto-czerwony w domyślnym schemacie kolorów bash Fedory - co to znaczy?

32

Podczas wyświetlania katalogu /usr/binwidać, że ping jest pokazany jako żółto-czerwony:

ping pokazany jako żółto-czerwony

Plik nie ma specjalnych funkcji:

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

Zgodnie z tym, co oznaczają różne kolory w terminalu? , w którym możemy znaleźć skrypt wyświetlający interpretacje kolorów, „żółto-czerwony” oznacza „ca”:

Kolory widoczne w domyślnym schemacie kolorowania bashów Fedory

Co znaczy „ca”? Może to oznacza, że ​​ten plik jest dowiązany z innego miejsca ( /usr/bin/pingi /usr/pingsą tym samym plikiem)

PS Pytanie pojawiło się podczas oglądania Wyjaśnienia Dirty COW , gdzie pingpolecenie na Ubuntu jest pokazane jako setuid root, co brzmi dziwnie:

ping setuid root

David Tonhofer
źródło

Odpowiedzi:

51

Oznacza to, że pingma dodatkowe możliwości:

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

lub nawet (w Fedorze):

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

Umożliwia pingto otwarcie surowego gniazda (oraz wysyłanie i odbieranie pakietów ICMP) bez uruchamiania jako root.

setcap(8)i capabilities(7)podaj więcej szczegółów.

Historycznie pingbył instalowany w trybie setuid, aby działał jako rooti mógł korzystać z surowych gniazd; gdy zdolności stały się użyteczne, wiele dystrybucji przeszło na używanie ich zamiast tego, ponieważ bardziej szczegółowa kontrola, jaką oferują one w stosunku do uprawnień, wydaje się lepsza. Jednak w Ubuntu najwyraźniej występują problemy z instalatorem , więc pingnadal jest instalowany setuid root(kod możliwości jest wyłączony w odpowiednim skrypcie opiekuna , który pochodzi z Debiana, gdzie pingjest konfigurowany przy użyciu możliwości, jeśli to możliwe).

pingPodręcznika opisuje swoje wymagania w następujący sposób:

pingwymaga CAP_NET_RAWwykonania 1), jeśli program jest używany do zapytań bez echa (patrz -Nopcja), lub 2) jeśli jądro nie obsługuje nie-surowych gniazd ICMP, lub 3) jeśli użytkownik nie może utworzyć echa ICMP gniazdo elektryczne. Program może być używany jako root-set UID.

Stephen Kitt
źródło
1
Dzięki Stephen. Moja wiedza systemowa jest słaba! Nawet nie wiedziałem, że istnieją możliwości, i są one dostępne od jądra 2.2 ... 26 stycznia 1999 . Według strony capabilities(7)man Żadne standardy nie rządzą możliwościami, ale implementacja możliwości Linuksa jest oparta na wycofanym projekcie standardu POSIX.1e; patrz tutaj
David Tonhofer,
Jego migawka ekranu wskazuje root suid.
Jozuego,
1
@Joshua in Ubuntu tak, ale pytanie dotyczy Fedory (pierwszy zrzut ekranu).
Stephen Kitt
2
Warto wspomnieć, że przyczyna setuid root w innym systemie jest taka sama (aby móc wysyłać i odbierać pakiety ICMP) tylko przez mniej szczegółowe pozwolenie.
Kevin Reid
Dzięki @KevinReid, dodałem to do mojej odpowiedzi. (Wyjaśnienie Ubuntu jest nieco bardziej skomplikowane, niż się spodziewałem!)
Stephen Kitt