對於Linux的文件權限,除了常用的【讀r 寫w 執行x】外還有強制位與冒險位的特殊權限。
=============================================文章一:
----------------------------
強制位:uid,gid;主要用於文件及目錄
冒險位:sticky 只用於目錄,多數是共享目錄.
目錄也是文件,嚴格意思上講文件應該有四組權限(12位)
強制/冒險 | 宿主 | 組 | 其它
===========================================
sst rwx rwx rwx
=============================================文章二:
目錄也是一種文件 []
目錄上的讀寫執行權限與普通文件有所不同:
讀:用戶可以讀取目錄內的文件
寫:單獨使用沒有作用。與執行權限連用可以在目錄內添加與刪除文件。
執行:用戶可以進入目錄,調用目錄內的資料
*** 除了讀寫執行權限以外,ext2,ext3文件系統還支持強制位(setuid 和setgid)與冒險位(sticky)的特別權限。
*** 針對u,g,o,分別有set uid,set gid,及sticky。
*** 強制位與冒險位添加在執行權限的位置上。
如果該位置上原已有執行權限。則強制位與冒險位以小寫字母的方式表示,否則,以大寫字母表示。
*** set uid與set gid在u和g的x位置上各采用一個s,sticky使用一個t。
***
*** 默認情況下,用戶建立的文件屬於用戶當前所在的組。
*** 目錄上設置了setgid,表示在此目錄中,任何人建立的文件,都會屬於目錄所屬的組。
***
*** 默認情況下,如果一個目錄上有w和x權限,則任何人可以在此目錄中建立與刪除文件。
*** 一旦目錄上設置了冒險位,則表示在此目錄中,只有文件的擁有者、目錄的擁有者與系統管理員可以刪除文件。
*** 在可執行文件上,用戶可以添加set uid和set gid。
*** 默認情況下,用戶執行一個指令,會以該用戶的身份來運行進程。
*** 指令文件上的強制位,可以讓用戶執行的指令,以指令文件的擁有者或所屬組的身份運行進程。
*** 用戶可以用chmod指令來為文件設置強制位與冒險位。
– set uid:chmod u+s 文件名
– set gid:chmod g+s 文件名
– sticky:chmod o+t 文件名
*** 強制位與冒險位也可以通過一個數字加和,放在讀寫執行的三位數字前來指定。
– 4(set uid)
– 2(set gid)
– 1(sticky)
設置s u i d / g u i d
命令 結果 含義
chmod 4755 -rwsr-xr-x suid、文件屬主具有讀、寫和執行的權限,所有其他用戶具有讀和執行的權限
chmod 6711 -rws--s--x suid、sgid、文件屬主具有讀、寫和執行的權限,所有其他用戶具有執行的權限
chmod 4511 -rwS--x—x suid、文件屬主具有讀、寫的權限,所有其他用戶具有執行的權限
上面的表中有具有這樣權限的文件:rwS --x -- x,其中S為大寫。它表示相應的執行權限位並未被設置,這是一種沒有什麼用處的suid設置可以忽略它的存在。
注意,chmod命令不進行必要的完整性檢查,可以給某一個沒用的文件賦予任何權限,但 chmod 命令並不會對所設置的權限組合做什麼檢查。因此,不要看到一個文件具有執行權限,就認為它一定是一個程序或腳本。
關於Linux下粘貼位(sticky位)
要刪除一個文件,你不一定要有這個文件的寫權限,但你一定要有這個文件的上級目錄的寫權限。也就是說,你即使沒有一個文件的寫權限,但你有這個文件的上級目錄的寫權限,你也可以把這個文件給刪除,而如果沒有一個目錄的寫權限,也就不能在這個目錄下創建文件。
如何才能使一個目錄既可以讓任何用戶寫入文件,又不讓用戶刪除這個目錄下他人的文件,sticky就是能起到這個作用。stciky一般只用在目錄上,用在文件上起不到什麼作用。
在一個目錄上設了sticky位後,(如/home,權限為1777)所有的用戶都可以在這個目錄下創建文件,但只能刪除自己創建的文件(root除外),這就對所有用戶能寫的目錄下的用戶文件啟到了保護的作用。