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

ire*_*ses 6 init-script services exec

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

网上最常见的建议似乎是做

su myuser -c "my_process args"
Run Code Online (Sandbox Code Playgroud)

但是,这会创建第二个进程空间、新 shell 等,并且有些不雅。

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

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

JRF*_*son 0

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