使用者ID
使用者ID(英語:user identifier,一般縮寫為User ID或UID),全稱使用者識別碼,在類UNIX系統中是核心用來辨識使用者的一個無符號整型數值,亦是UNIX檔案系統與行程的必要組成部分之一。
數值範圍
在不同的系統中,UID的值的範圍也有所不同,但一般來說UID都是由一個15位的整數表示,其範圍在0~32767之內,且有如下限制:
- 超級使用者的UID總為0;
- 按傳統的做法,「nobody」(類UNIX系統的一種特殊帳戶)與超級使用者相反,總占有數值最大的PID,即32767;相對應的,現今的系統為nobody分配的UID則在系統保留範圍(1~100)或是65530-65535的範圍內[1]。
- 數值於1~100內的UID約定預留給系統使用,有些手冊則推薦在此基礎上再預留101~499(如RHEL[2])甚至是101~999(如Debian[1])的UID以作備用;而相對應的,在Linux中用useradd命令建立第一個使用者時,預設為之分配的UID則為1000。
除此之外,有些特殊的系統也支援16位元的UID,因而UID的數目可以擴充到65536個;現代系統支援32位元的UID,這也使UID數目進一步擴充到4,294,967,296個成為可能。
分類
有效使用者ID
有效使用者ID(Effective UID,即EUID)與有效使用者群組ID(Effective Group ID,即EGID)在建立與訪問檔案的時候發揮作用;具體來說,建立檔案時,系統核心將根據建立檔案的行程的EUID與EGID設定檔案的所有者/組屬性,而在訪問檔案時,核心亦根據訪問行程的EUID與EGID決定其能否訪問檔案。
真實使用者ID
真實使用者ID(Real UID,即RUID)與真實使用者群組ID(Real GID,即RGID)用於辨識行程的真正所有者,且會影響到行程傳送訊號的權限。沒有超級使用者權限的行程僅在其RUID與目標行程的RUID相匹配時才能向目標行程傳送訊號,例如在父子行程間,子行程從父行程處繼承了認證資訊,使得父子行程間可以互相傳送訊號。
暫存使用者ID
暫存使用者ID(Saved UID,即SUID)於以提升權限執行的行程暫時需要做一些不需特權的操作時使用,這種情況下行程會暫時將自己的有效使用者ID從特權使用者(常為root)對應的UID變為某個非特權使用者對應的UID,而後將原有的特權使用者UID複製為SUID暫存;之後當行程完成不需特權的操作後,行程使用SUID的值重設EUID以重新獲得特權。在這裡需要說明的是,無特權行程的EUID值只能設為與RUID、SUID與EUID(也即不改變)之一相同的值。
檔案系統使用者ID
檔案系統使用者ID(File System UID,即FSUID)在Linux中使用,且只用於對檔案系統的存取權限控制,在沒有明確設定的情況下與EUID相同(若FSUID為root的UID,則SUID、RUID與EUID必至少有一亦為root的UID),且EUID改變也會影響到FSUID。設立FSUID是為了允許程式(如NFS伺服器)在不需取得向給定UID帳戶傳送訊號的情況下以給定UID的權限來限定自己的檔案系統權限。
雜項
- UID的數值與使用者帳戶的對應關係存放於/etc/passwd中[3]。用於存放密碼的/etc/shadow以及網路資訊服務也以UID的數值標識使用者,但現在Linux系統下的shadow檔案已經改用帳戶名來標識使用者。
- 在遵循POSIX的環境中,id這一命令可以給出當前使用者的使用者名稱、所屬組及對應的UID、GID的值[3]。
參考文獻
參照
- ^ 1.0 1.1 DebianHelp.co.uk. Usernames and User IDs in Debian Linux. [2011-12-22]. (原始內容存檔於2021-01-10).
- ^ Red Hat Documents. Red Hat Enterprise Linux-Specific Information. [2011-12-22]. (原始內容存檔於2012-07-07).
- ^ 3.0 3.1 UnixTutorial.org. How To Find Out User ID in Unix. [2011-12-22]. (原始內容存檔於2011-12-24).
來源
- 《UNIX環境進階編程》, 理察·史蒂文斯 著