分類: LINUX
摘自:http://blog.chinaunix.net/uid-28541347-id-4242246.html
綠色代表進程(進程的性質(zhì))橙色代表文件(文件的性質(zhì))。當(dāng)進程試圖打開文件時,內(nèi)核會進行如下權(quán)限測試:
0. 若進程的有效用戶ID是0(超級用戶),則允許訪問。
1. 若進程的有效用戶ID等于文件的所有者ID,那么進行文件所有者訪問權(quán)限的測試(與open的參數(shù)對比),對應(yīng)圖中的1。
2. 若進程的有效組ID或進程的附加組ID之一等于文件的組ID,則進行文件所屬組的權(quán)限測試,對應(yīng)圖中的2.
3. 測試文件的Other訪問權(quán)限。
注:如果第1步中進程有效用戶ID等于文件所有者ID,但相應(yīng)權(quán)限的測試不符合,則不會進入第2步的組測試。對于2,3步也同理。
下面看一下一個用戶執(zhí)行進程的過程:
(1) 每個用戶登錄后都對應(yīng)一個uid,一個gid,一組附加組id,如上圖紅色部分。
(2) 每個程序文件(黃色部分)和普通文件一樣擁有文件所有者id,文件所有組id,并具有相應(yīng)rwx權(quán)限。
(3) 用戶打開文件時進行圖1描述流程的x權(quán)限測試(只不過此時不是進程而是用戶)。
(4) 當(dāng)a.用戶是超級用戶或b.用戶id和文件所有者id相同且文件所有者具有x權(quán)限或c.用戶的gid和文件的所屬組id相同且文件所屬組具有x權(quán)限或d.文件的other具有x權(quán)限,則用戶可執(zhí)行此程序,產(chǎn)生進程(上圖綠色部分)。
(5) 用戶的uid變成進程的實際用戶id,用戶的gid變成進程的實際組id,用戶的附加組id變成進程的附加組id。
(6) 當(dāng)程序文件沒有設(shè)置”設(shè)置用戶id位(SUID)”和”設(shè)置組id(SGID)位”時進程的有效用戶id等于進程的實際用戶id,進程的有效組id等于進程的實際組id。
(7) 當(dāng)程序文件設(shè)置了”設(shè)置用戶id位(SUID)”時,進程的有效用戶id保存到進程“保存的設(shè)置用戶id”,之后進程的有效用戶id變?yōu)槌绦蛭募乃姓遡d。
(8) 當(dāng)程序文件設(shè)置了”設(shè)置組id(SGID)位”時,進程的有效用戶組id保存到進程“保存的設(shè)置用戶組id”,之后進程的有效用戶組id變?yōu)槌绦蛭募乃薪Mid。