"/ Usr / bin / ping" viene mostrato come giallo su rosso nello schema di colori di base di Fedora bash - cosa significa?


32

Quando si elenca la directory /usr/bin, si vede che ping viene mostrato come giallo su rosso:

ping mostrato in giallo su rosso

Il file non ha caratteristiche speciali:

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

Secondo cosa significano i diversi colori nel terminale? , dove possiamo trovare uno script per elencare le interpretazioni dei colori, "giallo su rosso" significa "ca":

Colori visti nello schema di colorazione bash predefinito di Fedora

Cosa significa "ca"? Forse significa che questo file è hardlinked da altrove ( /usr/bin/pinge /usr/pingsono lo stesso file)

PS La domanda si è verificata durante la visione di Explaining Dirty COW , in cui il pingcomando su Ubuntu è mostrato come setuid root, che suona strano:

setuid root ping

Risposte:


51

Ciò indica che pingha funzionalità extra:

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

o anche (su Fedora):

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

Ciò consente pingdi aprire un socket raw (e inviare e ricevere pacchetti ICMP) senza eseguire as root.

setcap(8)e capabilities(7)fornire maggiori dettagli.

Storicamente, è pingstato installato setuid in modo che potesse funzionare come rooted essere in grado di utilizzare socket grezzi; una volta che le funzionalità sono diventate utilizzabili, molte distribuzioni sono passate a usarle invece, poiché il controllo più fine che offrono sulle autorizzazioni sembra preferibile. In Ubuntu, a quanto pare , ci sono problemi con il programma di installazione , quindi pingè ancora installato setuid root(il codice delle funzionalità è disabilitato nel relativo script del manutentore , che proviene da Debian dove pingè configurato usando le funzionalità se possibile).

La pingmanpage descrive i suoi requisiti in questo modo:

pingrichiede la CAP_NET_RAWcapacità di essere eseguita 1) se il programma viene utilizzato per query non echo (vedi -Nopzione) o 2) se il kernel non supporta socket ICMP non raw, oppure 3) se l'utente non è autorizzato a creare un'eco ICMP zoccolo. Il programma può essere usato come root set-uid.


1
Grazie Stefano. La mia conoscenza del sistema è debole! Non sapevo nemmeno che esistessero le capacità, e ci sono state dal kernel 2.2 ... 26 gennaio 1999 . Secondo la capabilities(7)pagina man, No standard governa le capacità, ma l'implementazione delle capacità di Linux si basa sulla bozza di standard POSIX.1e ritirata; vedi qui
David Tonhofer,

La sua istantanea sullo schermo indica la radice del suid.
Giosuè,

1
@Joshua in Ubuntu sì, ma la domanda riguarda Fedora (primo screenshot).
Stephen Kitt,

2
Vale la pena ricordare che il motivo di setuid root su un altro sistema è lo stesso (per poter inviare e ricevere pacchetti ICMP) solo tramite un'autorizzazione meno precisa.
Kevin Reid,

Grazie @KevinReid, l'ho aggiunto alla mia risposta. (La spiegazione di Ubuntu è un po 'più complessa di quanto pensassi!)
Stephen Kitt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.