假设我想使用exec()和fork()从守护进程(以root身份运行)生成进程,并且我还想在使用seteuid()和setegid()生成进程之前模拟其他用户。如果我还想继承为该特定用户设置的环境变量,那么建议您这样做的最佳方法是什么?还有另一种不调用/ sbin / sh和/或sudo的方式吗?
想在Linux和Mac OS X上做到这一点!
谢谢!
答案 0 :(得分:2)
没有为“特定用户设置环境变量”这样的事情。变量不存储在某个列表中,它们由登录时运行的程序设置。您必须运行相同的脚本。所以只需exec
一个带有-l
(登录shell)的shell,让它运行(带-c
)所需的命令,然后再传递给exec
。
请注意,这可能仍然无法复制整个环境。一些变量(例如DISPLAY
)通常由以另一种方式运行的程序设置。
要获取最终子项的PID,请确保在使用exec
传递的命令中使用-c
:
# sh -l -c "exec sleep 50" &
[1] 30331
# ps -a
PID TTY TIME CMD
30331 pts/1 00:00:00 sleep