以非 root 用户身份运行服务的推荐方法是什么?

以非 root 用户身份运行服务的推荐方法是什么?

我有一个简单的 init.d 脚本,用于启动和停止进程。我将 init.d 称为 root,但我希望它控制的进程以特定用户身份运行。

网上最常见的建议似乎是

su myuser -c "my_process args"

然而,这创建了第二个进程空间、新的外壳等,并且有些不优雅。

我更喜欢使用exec(),因为它取代了 shell,但这并不需要用户作为参数。这是我应该setuid()首先使用的情况吗?设置gid怎么样?有什么需要注意的问题吗?

或者,是否有特定于发行版的解决方案以不同用户身份运行 init.d ?我的环境是Centos 6.4。

答案1

取决于发行版,但基于 RHEL 的发行版使用它们源自的 Bash 函数,/etc/rc.d/init.d/functionsdaemon函数本身只是runuser命令的包装器。从我在源文件中可以看出,它在功能上与su大多数情况下相同,只是不经过 PAM(可能是为了避免在某些情况下出现先有鸡还是先有蛋的问题)。

这并不能真正回答你的反对意见,但服务就是这样做的。您想要的整洁和整体逻辑一致性是诸如此类的动机的一部分systemd

答案2

使用su someuser -c ...就是所需要的。对于初学者来说,setuid()是 shell 代码无法使用的系统调用。不要让这件事变得比需要的更困难。

相关内容