На моем сервере работает CentOS 6. У меня есть широкополосное устройство Sprint, подключенное как ppp0. Это соединение имеет тенденцию нуждаться в перезапуске, поэтому я пытаюсь отслеживать его с помощью Nagios (это уже используется для другого мониторинга моей сети). У меня есть сценарий nagios, который пытается выполнить ping через этот интерфейс с помощью этой команды:
enter ping -c 1 -I ppp0 google.com | grep ttl
Запуск этого от имени пользователя root работает нормально и дает мне ответ в виде одного ответа ping или ничего, если соединение не работает. Однако, если я запустил ту же команду от имени пользователя nagios, я получу следующую ошибку:
Warning: cannot bind to specified iface, falling back: Operation not permitted
Пинг возвращается к моему интерфейсу eth0 для пинга.
Кажется, что разрешения интерфейса не позволяют пользователю nagios использовать его. Я не уверен, что нужно изменить, чтобы этот пользователь мог пинговать этот интерфейс. Какие-либо предложения? Спасибо
Поскольку ping должен записывать необработанные пакеты, ему нужен root-доступ. Обычно для этого в ping установлен бит setuid. Если вы проверяете разрешение пинга, например: stat -c %a $(which ping)
. Большинство систем вернутся 4775
. Ведущие 4 - это бит setuid, который говорит о том, что при запуске этой программы она выполняется под uid пользователя, владеющего файлом. Если это вместо этого возвращается 755
. Вы можете добавить бит setuid, запустив chmod u+s $(which ping)
В Linux предпочтительным способом является предоставление ping
(или другие подобные вещи) специальные возможности. Это позволяет избежать ошибок, связанных с выполнением с правами root через бит setuid (см. Ниже).
setcap cap_net_raw+ep /bin/ping
Возможности (POSIX 1003.1e, возможности (7)) обеспечивают детальный контроль над разрешениями суперпользователя, позволяя избежать использования пользователя root. Разработчикам программного обеспечения рекомендуется заменить использование мощного атрибута setuid в системном двоичном файле более минимальным набором возможностей. Многие пакеты используют такие возможности, как использование CAP_NET_RAW для двоичного файла ping, предоставляемого iputils. Это позволяет, например, ping должен запускаться обычным пользователем (как и метод setuid), в то же время ограничивая последствия для безопасности потенциальной уязвимости в ping.