天天看點

理清Linux中的各種使用者ID關系

作者:lvyilong316

理清Linux中的各種使用者ID關系

綠色代表程序(程序的性質)橙色代表檔案(檔案的性質)。當程序試圖打開檔案時,核心會進行如下權限測試:

0. 若程序的有效使用者ID是0(超級使用者),則允許通路。

1. 若程序的有效使用者ID等于檔案的所有者ID,那麼進行檔案所有者通路權限的測試(與open的參數對比),對應圖中的1。

2. 若程序的有效組ID或程序的附加組ID之一等于檔案的組ID,則進行檔案所屬組的權限測試,對應圖中的2.

3. 測試檔案的Other通路權限。

注:如果第1步中程序有效使用者ID等于檔案所有者ID,但相應權限的測試不符合,則不會進入第2步的組測試。對于2,3步也同理。

下面看一下一個使用者執行程序的過程:

理清Linux中的各種使用者ID關系

(1) 每個使用者登入後都對應一個uid,一個gid,一組附加組id,如上圖紅色部分。

(2) 每個程式檔案(黃色部分)和普通檔案一樣擁有檔案所有者id,檔案所有組id,并具有相應rwx權限。

(3) 使用者打開檔案時進行圖1描述流程的x權限測試(隻不過此時不是程序而是使用者)。

(4) 當a.使用者是超級使用者或b.使用者id和檔案所有者id相同且檔案所有者具有x權限或c.使用者的gid和檔案的所屬組id相同且檔案所屬組具有x權限或d.檔案的other具有x權限,則使用者可執行此程式,産生程序(上圖綠色部分)。

(5) 使用者的uid變成程序的實際使用者id,使用者的gid變成程序的實際組id,使用者的附加組id變成程序的附加組id。

(6) 當程式檔案沒有設定”設定使用者id位(SUID)”和”設定組id(SGID)位”時程序的有效使用者id等于程序的實際使用者id,程序的有效組id等于程序的實際組id。

(7) 當程式檔案設定了”設定使用者id位(SUID)”時,程序的有效使用者id儲存到程序“儲存的設定使用者id”,之後程序的有效使用者id變為程式檔案的所有者id。

(8) 當程式檔案設定了”設定組id(SGID)位”時,程序的有效使用者組id儲存到程序“儲存的設定使用者組id”,之後程序的有效使用者組id變為程式檔案的所有組id。

繼續閱讀