Для того, чтобы ping
работал, необходимо создать сетевой сокет raw . Обычно это привилегированное действие.
В современной системе Linux этому можно предоставить "возможности"
например, в CentOS 7:
$ ls -l /bin/ping
-rwxr-xr-x 1 root root 62088 Nov 7 2016 /bin/ping*
$ getcap /bin/ping
/bin/ping = cap_net_admin,cap_net_raw+p
В Debian 9.1 (Растяжка):
$ getcap /bin/ping
/bin/ping = cap_net_raw+ep
Возможности — это новый способ выполнения более точной -детализированной формы повышения привилегий без предоставления всех «корневых» прав, предоставляемых программами с setuid.
Без возможностей тогда ping
должен быть setuid root, чтобы создать необработанный сетевой сокет.