與一個進程相關聯的ID有6個或更多,它們如表4-4所示:
表4-4 與每個進程相關聯的用戶ID和組ID
實際用戶ID 我們實際上是誰 實際組ID |
有效用戶ID 用于文件訪問權限檢查 有效組ID 附加組ID |
保存的設置用戶ID 由exec函數保存 保存的設置組ID |
在POSIX.1 2001版中,需要這些保存的ID。在早期POSIX版本中,它們是可選的。一個應用程序在編譯時可測試常量_POSIX_SAVED_IDS,或在運行時從參數_SC_SAVED_IDS調用函數sysconf,以判斷此實現是否支持這種特征。
通常,有效用戶ID等于實際用戶ID,有效組ID等于實際組ID。
每個文件都有一個所有者和組所有者,所有者由stat結構中的st_uid成員表示,組所有者則由st_gid成員表示。
當執行一個程序文件時,進程的有效用戶ID通常就是實際用戶ID,有效組ID通常就是實際組ID。但是可以在文件模式字(st_mode)中設置一個特征標志,其含義是“當執行此文件時,將進程的有效用戶ID設置為文件所有者的用戶ID(st_uid)”。與此相類似,在文件模式字中可以設置另一位,它使得將執行此文件的進程的有效組ID設置為文件的組所有者ID(st_gid)。在文件模式字中的這兩位被稱為設置用戶ID(set-user-ID)位和設置組ID(set-group-ID)位。
例如,若文件所有者是超級用戶,而且設置了該文件的設置用戶ID位,然后當該程序由一個進程執行時,則該進程具有超級用戶特權。不管執行此文件的進程的實際用戶ID是什么,都進行這種處理。例如,UNIX程序passwd(1)允許任一用戶改變其口令,該程序是一個設置用戶ID程序。因為該程序應能將用戶的新口令寫入口令文件(一般是/etc/passwd或/etc/shadow)中,而只有超級用戶才具有對該文件的寫權限,所有需要使用設置用戶ID特征。因為運行設置用戶ID程序的進程通常得到額外的權限,所以編寫這種程序時要特別謹慎。
設置用戶ID及設置組ID位都包含在st_mode值中。這兩位可用常量S_ISUID和S_ISGID測試。
本篇博文內容摘自《UNIX環境高級編程》(第二版),僅作個人學習記錄所用。關于本書可參考:http://www.apuebook.com/。
新聞熱點
疑難解答