setuid()與seteuid()的區別

期待一片自己的藍天發表於2014-08-30
標頭檔案:#include <unistd.h>

定義函式:int setuid(uid_t uid);

函式說明:
setuid()用來重新設定執行目前程式的使用者識別碼. 不過, 要讓此函式有作用, 其有效的使用者識別碼必須為0(root). 在Linux 下, 當root 使用setuid()來變換成其他使用者識別碼時, root 許可權會被拋棄, 完全轉換成該使用者身份, 也就是說, 該程式往後將不再具有可setuid()的權利, 如果只是向暫時拋棄root 許可權, 稍後想重新取回許可權, 則必須使用seteuid().


返回值:執行成功則返回0, 失敗則返回-1, 錯誤程式碼存於errno.

附加說明:一般在編寫具 setuid root 的程式時, 為減少此類程式帶來的系統安全風險, 在使用完root 許可權後建議馬上執行setuid(getuid());來拋棄root 許可權. 此外, 程式uid 和euid 不一致時Linux 系統將不會產生core dump.