簡體   English   中英

setuid()之后如何恢復到原始狀態/用戶?

[英]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...

setuid表示以下內容:

希望暫時放棄root特權,采用非root用戶身份並隨后重新獲得root特權的set-user-ID-root程序不能使用setuid()。 您可以使用seteuid(2)完成此操作

這意味着您無法使用setuid()成為root用戶,因為您是非特權用戶。 您必須使用seteuid()才能成為root用戶。

嘗試使用此示例程序來使用seteuid並更改特權。

你不能。 根據設計,一旦放棄root特權,您將無法找回它

手冊頁說:

如果用戶是root或程序是set-user-ID-root,則必須格外小心。 setuid()函數檢查調用方的有效用戶ID,如果它是超級用戶,則所有與進程相關的用戶ID均設置為uid。 發生這種情況后,該程序將無法重新獲得root特權。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM