類Unix系統中的用戶的ID

    原帖地址:https://zh.wikipedia.org/wiki/用戶ID

    用戶ID(英語:user identifier,一般縮寫爲User ID或UID),全稱用戶標識符,在類UNIX系統中是內核用來辨識用戶的一個無符號整型數值,亦是UNIX文件系統與進程的必要組成部分之一。
    在不同的系統中,UID的值的範圍也有所不同,但一般來說UID都是由一個15位的整數表示,其範圍在0~32767之內,且有如下限制:
    1. 超級用戶的UID總爲0;
    2. 按傳統的做法,“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]。

發佈了50 篇原創文章 · 獲贊 27 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章