我有一个 C++ 程序,它将以 root 身份运行某些非常特定的命令。需要这样做的原因是因为在 Node.js 下运行的另一个程序需要执行设置系统时间、设置时区等需要 root 权限才能完成的事情。在使用 setuid 命令后,我正在使用 C++ 中的函数 execve 以 root 权限进行系统调用。我特地选择了 execve 命令,因为我想隔离环境,所以我不会创建环境变量漏洞。
setuid(0);
execve(acExeName, pArgsForExec2, pcEnv);
我想要做的是准确找出 pcEnv ,它是我的程序需要的程序执行的环境变量列表。例如,如果我想像从控制台运行它一样运行工具 time-admin,我如何才能确定它需要哪些环境变量。我知道我可以使用命令 printenv 打印出环境变量,但这给了我所有这些。我很确定我不需要它们,并且想要尽可能小的子集。
我知道我可以全部使用它们,然后慢慢评论每一个,看看它是否继续工作,但我真的不想走那么远。
任何人都有一个聪明的方法来弄清楚程序使用了哪些环境变量?我应该补充一下,我是在 Ubuntu 12.04 LTS 安装上执行此操作的。
谢谢你的帮助。