我已经使用upstart在启动时启动了Web服务器应用程序。这是新贵的脚本:
# 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
?
1
通过将用户添加到sudoers中,您担心哪些安全问题?您可以编写一条规则,该规则仅允许用户使用特定命令,而不能再允许其他用户使用,还可以包括nopasswd选项以免密码提示。至于您得到的特定错误,那是因为开始/停止在/ sbin中,这通常不是普通用户路径的一部分。因此,您可以执行“ / sbin / stop”,或将sbin添加到路径。只要开始/停止脚本中没有其他需要root的项目,此方法就可能起作用。
—
Derek Pressnall 2012年
@DerekPressnall,谢谢,但是当我运行时,
—
汤姆(Tom)
/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
只允许执行此命令?
该错误是由于该用户没有管理员权限而导致的。
—
汤姆(Tom)