和每個進程相關聯的用戶id和組id:
實際用戶id
實際組id 我們實際上是誰
有效用戶id
有效組id
添加組id 用於文件存取許可權檢查
保存的set-user-id
保存的set-group-id 由exec函數保存
實際用戶id和實際組id標識我們究竟是誰。這兩個字段取自登錄操作系統的用戶。
有效用戶id和有效組id通常等於實際用戶id和實際組id,決定了我們的文件訪問權限。在文件方式字st_mode(可以由stat函數得到)設一個特殊標誌,其定義爲“當執行此文件時,進程的有效用戶id和有效組id設置爲執行文件的所有者用戶id和所有組id。在文件方式字中,這兩個特殊標誌位,分別是set-user-ID和set-group-ID.舉一個例子是passwd執行文件,需要修改paasswd文件,這個文件只有root用戶可以修改。那麼普通用戶修改自己密碼的時候,爲什麼會有權限修改這個文件的內容呢。原因就是passwd進程執行的時候,有效用戶id和有效組id設置爲passwd執行文件的所屬用戶id和所屬組id。
保存的set-user-id和set-group-id保存了有效用戶id和有效組id的副本。
一個進程在試圖open一個文件的時候,是根據進程的有效用戶id和有效組id進行權限的檢查。
1)若進程的有效用戶id是0(root),則允許存取
2)若進程的有效用戶id等於文件的所有者id,檢查相應的權限位
3)若進程的有效用戶組id等於文件的所有組id,檢查相應的權限位
4)檢查其他權限位