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位也不起作用