Я настраиваю Nagios на некоторых из моих серверов Linux и столкнулся с небольшой проблемой. Для check_ide_smart
запуска плагина требуется root-доступ к системе. Чтобы запустить его, я использую check_by_ssh
плагин для входа в ssh в учетную запись nagios на удаленном хосте, а затем запускаю check_ide_smart
с помощью sudo.
Первоначально я добавил следующие строки, /etc/sudoers
чтобы позволить программе работать:
nagios ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_smart
Хотя это работало очень хорошо при локальном запуске, у меня возникла проблема, когда он запускался из Nagios: не появлялся TTY, что мешало плагину работать.
Я покопался в man-странице для sudo и нашел опцию -s, которая порождает оболочку и запускает там программу. Когда я попытался использовать sudo -s
, у меня возникли проблемы с разрешениями, так как -s, по-видимому, меняет команду на /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart
, что не разрешено файлом sudoers. Я попытался изменить файл sudoers для использования этой команды вместо этого, но это не сработало, и использование кавычек является синтаксической ошибкой.
В конце концов я получил его на работу, используя следующую строку /etc/sudoers
:
nagios ALL=/bin/bash
Мне кажется, что это неправильно, так как я разрешаю пользователю nagios создавать корневую оболочку, с которой он может делать все что угодно.
На данный момент, я подумал, что, возможно, поместив команду в сценарий оболочки, для которой пользователь nagios имеет права только для чтения, сработает, поэтому я создал сценарий оболочки:
#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin $@
К сожалению, я никогда не мог заставить переданные параметры ( Редактировать: мне нужно было процитировать $@
) корректно работать с плагином, поэтому я не знаю, будет ли это работать. $@
для его работы. Спасибо @derobert и @pjz. Я до сих пор не знаю, сработает ли это, поскольку я заставил его работать, используя решение @Mike Arthur.
Есть ли способ, которым я могу получить sudo -s
работу, не допуская порождения корневой оболочки?
Ответ:
Добавлена следующая строка /etc/sudoers
:
nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart *
Обратите внимание на конечную звездочку; без этого это не работает. Спасибо @Mike Arthur за ответ.
К вашему сведению, вам нужно указать $ @ в вашем скрипте, чтобы он работал правильно:
$@
это магия Из справочной страницы bash,Кроме того, запуск bash не приведет к появлению pty; хотя я озадачен тем, почему вашему плагину nagios нужен терминал для работы. Это не должно Может быть, настоящая проблема заключается в санитарной обработке окружающей среды?
источник
Вместо того, чтобы использовать
sudo -s
и запускать корневую оболочку, просто позвольте своему пользователю nagios использовать sudo без использования tty!requiretty
. Вы/etc/sudoers
должны иметь следующее:... который позволит прямой доступ к sudo, без пароля и без tty. Вы можете оставить «check_ide_plugin» отключенным, если хотите иметь доступ sudo ко всем плагинам.
Мы также используем NRPE, который кажется немного более безопасным, чем check_by_ssh, но требует немного больше настроек. Та же идея в / etc / sudoers tho, просто поменяйте nagios на nrpe. :)
~ томми
источник
Попробуйте еще раз сценарий, но поместите двойные кавычки вокруг вашего $ @:
источник
Я не думаю, что возможно использовать -s без порождения корневой оболочки (при условии, что вам нужны привилегии root). Опция -s предназначена специально для запуска оболочки. Вот что значит. Из sudo (8):
источник
/bin/bash
, что также позволяет создавать интерактивную оболочку без каких-либо ограничений и без каких-либо ограничений на то, какие команды можно вызывать.