我有一個C++程序,它將以root身份運行某些特定的命令。這是需要的原因是因爲在Node.js下運行的另一個程序需要執行諸如設置系統時間,設置時區等需要root特權才能完成的事情。在使用setuid命令後,我正在使用C++中的函數execve以root權限進行系統調用。我特別選擇execve命令,因爲我想隔離環境,所以我不創建環境變量漏洞。有沒有辦法找出可執行文件需要/使用哪些環境變量?
setuid(0);
execve(acExeName, pArgsForExec2, pcEnv);
我想要做的是準確找出pcEnv,它是程序需要執行的程序的環境變量列表。例如,如果我想運行time-admin工具,就好像我是從控制檯運行它一樣,如何才能找出它需要的環境變量。我知道我可以用命令printenv打印環境變量,但是這給了我所有的人。我很確定我不需要它們,並希望儘可能小。
我知道我可以全部使用它們,然後慢慢評論每一個,看看它是否繼續工作,但我真的寧願不去那麼遠。
任何人都有一個聰明的方法來找出哪些環境變量被程序使用?我應該添加我在Ubuntu 12.04 LTS安裝中執行此操作。
感謝您的任何幫助。
除非程序正在做一些有趣的事情,ltrace應該是有用的 – PlasmaHH
@PlasmaHH有趣的你的意思是像使用非標準的但通常實現的第三個參數'main()','char * envp []'?因爲在那種情況下,沒有問作者,閱讀文檔,或者看到實際的來源,我認爲OP沒有一個槳就是一條小溪。 – WhozCraig
@WhozCraig:不過,我發現envptr在現代C語言和通用C++代碼中使用的頻率低於在較早的C代碼中使用的頻率。但是,所有的猜測都不會比閱讀精美的手冊更好。 – PlasmaHH