如何设置我要启动的进程的组 (gid)?

如何设置我要启动的进程的组 (gid)?

我正在将 Debian init.d 脚本移植到 CentOS。在 Debian 脚本中,它使用 start-stop-daemon 来启动进程。该脚本使用 start-stop-daemon 的 --group 标志在启动守护进程时更改为不同的组 ID。

如何在 CentOS 上的 init 脚本中设置守护进程的 group-id?

答案1

如果 CentOS 没有提供任何更好的方法(这会让我有点惊讶),您可以依靠su鲜为人知的对应方法sg

sg foogroup -c 'exec foodaemon --bar'

答案2

CentOS 初始化脚本使用 /etc/init.d/functions,它声明了大多数其他初始化脚本使用的“守护进程”函数。但守护进程不接受任何组标志。

它最终调用:

$nice runuser -s /bin/bash - $user -c "$corelimit >/dev/null 2>&1 ; $*"

快速/sbin/runuser --help显示 runuser 接受指定组的标志,因此请尝试:

runuser -g $group; daemon ...

答案3

设定值: "setuidgid 在指定帐户的 uid 和 gid 下运行另一个程序。"

它是 daemontools 的一部分,但是,由于 DJB 奇怪的许可证,它可能在 CentOS 存储库中不可用。所以你可能需要找到一个 RPM(例如这里)或从源代码构建。

答案4

很老的问题,但我想我可以补充几分:

您可以简单地使用守护进程调用 /sbin/runuser 的本质上有缺陷的方式进行支付,并将您的用户名设置为如下所示:

echo -n "Starting ${prog}"
daemon --user='nobody -Gnogroup' $exec &
echo

它会起作用的。

它特别脏,但允许您搭载守护进程,而不必直接调用 runuser(或两次)。

相关内容