用戶ID(英語:user identifier,一般縮寫為User IDUID),全稱用戶標識符,在類UNIX系統中是內核用來辨識用戶的一個無符號整型數值,亦是UNIX文件系統進程的必要組成部分之一。

數值範圍

編輯

在不同的系統中,UID的值的範圍也有所不同,但一般來說UID都是由一個15位的整數表示,其範圍在0~32767之內,且有如下限制:

  • 按傳統的做法,「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

編輯

有效用戶IDEffective UID,即EUID)與有效用戶組IDEffective Group ID,即EGID)在創建與訪問文件的時候發揮作用;具體來說,創建文件時,系統內核將根據創建文件的進程的EUID與EGID設定文件的所有者/組屬性,而在訪問文件時,內核亦根據訪問進程的EUID與EGID決定其能否訪問文件。

真實用戶ID

編輯

真實用戶IDReal UID,即RUID)與真實用戶組IDReal GID,即RGID)用於辨識進程的真正所有者,且會影響到進程發送信號的權限。沒有超級用戶權限的進程僅在其RUID與目標進程的RUID相匹配時才能向目標進程發送信號,例如在父子進程間,子進程父進程處繼承了認證信息,使得父子進程間可以互相發送信號。

暫存用戶ID

編輯

暫存用戶IDSaved UID,即SUID)於以提升權限運行的進程暫時需要做一些不需特權英語Privilege (computing)的操作時使用,這種情況下進程會暫時將自己的有效用戶ID從特權用戶(常為root)對應的UID變為某個非特權用戶對應的UID,而後將原有的特權用戶UID複製為SUID暫存;之後當進程完成不需特權的操作後,進程使用SUID的值重置EUID以重新獲得特權。在這裡需要說明的是,無特權進程的EUID值只能設為與RUID、SUID與EUID(也即不改變)之一相同的值。

文件系統用戶ID

編輯

文件系統用戶IDFile 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. ^ 1.0 1.1 DebianHelp.co.uk. Usernames and User IDs in Debian Linux. [2011-12-22]. (原始內容存檔於2021-01-10). 
  2. ^ Red Hat Documents. Red Hat Enterprise Linux-Specific Information. [2011-12-22]. (原始內容存檔於2012-07-07). 
  3. ^ 3.0 3.1 UnixTutorial.org. How To Find Out User ID in Unix. [2011-12-22]. (原始內容存檔於2011-12-24). 

來源

編輯

外部連結

編輯

參見

編輯