![服务命令和非root用户](https://linux22.com/image/3963/%E6%9C%8D%E5%8A%A1%E5%91%BD%E4%BB%A4%E5%92%8C%E9%9D%9Eroot%E7%94%A8%E6%88%B7.png)
在我们主要客户的 Linux 服务器上,我们的 bash 脚本在 root 下运行多年。现在出于安全原因我们想改变这一点。
我们的一些脚本是由“service”命令触发的,例如“service filescontrol start”。
我们客户的主要管理员也希望这些服务触发脚本在普通用户下运行。
但“service”命令的概念不是与root用户绑定的吗?
答案1
service
是一个像任何其他过程一样的过程。大多数时候,它是/sbin/service
。由于我们现在有许多“init”管理器(RC-Scripts、upstart、systemd、svcadm...),每个管理器都有自己的专长,因此使用service
来管理启动脚本是一个好点。
您需要进行的修改绑定到底层系统。
例如,在 init-rc 系统(最常见的)上调用脚本/etc/init.d/crond
或调用service crond
是相同的:
$ service crond status
crond (pid 1837) is running...
$ /etc/init.d/crond status
crond (pid 1837) is running...
但对于 systemd,问题要棘手得多,因为所有内容都是由二进制“systemd”管理的。
所以,如果你不想管理很多系统和异常,你可以考虑使用sudo
.否则,您可以以用户 lambda 身份启动脚本,或使用“set-uid”脚本。