與用戶ID有關的一些知識總結

對《unix高級環境編程》書裏面提到的關於用戶ID的內容進行了一下總結,同時在文章後面畫了一個圖,便於自己記憶。

1、與每個進程相關聯的用戶ID和組ID

 

實際用戶ID

實際組ID

我們實際上是誰

有效用戶ID

有效組ID

附加組ID

用於文件訪問權限檢查

保存的設置用戶ID

保存的設置組ID

由exec函數保存

 

(1)實際用戶ID和實際組ID標識我們究竟是誰。這兩個字段在登錄時取自口令文件中的登錄項。

(2)有效用戶ID,有效組ID以及附加組ID決定了我們的文件訪問權限。

(3)保存的設置用戶ID和保存的設置組ID在執行一個程序時包含了有效用戶ID和有效組ID的副本。

 

2、   口令文件/etc/passwd的pw_uid和pw_gid字段,這兩個值是系統管理員在確定一個用戶的登錄名的同時確定的,用戶不能更改其用戶ID,通過每個用戶有一個唯一的用戶ID。組ID的設立允許同一個組內的成員之間共享資源。

root用戶的實際用戶ID和實際組ID是0,非系統用戶的ID從500開始

 

3、附加組ID:附加組ID是指一個用戶屬於的另外的組

 

4、文件訪問權限:進程每次打開、創建或刪除一個文件時,內核就進行文件訪問權限測試,而這種測試可能涉及文件的所有者(st_uid和st_gid)、進程的有效ID(有效用戶ID和有效組ID)以及進程的附加組ID(若支持的話)。兩個所有者ID是文件的性質,而兩個有效ID和附加組ID則是進程的性質。內核進行測試的步驟如下:依次查看

進程的有效用戶ID是0(超級用戶)->進程的有效用戶ID等於文件的所有者ID(進程擁有此文件)->進程的有效組ID或進程的附加組ID之一等於文件的組ID->其他用戶適當的訪問權限位被設置

新文件的用戶ID設置爲進程的有效用戶ID。組ID分兩種:

(1)      新文件的組ID可以是進程的有效組ID

(2)      新文件的組ID可以是它所在的目錄的組ID

 

5、獲取口令文件信息的函數:

struct passwd *getpwuid(uid)和函數structpasswd *getpwnam(const char*name)分別通過uid和用戶登錄名獲取口令文件的信息。其中,在鍵入登錄名時,getpwnam函數由login程序使用。

 

6、 更改用戶ID和組ID

當執行一個程序文件時,進程的有效用戶ID通常就是實際用戶ID,有效組ID通常是實際組ID。但是可以在文件模式字(st_mode)中設置一個特殊標誌,其含義是“當執行此文件時,將進程的的有效用戶ID設置爲文件所有者的用戶ID(st_uid)”。(passwd命令)可以調用函數setuid(uid)進行修改用戶ID

 

注意:如果一個進程正以特殊的權限(設置用戶ID或設置組ID)運行,它又想生出另一個進程執行另一個程序,則它應該直接使用fork和exec,而且在fork之後,exec之前要改回到普通權限。設置用戶ID或者設置組ID程序決不應調用system函數。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章