新贵:允许普通用户停止和启动我的自定义服务

Tom*_*Tom 16 permissions deployment upstart

我已经使用 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
Run Code Online (Sandbox Code Playgroud)

这在 Ubuntu 服务器 10.04 LTS 上完美运行,我对此感到非常高兴。

但是,我有一个部署 shell 脚本,它使用 SSH 登录mainuser(这不是 sudoer),然后将工作目录更新为最新的部署版本。

这里的问题是需要重新启动服务,以便应用程序加载新的源文件。然而,mainuser得到一个...

mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found
Run Code Online (Sandbox Code Playgroud)

...当试图阻止它时。我必须运行sudo stop webapp,但该用户不能这样做,因为他不是 sudoer。出于安全原因,我也不希望他成为 sudoer,而且我不想插入 sudo 密码。

那么我如何允许mainuser运行stop webappstart webapp

mgo*_*ven 31

sudo 是非常可配置的,您可以允许该用户执行一组有限的命令而无需提示输入密码。以下行/etc/sudoers应该做你想做的:

mainuser ALL = (root) NOPASSWD: /sbin/start webapp, /sbin/stop webapp
Run Code Online (Sandbox Code Playgroud)