[英]how to get back to original status/user after setuid()?
我有一個以root用戶身份運行的程序,在執行過程中,該程序將作為不同的用戶來做一些事情,因此我想使用一系列setuid()。 但是,我發現在setuid(user1)之后,我成為了user1,因此沒有權限執行setuid(user2)。
如何才能回到root用戶,以便可以執行setuid(user2)?
謝謝。
你不能,讀那個男人: setuid
但是您可以嘗試對文件進行chmod修改,然后可以調用setuid(0)作為第一個uid返回
使用fork
,讓子setuid
並執行第二個用戶需要執行的任何操作。 根父級將等待子級,並在子級完成執行后繼續。
childpid = fork();
if (childpid < 0) {
// fork failed
}
if (childpid == 0) {
// Child
setuid(user1);
prepareUser1(); // Do some stuff as user1.
exit(0); // Done as user1
} else {
// parent: wait for child to finish
waitpid(childpid);
}
// Parent continues as root...
你不能。 根據設計,一旦放棄root特權,您將無法找回它
手冊頁說:
如果用戶是root或程序是set-user-ID-root,則必須格外小心。 setuid()函數檢查調用方的有效用戶ID,如果它是超級用戶,則所有與進程相關的用戶ID均設置為uid。 發生這種情況后,該程序將無法重新獲得root特權。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.