При просмотре каталога /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»:
Что означает "ca"? Возможно, это означает, что этот файл связан с чем-то другим ( /usr/bin/ping
и /usr/ping
это один и тот же файл)
P.S. Вопрос возник во время просмотраОбъясняя Dirty COW, где ping
команда в Ubuntu отображается как setuid root, что звучит странно:
решение1
Это указывает на то, что ping
у него есть дополнительные возможности:
$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep
или даже (в Fedora до 30):
$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_admin,cap_net_raw+ep
Это позволяет ping
открывать необработанный сокет (а также отправлять и получать пакеты ICMP) без запуска в качестве 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. Программа может использоваться как set-uid root.
Ядра 2.6.39 и более поздние версии предоставляютдругой механизм, позволяющий программам отправлять и получать эхо-сообщения ICMP:net.ipv4.ping_group_range
. Это используется в Fedora 31 и более поздних версиях, чтобы обеспечить ping
работу без дополнительных возможностей (в частности, внутри контейнеров без прав root); см.Как работает ping в Fedora без setuid и capabilities?для получения подробной информации.