Назад | Перейти на главную страницу

Upstart: разрешить обычному пользователю останавливать и запускать мою настраиваемую службу

У меня приложение веб-сервера запускается при загрузке с помощью выскочки. Это сценарий выскочки:

# web app node upstart file at /etc/init/webapp.conf

description "web application"

start on started mongodb
stop on runlevel [06]

respawn
respawn limit 10 100

env NODE_ENV=production

pre-start script
    ulimit -n 2048
end script

exec start-stop-daemon --start -c mainuser --exec /usr/bin/make -- -C /home/mainuser/app start-prod

Это работает безупречно на сервере Ubuntu 10.04 LTS, и я очень этому рад.

Однако у меня есть сценарий оболочки развертывания, который входит в систему с использованием SSH как mainuser (это не sudoer), а затем обновит рабочий каталог до последней версии развертывания.

Проблема здесь в том, что службу необходимо перезапустить, чтобы приложения загружали новые исходные файлы. Тем не мение, mainuser получает ...

mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found

... при попытке остановить это. я должен бежать sudo stop webapp, но этот пользователь не может этого сделать, так как он не sudoer. По соображениям безопасности я тоже не хочу, чтобы он был sudoer, плюс я не хочу вставлять пароль sudo.

Итак, как мне разрешить mainuser бежать stop webapp и start webapp?

sudo очень настраиваемый, вы можете разрешить этому пользователю выполнять ограниченный набор команд без запроса пароля. Следующая строка в /etc/sudoers должен делать то, что хочешь:

mainuser ALL = (root) NOPASSWD: /sbin/start webapp, /sbin/stop webapp