作为另一个用户/组启动进程(在 init.d 脚本中)

10 process init privileges

我正在编辑一个 init.d 脚本。init.d 脚本运行一个实用程序脚本,然后运行一个进程。从任一 bash 脚本中,我如何让它以特定用户和组的身份启动主进程?

ckk*_*ckk 12

最简单的方法是使用 su(1) 命令,它有一个选项允许您通过用户的 shell 运行命令,例如:

su foo -c ls
Run Code Online (Sandbox Code Playgroud)

这将切换到用户foo并运行 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
Run Code Online (Sandbox Code Playgroud)

  • @acidzombie24 `su` 接受一个参数,它是一个 shell 命令。需要写`su www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"'`,并确保导出`MONOSERVER`和`WEBAPPS`由父壳。(注意:不要做 `su ... -c "$MONOSERVER ..."` 因为如果任何变量包含 shell 特殊字符,这将失败。)如果你有一个专用的守护进程启动器 [例如 `start-stop-daemon` ](http://unix.stackexchange.com/questions/22107/launch-process-as-another-user-group-in-init-d-script/22109#22109),使用它。 (2认同)