Linux中,文件或目錄除了rwx及隱藏權限外,還有一些特殊的權限,這些權限包括 SUID/SGID/SBIT,系統中就直接存在這樣的例子:安全
上例中,/tmp目錄自己的權限中能夠看到,不只僅是rwx權限,而是有了t權限;而/usr/bin/passwd文件,也不只僅有rwx權限,而是有了s權限。s、t就表明了不一樣的特殊權限。下面一一介紹這三種特殊權限。app
SUIDide
SUID即Set UID的簡寫。當s標誌出如今文件的owner權限組合中的x位時,好比上圖中passwd文件的權限(-rwsr-xr-x),此時就被稱爲SUID的特殊權限。那該權限是什麼意思呢?加密
舉例來講,Linux爲了提升本地用戶帳號信息的安全性,特別指定了/etc/shadow以加密密碼的方式來存儲用戶的帳戶信息,同時這個文件的默認權限是-r--------,限定只有root用戶才能「強制」儲存,其餘用戶沒有任何權限。但是你會發現,普通用戶也是能夠修改咱們本身的用戶密碼的,那普通用戶哪來的權限?這就是SUID特殊權限的做用。3d
SUID表示當請求執行包含SUID特殊權限的程序時,可以暫時擁有該程序全部者(對程序)的存取權限。假設普通用戶A經過passwd命令更新本身的密碼,而/usr/bin/passwd的全部者是root (root,root),也就是說,當A請求執行passwd命令時,其實是暫時得到root(對/usr/bin/passwd)的執行權限,並進一步更新/etc/shadow的內容。blog
但若是該用戶A使用cat去讀取/etc/shadow時,就會被拒絕了,由於cat沒有SUID的特殊權限,因此,A執行cat /etc/shadow時,是不能執行的。ip
須要注意的是,Linux規定SUID僅對系統中的二進制可執行文件設置有效,並且不可對Shell Script施加設置,畢竟Shell 腳本只是對二進制可執行文件的調度組合,最終也是要聽從binary file的權限設置。開發
SGID文檔
相對於SUID,當全部者所在的用戶組(group)的權限組合中可執行位(x)被s所取代時(例如---rws---),便構成SGID(即Set GID)的權限設置。SGID能夠針對二進制文件或目錄進行設置:get
a.二進制可執行文件:則當請求執行該文件(程序)時,請求執行者所在的用戶組 (即effective group)將暫時得到該程序(binary file)所屬的用戶組ID(group ID)的存取權限。
b.目錄:假設目錄A,此時在A目錄下建立的文件或子目錄所屬的用戶組ID,將自動被賦予A目錄的組ID。
SGID主要用於多人組成的項目開發上,通常比較少用到。
SBIT
咱們認爲,當文件系統「其餘(others)」的權限組合中可執行位(x)被t所取代時(例如------rwt),便構成SBIT(Sticky Bit)的權限設置。SBIT顧名思義能夠起到限制訪問的做用,是容易理解而好用的設置,它只對目錄有效。
當對一個目錄A施加了SBIT設定之後,而且使用者對A目錄有w和x權限時,則使用者在A目錄下所建立的我的文檔(含目錄)只有使用者自己或root能夠執行刪除、改名、移動等操做(是否可讀依實際權限r而定),而不可修改其餘用戶的文件或目錄。
最多見的就是在/tmp目錄下了,各用戶均可以在此目錄下建立文件或子目錄,但只能修改本身的文件或目錄,而不能更改其它用戶的。如:
上例中,root用戶建立了新文件testroot,並賦予全部權限。用戶zhang對/tmp也有r和w的權限,但zhang卻沒有權限刪除root建立的testroot文件,就是由於/tmp的t權限的效果。
注意:SBIT通常僅針對目錄施加有意義。
設置權限
特殊權限的設置也是使用數字的方式。如下是SUID/SGID/SBIT約定對應的八進制數值:
SUID爲4
SGID爲2
SBIT爲1
設置時使用chmod命令,同時把表示特殊權限的數字放在其餘三位數字權限的前面,如:
上圖設置了SUID。
上圖設置了SGID。
上圖設置了SBIT。
須要注意的是,SUID只針對二進制文件設置,而SBIT只針對目錄設置有意義,上例中並無特殊強調。
有一種特殊狀況,好比:
上圖中,設置apple的普通權限爲666,即全部人都沒有x權限,此時,卻設置了全部的特殊權限,那麼,這樣的特殊權限爲「空權限」,表現樣式爲S和T都爲大寫。