2021-05-12 14:32:11
Linux 檔案許可權 強制位和冒險位詳解
Linux中,檔案許可權除了讀、寫、執行之外,還有強制位與冒險位的特別許可權
在Linux中檔案的許可權如下(在Linux中目錄也是一個檔案):
強制/冒險 | 使用者 | 組 | 其它
===========================================
sst rwx rwx rwx
這裡就講解一下強制位和冒險位
強制位有:setuid和setgid,主要用於檔案及目錄
冒險位有:sticky,只用於目錄,多數是共用目錄
setuid(在u的x位置上使用一個s)只能對檔案進行設定
對檔案作用:
預設情況下,使用者執行一個指令,會以該使用者的身份來執行進程。當一個檔案設定了SUID後,所有使用者執行這個檔案時都是以這個使用者的所有者的許可權來執行。即可以讓對此檔案沒有執行許可權的使用者執行此檔案。
setgid(在g的x位置上使用一個s)只能對目錄設定
對目錄作用:
預設情況下,使用者建立的資料夾屬於使用者當前所在的組,但是設定了SGID後,表示在此目錄中,任何人建立的檔案,都會屬於目錄所屬的組,但是使用者還是屬於建立的使用者。
sticky(o的x位置上使用一個t)只能對目錄設定
對目錄作用:
預設情況下,如果一個目錄o上有w和x許可權,則任何人可以在此目錄中建立與刪除檔案。一旦目錄上設定了冒險位,則表示在此目錄中,只有檔案的擁有者、目錄的擁有者與系統管理員可以刪除檔案。其他使用者則不能。
注意:直接在檔案上面設定冒險位是沒有作用的,冒險位要建立在目錄上面
強制位和冒險位的表現方式:
強制位與冒險位新增在執行許可權的位置上,強制位使用S和s來表示,冒險位使用T和t來表示。如果該位置上原已有執行許可權,則強制位與冒險位以小寫字母的方式表示。否則,以大寫字母表示。即:
S:表示該位沒有x位 s: 表示該位有x位
T:表示該位沒有x位 t: 表示該位有x位
Ps:如果在強制位中S為大寫,則表示相應的執行許可權位並未被設定,這是一種沒有用處的suid設定可以忽略它的存在。
設定強制位和冒險位
1:通過+,-設定強制位和冒險位
set uid: # chmod u+s filename
# chmod u-s filename 對檔案取消強制位
set gid: # chmod g+s filename
sticky: # chmod o+t dir
2:通過數位設定強制位和冒險位,放在讀寫執行的三位數位前來指定
4(set uid) 2(set gid) 1(sticky)
# chmod 4--- 檔案 設定setuid
# chmod 2--- 目錄 設定setgid
# chmod 1--- 目錄 設定sticky
# chmod 6--- 目錄/檔案 設定GUID,UID
注意:chmod命令不進行必要的完整性檢查,可以給某一個沒用的檔案賦予任何許可權,但並不會對所設定的許可權組合做什麼檢查。因此一個檔案具有執行許可權不一定程式或指令碼。
SUID例子:
預設情況下所有使用者都可以使用ping此命令,但檢視ping命令所在的檔案時會發現,這個檔案所屬的使用者和組均屬於root,按理說只有root使用者可以執行該命令,但事實上會發現所有的使用者都可以使用該命令。因為ping命令所在檔案的許可權x的位置有一個s
# ping -c 4 www.linuxidc.com
如果去掉suid就會發現其他使用者就使用不了改命令了
# chmod u-s /bin/ping
# su - linuxidc
$ ping -c 4 www.linuxidc.com
ping: icmp open socket: Operation not permitted
上面的例子中,指令檔案上的強制位,可以讓使用者執行的指令,以指令檔案的擁有者或所屬組的身份執行進程。也說明了如果某個命令沒有s許可權則普通使用者不可以使用
SGID例子:
一個小組共同開發一個專案,所有的專案檔案都存放在一個目錄下面,對這個目錄設定SGID,可以讓所有的使用者新建的檔案都屬於同一個群組。然後對目錄設定好許可權,這樣大家都可以看到其他使用者建立的檔案。
STICKY例子:
如一個小組共同開發一個專案,在一個目錄上設了sticky位後,所有的小組成員都可以在這個目錄下建立檔案,但只能刪除自己建立的檔案(root除外),這就對目錄下的使用者檔案啟到了保護的作用。
其他:
查詢suid檔案
# ls -l | grep '^...s'
查詢suid 和guid document
# ls -l |grep '^...s..s'
相關文章