
雖然通??吹降陌诉M(jìn)制權(quán)限掩碼都是用三位數(shù)字表示的,但是,確切地說,從技術(shù)層面上來看, 它是用四位數(shù)字來表示的。為什么呢?因為,除了讀取、寫入和執(zhí)行權(quán)限之外,還有三個較少用到的權(quán)限設(shè)置,它們在第一位表達(dá)。在前面掩碼表達(dá)時,把這一位寫成0,如果要設(shè)置,就要寫成4,2或1。
如果用文字表示它們,就分別是:setuid,setgid,sticky,順序?qū)?yīng)于4,2,1。
一、setuid
當(dāng)把它應(yīng)用到一個可執(zhí)行文件時,有效用戶ID將從實際用戶ID (實際運行該程序的用戶)設(shè)置成該程序所有者的ID。
大多數(shù)情況下,該權(quán)限設(shè)置通常應(yīng)用于一些由超級用戶所擁有的程序。當(dāng)普通用戶運行一個具有setuid root(已設(shè)置setuid位,由root用戶所有)屬性的程序時,該程序?qū)⒁猿売脩舻臋?quán)限來執(zhí)行。這使得該程序可以訪問一些普通用戶通常禁止訪問的文件和目錄。很明顯,這會帶來安全方面的問題,因此允許設(shè)置setuid位的程序個數(shù)必須控制在絕對小的范圍內(nèi)。
二、setgid
類似于setuid,它會把有效組ID從該用戶的實際組ID 更改為該文件所有者的組ID。
如果對一個目錄設(shè)置setgid位,那么在該目錄下新創(chuàng)建的文件將由該目錄所在組所有,而不是由文件創(chuàng)建者所在組所有。當(dāng)一個公共組下的成員需要訪問共享目錄下的所有文件時,設(shè)置setgid位將很有用,并不需要關(guān)注文件所有者所在的有效組。
三、sticky
它是從傳統(tǒng)UNIX中繼承下來的,可以標(biāo)記一個可執(zhí)行文件為“不可交換的”。
在Linux中,會忽略文件的sticky位,但是如果對一個目錄設(shè)置sticky位,那么將能阻止用戶刪除或者重命名文件,除非用戶是這個目錄的所有者、文件所有者或者是超級用戶。它常用來控制對共享目錄的訪問,比如/tmp。
四、實例
首先,授予程序setuid權(quán)限:
chmod u+s 程序名
(去掉該權(quán)限的命令相似,但選項為u-s)
下—步,授予目錄setgid權(quán)限:
chmod g+s 目錄
(去掉該權(quán)限的命令相似,但選項為g-s)
最后,授予目錄sticky位權(quán)限:
chmod +t 目錄
(去掉該權(quán)限的命令相似,但選項為-t)
使用Is命令可以查看這些特殊權(quán)限的設(shè)置結(jié)果。
首先,設(shè)置了 setuid位的程序:
-rwsr-xr-x
具有setgid屬性的目錄:
drwxrwsr-x
設(shè)置了 sticky位的目錄:
drwxrwxrwt