У меня есть приложение веб-сервера, запускающееся при загрузке с использованием 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
?
/sbin/stop webapp
я получаюstop: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
. Как бы я позволилmainuser
выполнить только эту команду?Ответы:
sudo очень настраиваемый, вы можете позволить этому пользователю выполнять ограниченный набор команд без запроса пароля. Следующая строка
/etc/sudoers
должна делать то, что вы хотите:источник
man sudoers
? Мне было довольно сложно разобрать.Unable to connect to system bus
. Дополнительная информация: Разрешить группе, не относящейся к sudo, управлять заданием Upstart