«/ Usr / bin / ping» отображается в виде желтого на красном в стандартной цветовой схеме Fedora bash - что это значит?

32

При перечислении каталога видно, /usr/binчто pingоно отображается желтым по красному:

пинг показан желтым на красном

Файл не имеет специальных возможностей:

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

По словам Что означают разные цвета в терминале? где мы можем найти скрипт для отображения цветовых интерпретаций, «желтый на красном» означает «ca»:

Цвета, используемые в стандартной схеме раскраски Fedora по умолчанию

Что значит "ca"? Может быть, это означает, что этот файл жестко связан с другим ( /usr/bin/pingи /usr/pingэто тот же файл)

PS Вопрос возник при просмотре Explaining Dirty COW , где pingкоманда в Ubuntu показана как setuid root, что звучит странно:

setuid root ping

Дэвид Тонхофер
источник

Ответы:

51

Это указывает на то, что pingимеет дополнительные возможности:

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

или даже (на Fedora):

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

Это позволяет pingоткрыть необработанный сокет (и отправлять и получать ICMP-пакеты) без запуска as root.

setcap(8)и capabilities(7)дать больше подробностей.

Исторически pingбыл установлен setuid, чтобы он мог работать как rootи иметь возможность использовать необработанные сокеты; как только возможности стали пригодными для использования, многие дистрибутивы переключились на их использование, так как более тонкий контроль, который они предлагают над разрешениями, кажется предпочтительным. В Ubuntu, тем не менее, существуют проблемы, очевидно, с установщиком , поэтому pingон все еще установлен setuid root(код возможностей отключен в соответствующем скрипте сопровождающего , который поставляется из Debian, где pingон настраивается с использованием возможностей, если это возможно).

pingСтраница руководства описывает свои требования таким образом:

pingтребуется CAP_NET_RAWвозможность выполнения 1) если программа используется для неэхо-запросов (см. -Nпараметр), или 2) если ядро ​​не поддерживает не-сырые сокеты ICMP, или 3) если пользователю не разрешено создавать эхо-запрос ICMP разъем. Программа может использоваться как root-set-uid.

Стивен Китт
источник
1
Спасибо Стивен. Мои системные знания слабы! Я даже не знал, что возможности существуют, и они были там с ядра 2.2 ... 26 января 1999 года . Согласно справочнойcapabilities(7) странице, никакие стандарты не управляют возможностями, но реализация возможностей Linux основана на отозванном проекте стандарта POSIX.1e; смотрите здесь
Дэвид Тонхофер
Его снимок экрана указывает на suid root.
Джошуа
1
@ Joshua в Ubuntu да, но вопрос о Fedora (первый скриншот).
Стивен Китт
2
Возможно, стоит упомянуть, что причина установки root в другой системе по той же причине (чтобы иметь возможность отправлять и получать пакеты ICMP) только через менее детализированное разрешение.
Кевин Рейд
Спасибо @KevinReid, я добавил это в свой ответ. (Объяснение Ubuntu немного сложнее, чем я думал, это будет!)
Стивен Китт