我正在编辑 init.d 脚本。 init.d 脚本运行一个实用程序脚本,然后该脚本运行一个进程。从任一 bash 脚本中,我如何让它以特定用户和组身份启动主进程?
答案1
最简单的方法是使用 su(1) 命令,它有一个选项允许您通过用户的 shell 运行命令,例如:
su foo -c ls
这将切换到用户富并运行 ls 命令。如果您要使用的用户没有有效的 shell(即不在 /etc/shells 中,如 /bin/false 或 /sbin/nologin),您还必须在命令行上指定 shell。输出示例:
# su nobody -s /bin/bash -c id
uid=99(nobody) gid=99(nobody) groups=99(nobody) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
答案2
如果start-stop-daemon
您的系统上可用,您可能应该使用它并查看它的选项(尤其-u
是-g
在这种情况下)。
su
(否则,您可以使用和的组合sg
。)
更新:这是取自某个脚本的示例/etc/init.d/mpd
(使用start-stop-daemon
):
启动命令:
echo "Starting Music Player Daemon" start-stop-daemon --start --quiet --background --exec /usr/bin/mpd \ --pidfile /var/run/mpd.pid --make-pidfile \ -- --no-daemon /etc/mpd.conf 2>/dev/null
接下来的一切
--
都是程序本身的论证/usr/bin/mpd
。 (守护程序过程由 start-stop-daemon 脚本负责,因此mpd
要求不要用 来关心它--nodaemon
。)停止命令:
echo "Stopping Music Player Daemon" start-stop-daemon --stop --exec /usr/bin/mpd --pidfile /var/run/mpd.pid
如果mpd
不自行删除权限,则需要向命令添加(例如)-u mpd
,-g mpd
选项start-stop-daemon
。