我有以下代碼片段。設置euid與posix_spawn
char *const parmList[] = {"sh", "-c", "whoami", NULL};
if(geteuid() == 0) {
seteuid(atoi(getenv("SUDO_UID")));
}
posix_spawn(&pid, "/bin/sh", NULL, NULL, parmList, environ);
從我的理解的posix_spawn
的默認行爲是:
如果未設置
POSIX_SPAWN_RESETIDS
標誌,子進程將繼承父進程的有效用戶ID。
然而,當我運行我的程序與sudo
,我仍然得到root
從posix_spawn
輸出。我如何擁有它,所以posix_spawn將以原始用戶身份運行?有一個更好的方法嗎?
任何原因,你只能讓指針指向文字'const'實現這一點,但不是他們指向的風向標? – Olaf
@Olaf不,我會編輯它。這並沒有改變根本問題。 – twodayslate
你可以在你的命令上運行'strace -f'並檢查shell是否重置了euid?許多炮彈,如果他們看到ruid!= euid,會重置euid以匹配。 –