用戶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環境進階編程》, 理查德·史蒂文斯 著