Запуск monit от имени пользователя с ограниченными правами и отслеживание процесса, которому требуются права суперпользователя - PullRequest
2 голосов
/ 01 июля 2011

У меня есть специальный скрипт, написанный на Ruby, которому нужны привилегии root. Большинству других процессов это не нужно, поэтому их было легко настроить в Monit. Не этот.

Сервер должен слушать на 386, и этот порт доступен только для root. Я не буду вдаваться в детали того, почему, потому что 1) я не из тех, кто на низком уровне, 2) до сих пор он работал нормально при использовании sudo.

Файл конфигурации monit прост и выглядит следующим образом:

set logfile syslog facility LOG_daemon # Default facility is LOG_USER
set mailserver smtp.sendgrid.net
        username "blah", password "blah"
        with timeout 20 seconds
set alert blah@bleh.com
set logfile /home/deploy/monit.log


check process ldapserver
     with pidfile /var/pids/ldap_server.pid
     start program = "/usr/local/bin/ruby /var/lib/ldap_server.rb"
     stop program = "/bin/sh"

Примечание: я добавил / bin / sh в программу остановки, потому что для этого процесса нет программы остановки.

Если я поставлю вот так:

start program = "/usr/local/bin/ruby /var/lib/ldap_server.rb"

Не запускается. Нет подсказок.

start program = "/usr/bin/sudo -u deploy /usr/local/bin/ruby /var/lib/ldap_server.rb

Сбой также. Нет вывода.

start program = "/bin/su deploy -c '/usr/local/bin/ruby /var/lib/ldap_server.rb'

Не запускается.

Я также попытался перенаправить вывод с помощью > ~/out.log 2 > &1 для захвата stderr и stdout, но, похоже, он не работает.

Теперь я запускаю monit под пользователем развертывания, который ограничен. Поэтому мне нужно каким-то образом запустить сервер ldap от имени пользователя root, но оказалось, что это довольно сложно сделать.

Может ли кто-нибудь просветить меня?

Приветствия

M>

1 Ответ

6 голосов
/ 05 декабря 2011

Использование sudo или su для запуска скрипта, так как пользователь 'deploy' не поможет (так как monit уже работает под этим пользователем в любом случае, и он должен запускаться как root).

Кроме того, по умолчанию sudo запрашивает пароль, который не может предоставить monit.

Один из способов решить эту проблему - создать файл /usr/bin/startLDAPServer.sh и сделать его исполняемым (chmod a+x /usr/bin/startLDAPServer.sh) со следующим содержимым:

#!/bin/sh
/usr/local/bin/ruby /var/lib/ldap_server.rb

и затем добавьте эту строку в /etc/sudoers файл:

deploy ALL =NOPASSWD:/usr/bin/startLDAPServer.sh

Затем вы можете использовать:

start program = "/usr/bin/sudo /usr/bin/startLDAPServer.sh"

в мониторе.

...