Sensu исполняющий скрипт sudo пароль необходим

У меня есть обработчик Sensu, который запускается на оконечной точке Linux (Centos 6.6. Вот сценарий, который я использую:

#!/bin/bash --login
sudo -n -u deploy bash --login -c "cd /var/www/vhosts/sc/current; pwd; BUNDLE_GEMFILE=/var/www/vhosts/sc/current/Gemfile RAILS_ENV=production bundle exec pumactl -F /var/www/vhosts/sc/shared/config/puma.rb stop "
sudo -n -u deploy bash --login -c "cd /var/www/vhosts/sc/current; pwd; BUNDLE_GEMFILE=/var/www/vhosts/sc/current/Gemfile RAILS_ENV=production bundle exec pumactl -F /var/www/vhosts/sc/shared/config/puma.rb start "

Запуск этого скрипта локально, так как другой пользователь работает нормально, и я могу заставить Puma перезапуститься в разумных пределах. Даже когда я даю Сенсу оболочку и выполняю скрипт на конечной точке.

Когда он запускается с сервера Sensu, я получаю вывод:

{"timestamp":"2016-04-18T16:45:17.581962-0500","level":"info","message":"handler output","handler":{"type":"pipe","command":"/bin/sh /etc/sensu/handlers/puma_restart.sh","name":"puma_restart"},"output":["sudo: a password is required\n","sudo: a password is required\n"]}

Я думал, что это может быть проблемой с sudoers, так что вот мои настройки:

Defaults:sensu !requiretty
Defaults:sensu secure_path = /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
sensu ALL = NOPASSWD: /etc/sensu/handlers/puma_restart.sh

Я также попытался установить sudo NOPASSWORD для всех команд, таких как:

sensu  ALL=(ALL)       NOPASSWD: ALL

Но я все еще получаю ошибку, когда скрипт запускается.

Кто-нибудь есть идея, что я неправильно настроил? Если вам нужно больше деталей или контекста, пожалуйста, дайте мне знать.

1 ответ

Эта первая конфигурация sudoers с sensu ALL = NOPASSWD: /etc/sensu/handlers/puma_restart.sh не буду делать то, что вы хотите. Это назначает права для sensu пользователь вызывает оболочку puma_restart.sh скрипт с sudo. Команды sudo находятся внутри этого сценария и вызывают bash для выполнения команд. Вам нужно разрешить пользователю sensu вызывать bash через sudo.

Это второй конфиг sudoers sensu ALL=(ALL) NOPASSWD: ALL должно сработать. Похоже, это может быть проблема с конфигурацией sudoers.

Несколько вещей, которые могут продвинуть вас дальше:

  • Эти проверки выполняются на сервере Sensu или на клиенте? Убедитесь, что вы помещаете конфигурацию sudoers в место, где выполняется проверка.
  • Уберите вызовы sudo из сценария. Удалите вызовы sudo из скрипта и добавьте sudo к команде sensu check: sudo puma_restart.sh Этот первый конфиг sudoers должен работать с этим подходом.
  • Отладка конфигурации sudoers.
    • Бежать sudo -l -U sensu на клиентском хосте sensu, чтобы узнать, какие права предоставляют конфиги sudoers. С включенным паролем для всех ваших команд вы должны получить что-то, включая следующее. Если нет, то это проблема конфигурации sudoers. User sensu may run the following commands on this host: (root) NOPASSWD: ALL
Другие вопросы по тегам