實際使用者ID 有效使用者ID 設定使用者ID的區別

2021-06-06 11:05:21 字數 2194 閱讀 8040

整理自

之前看《unix環境高階程式設計》沒明白書上說的,後來google搜到了這個帖子,讀了發現很通俗易懂,記錄一下,方便下次再讀。

乙個程序的 real user id 是指執行此程序的使用者角色的 id。

乙個程序的 effective user id 是指此程序目前實際有效的使用者 id(也就是許可權的大小),effective user id 主要用來校驗許可權時使用,比如開啟檔案、建立檔案、修改檔案、kill 別的程序,等等。

如果乙個程序是以 root 身份來執行的,那麼上面這兩個 id 可以用 setuid/seteuid 隨便修改,想怎麼改就怎麼改,改來改去都可以。

但是如果乙個程序是以普通使用者身份來執行的,那麼上面這兩個 id 一般來說是相同的,並且也不能隨便修改。只有一種情況例外:此程序的可執行檔案的許可權標記中,設定了「設定使用者 id」位!

在命令列中,設定乙個可執行檔案的「設定使用者 id」位的最簡單的方法,就是用

chmod +s /path/to/file

複製**

這個命令。

一旦用了這個命令之後,再執行這個檔案,

那麼生成的程序的 effective user id 就變成了這個可執行檔案的 owner user id(屬主使用者 id),

而 real user id 仍然是啟動這個程式時所用的使用者的 id。

打個比方來說,如果有這樣的乙個檔案:

-rw

sr-sr-x 1 susesuse susesuse 7902 2006-08-31 13:22 tuid

注意這個檔案已經用 chmod +s 命令設定過「設定使用者 id」位了。

然後我用 flw 這個使用者來執行它,那麼生成的程序它的 real user id 就是 flw(因為我是用 flw 執行的),但是 effective user id 就變成了 susesuse(因為這個可執行檔案被設定了「設定使用者 id」位,並且它的 owner user id 是 susesuse)。

這時,這個程序實際上就有兩個使用者許可權了。只不過目前生效的是 susesuse,因此它目前能夠且只能夠操作 susesuse 使用者的檔案,如果現在我又想要操作 flw 使用者的檔案怎麼辦?

很簡單,只需要 seteuid( getuid() ) 就可以了。執行完這句之後,effective user id 就變成和 real user id 一樣了,都變成 flw 了。

可是如果過了一會兒我又想要變回來怎麼辦?因為 effective user id 和 real user id 此時都變成了 flw 了,所以作業系統必須得有乙個地方儲存住原來的「設定使用者 id」(也就是可執行檔案的 owner user id),不然等你再想要 seteuid 的時候,作業系統就不知道你有沒有那個權利了。(總不能再去訪問一次檔案系統吧?那樣也太沒有效率了)

作業系統為了能夠在設定了 seteuid 之後,再次設定回來,所以特地將原來的「設定使用者 id」儲存下來了,這個儲存下來的設定使用者 id 自然就叫做「儲存的設定使用者 id」。

下面看一段我寫的例子程式:

flw@sleeper:~$ whoami

flwflw@sleeper:~$ cat tuid.c

# include

# include

# include

int main( void )

flw@sleeper:~$ su root -c "cc -o tuid tuid.c; chmod +s tuid; ls -al tuid"

password:

-rwsr-sr-x 1 root root 7902 2006-08-31 13:55 tuid

flw@sleeper:~$ ./tuid

effective uid: [root]

-rw-r--r-- 1 root root 0 2006-08-31 13:55 /tmp/foo.txt

set euid to `flw'..

effective uid: [flw]

-rw-r--r-- 1 flw root 0 2006-08-31 13:55 /tmp/foo.txt

set euid to `root'..

effective uid: [root]

-rw-r--r-- 1 root root 0 2006-08-31 13:55 /tmp/foo.txt

flw@sleeper:~$

複製**

有效使用者ID 實際使用者ID

實際使用者id,有效使用者id和設定使用者id 看unix相關的書時經常能遇到這幾個概念,但一直沒有好好去理清這幾個概念,以致對這幾個概念一直一知半解。今天好好區分了一下這幾個概念並總結如下。說白了這幾個uid引出都是為了系統的許可權管理。下面分別用ruid,euid,suid來表示實際使用者id,...

實際使用者ID,有效使用者ID及設定使用者ID

原文 看unix相關的書時經常能遇到這幾個概念,但一直沒有好好去理清這幾個概念,以致對這幾個概念一直一知半解。今天好好區分了一下這幾個概念並總結如下。說白了這幾個uid引出都是為了系統的許可權管理。下面分別用ruid,euid,suid來表示實際使用者id,有效使用者id,設定使用者id。另外使用者...

實際使用者ID,有效使用者ID及設定使用者ID

實際使用者id,有效使用者id和設定使用者id 看unix相關的書時經常能遇到這幾個概念,但一直沒有好好去理清這幾個概念,以致對這幾個概念一直一知半解。今天好好區分了一下這幾個概念並總結如下。說白了這幾個uid引出都是為了系統的許可權管理。下面分別用ruid,euid,suid來表示實際使用者id,...