SUID、SGID、STICKY簡介:
在瞭解特殊權限位前,先來了解一下安全上下文概念。
安全上下文:
進程運行時可以訪問哪些資源或文件,不取決於進程文件的屬主屬組,而是取決於運行該命令的用戶身份的uid/gid,以該身份獲取各類系統資源。
特殊位做用:
SUID:對一個可執行文件,不是以發起者身份來獲取資源,而是以可執行文件的屬主身份來執行。
SGID對一個可執行文件,不是以發起者身份來獲取資源,而是以可執行文件的屬組身份來執行。
STICKY:粘滯位,一般對目錄而言。一般對於全局可寫目錄(other也可寫)來講,讓該目錄具備sticky後,刪除只對屬於本身的文件有效(可是仍能編輯修改別人的文件,除了root的)。不能根據安全上下文獲取對別人的文件的寫權限。
設置方式:
#chmod u+s
#chmod g+s
同上,去除特殊位有: #chmou u-s .等
SUID:置於 u 的 x 位,原位置有執行權限,就置爲 s,沒有了爲 S .
SGID:置於 g 的 x 位,原位置有執行權限,就置爲 s,沒有了爲 S .
STICKY:粘滯位,置於 o 的 x 位,原位置有執行權限,就置爲 t ,不然爲T .
表示方法:
將三個特殊位的用八進制數值表示,放於 u/g/o 位以前。其中 suid :4 sgid:2 sticky:1
例: 對某個目錄:
#chmod 4551 file // 權限: r-sr-x--x
#chmod 2551 file // 權限: r-xr-s--x
#chmod 1551 file // 權限: r-xr-x--t
因爲SUID和SGID是在執行程序(程序的可執行位被設置)時起做用,而可執行位只對普通文件和目錄文件有意義,因此設置其餘種類文件的SUID和SGID位是沒有多大意義的。
對一個屬主爲root的可執行文件,若是設置了SUID位,則其餘全部普通用戶都將能夠以root身份運行該文件,獲取相應的系統資源。固然這在某些場合時須要的,可是濫用會形成系統的安全隱患。
對一個全局可寫目錄,若其從屬於mygrp組,一個屬於mygrp組的用戶創建文件後屬組爲本身的私有組,可是加上給該文件夾加上SGID位後,可讓用戶建立的文件從屬於該目錄所屬的組,由於是以文件夾屬組的身份來建立的。
對於一個全局可寫目錄,加上sticky位之後,普通用戶將只能刪除本身的文件,而不能刪除其餘用戶的文件。安全
- [root@localhost tmp]# su - user1
- [user1@localhost ~]$ id
- uid=512(user1) gid=512(user1) groups=504(mygrp),512(user1)context=root:system_r:unconfined_t:SystemLow-SystemHigh
- [user1@localhost ~]$ cd /tmp/share/
- -bash: cd: /tmp/share/: Permission denied
- [user1@localhost ~]$ ll -d /tmp/share
- drwxrwSr-t 5 root mygrp 4096 Dec 30 16:09 /tmp/share
- [user1@localhost ~]$
- # 如上例,若是沒有原位沒有置X權限,即便同組的用戶也沒法進入目錄,
- # 再設置SGID位也不起做用