setuid() - Unix, Linux系統呼叫 - 技術教學
Tutorials Point


  Unix入門
  Unix Shell程式設計
  高階Unix
  Unix有用參考
  Unix有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考資料     討論論壇     關於TP  

setuid() - Unix, Linux系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

setuid - 設定使用者身份

概要

#include <sys/types.h>
#include <unistd.h>

int setuid(uid_t uid);

描述

setuid() 設定當前程序的有效使用者ID。如果呼叫者的有效UID是root,則也會設定真實UID和已儲存的set-user-ID。

在Linux下,setuid() 的實現方式與具有_POSIX_SAVED_IDS 特性的POSIX版本相同。這允許set-user-ID(非root)程式放棄所有使用者許可權,執行一些非特權工作,然後以安全的方式重新啟用原始有效使用者ID。

如果使用者是root或程式是set-user-ID-root,則必須特別小心。setuid() 函式會檢查呼叫者的有效使用者ID,如果它是超級使用者,則所有程序相關的使用者ID都將設定為uid。發生這種情況後,程式將無法恢復root許可權。

因此,希望暫時放棄root許可權,假定非root使用者的身份,然後恢復root許可權的set-user-ID-root程式不能使用setuid()。可以使用(非POSIX,BSD)呼叫seteuid()來實現此目的。

返回值

成功時,返回零。出錯時,返回-1,並適當地設定errno

錯誤

標籤描述
EAGAIN uid與當前uid不匹配,並且uid使程序超過其NPROC rlimit。
EPERM 使用者沒有許可權(Linux:沒有CAP_SETUID能力),並且uid與呼叫程序的真實UID或已儲存的set-user-ID不匹配。

符合標準

SVr4,POSIX.1-2001。與設定所有真實、已儲存和有效使用者ID的4.4BSD呼叫不完全相容。

Linux特定說明

Linux具有檔案系統使用者ID的概念,通常等於有效使用者ID。setuid()呼叫還會設定當前程序的檔案系統使用者ID。參見setfsuid(2)。

如果uid與舊的有效uid不同,則程序將被禁止留下核心轉儲。

參見



previous next Printer Friendly

廣告


  

廣告



廣告
© . All rights reserved.