整理自
之前看《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。
打個比方來說,如果有這樣的乙個檔案:
-rwsr-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,...