C語言setuid()函數:設置真實的用戶識別碼
頭文件:
#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.
C語言setreuid()函數:設置真實及有效的用戶識別碼
頭文件:
#include <unistd.h>
定義函數:
int setreuid(uid_t ruid, uid_t euid);
函數說明:setreuid()用來將參數ruid 設為目前進程的真實用戶識別碼, 將參數euid 設置為目前進程的有效用戶識別碼. 如果參數ruid 或euid 值為-1, 則對應的識別碼不會改變。
返回值:執行成功則返回0, 失敗則返回-1, 錯誤代碼存于errno.
C語言setfsuid()函數:設置文件系統的用戶識別碼
頭文件:
#include <unistd.h>
定義函數:
int setfsuid(uid_t fsuid);
函數說明:setfsuid()用來重新設置目前進程的文件系統的用戶識別碼. 一般情況下, 文件系統的用戶識別碼(fsuid)與有效的用戶識別碼(euid)是相同的. 如果是超級用戶調用此函數, 參數fsuid 可以為任何值, 否則參數fsuid 必須為real/effective/saved 的用戶識別碼之一.
返回值:執行成功則返回0, 失敗則返回-1, 錯誤代碼存于errno 附加說明此函數為 Linux 特有
錯誤代碼:
EPERM:權限不夠, 無法完成設置.
新聞熱點
疑難解答
圖片精選