特殊許可權SUID、SGID和sticky功能的介紹及其應用
SUID的介紹
我們知道當我們以某一個使用者去執行二進位制程式時,就會相應的產生一個程序,而這個程序也有屬主和屬組,預設這個程序的屬主和屬組為當前使用者和當前使用者的基本組。
但是不知道有沒有人發現到/etc/shadow這個檔案的屬主和屬組都是root,但是這個檔案的許可權為rw-------,也就是說只有root使用者才有讀和寫的許可權,其他使用者什麼許可權也沒有。但是我們知道
/etc/shadow這個檔案裡面存放的是系統上所有使用者的密碼相關資訊,其它使用者卻可以使用passwd這個命令來為自身使用者修改密碼,並最終儲存在/etc/shadow這個檔案中。這又是怎麼回事呢?
由上圖可以看出/usr/bin/passwd這個檔案的許可權為rwsr-xr-x,那麼這個s代表的是什麼呢?
s代表的是一個特殊許可權位,當s出現在檔案屬主的執行許可權位上時,就表示為SUID;如果s出現在檔案屬組的執行許可權位上表示為SGID。那麼什麼是SUID和SGID呢?
SUID:就是當某使用者執行二進位制程式時,當前使用者或暫時獲取這個二進位制檔案屬主的許可權。
因此,當某一個二進位制檔案具有SUID許可權時,在執行該二進位制程式時,當前使用者將暫時具有這個二進位制檔案屬主的許可權。所以當我們使用passwd命令時,當前使用者將暫時獲得passwd這個二進位制檔案屬主的許可權,因此當前使用者可以將密碼寫入到/etc/shadow檔案中。
注意:當某個二進位制檔案的屬主和屬組的執行許可權位沒有時,使用了特殊許可權位就會顯示S;如果該許可權位上執行有許可權(x)時,則顯示為s.
如何給某個檔案加上特殊許可權位呢?
給某個檔案加上或減掉SUID許可權
chmod u[+|-]s FILE
給某個檔案加上或減掉SGID許可權
chmod g[+|-]s FILE
例如:
關於SUID的功能總結:
1、SUID只對二進位制程式有效,對於一般檔案和目錄無效。
2、SUID許可權只在使用者執行該二進位制程式過程中有效。
3、使用SUID許可權時,當前使用者將會暫時擁有該二進位制程式本身屬主的許可權。
SGID介紹
接下來在介紹什麼是SGID?
SGID:當前使用者在執行二進位制程式的時候,其將獲得二進位制程式屬組的支援。
同樣的,如何給檔案加上或剪掉SGID的許可權呢?
chmod g[+|-] s FILE
對於二進位制程式使用SGID的使用不在此說明,原理同SUID。
從上面知道,SUID只對二進位制程式生效,而SGID既可以對二進位制檔案生效,也可以作用於目錄。
因此,可以將目錄設定具有SGID的許可權。
如果某個目錄具有SGID的許可權,那麼在該目錄下建立的檔案的屬組和父目錄的屬組一樣。
情景模擬:假設某一個開發團隊,有aa和bb這兩個使用者,這兩個使用者建立的檔案全部存放在/dir目錄下。設這個目錄的屬組為hello。如果設定這個目錄,使得aa和bb建立的檔案可以相互訪問和修改,並且不允許其他使用者的訪問?
1、修改/dir目錄的屬組為hello,且給這個目錄許可權設定為770。
# groupadd hello
# mkdir /dir
# chgrp hello /dir
# chmod 770 /dir
2、建立使用者aa和bb,且其附加組為hello
# useradd -G hello aa
# useradd -G hello bb
這樣aa和bb在/dir目錄下都可以建立檔案了。
3、給目錄/dir設定SGID許可權
# chmod g+s /dir
# ls -ld /dir
drwxrws---. 2 root hello 4096 Aug 31 00:27 /dir
4、使用aa使用者在/dir目錄下建立檔案為aa.txt
# su - aa
$cd /dir
$vim aa.txt
hello,aa
$ls -l aa.txt
-rw-rw-r--. 1 aa hello 9 Aug 31 00:34 aa.txt
//看看,建立的許可權為664,且屬組為hello。由於bb也是hello這個組的成員,因此使用者bb是可以對這個使用者進行編輯的。
5、使用使用者bb對aa.txt檔案進行編輯
# su - bb
$cd /dir
$vim aa.txt
hello,aa
hi,I am bb
$ cat aa.txt
hello,aa
hi,I am bb
同樣,使用使用者bb在/dir目錄下建立的檔案,也可以被使用者aa進行編輯,這樣就實現了aa和bb建立的檔案可以相互修改和訪問,且其他使用者不能訪問和修改。這就是利用目錄的SGID許可權來實現的。
關於SGID許可權的功能:
1、對於檔案具有SGID許可權而言:
只對二進位制程式有效。
SGID許可權只在二進位制程式執行過程中有效。
執行二進位制程式時,當前使用者將獲得該二進位制程式屬組的支援。
2、對於目錄具有SGID的許可權來說:
如果使用者對該目錄有r和x許可權,表示該使用者可以進入到此目錄下。
如果該使用者對此目錄有w許可權,則在該目錄下建立的檔案其屬組和當前目錄的屬組是一樣的。
sticky特性
從上面我們知道,當某一個目錄具有SGID的許可權後,在該目錄下的檔案使用者彼此之間可以相互訪問和修改,但是也可以刪除不是自己的檔案,如何防止別人刪除自己的檔案呢?(除root使用者除外)。
只要給目錄加上sticky特性即可。那什麼是sticky特性呢?
sticky:在一個公共目錄下,每一個使用者只能刪除自己的檔案,而不是刪除別人的檔案。
sticky特性設定在其他使用者的許可權位上(即other許可權位上)。那如何設定sticky特性呢?
chmod o[+|-]t directory
sticky特性只對目錄有效
如果other許可權位上面沒有x許可權時,如果使用了sticky功能,那麼顯示的將是T,而不是t。
既然SUID、SGID、sticky是一種特殊許可權,那麼必然也有和普通許可權位一樣,也會有一個八進位制位與之對應。
SUID:八進位制許可權位為4
SGID:八進位制許可權位為2
sticky:八進位制許可權位為1
注意:特殊許可權位一般在普通許可權位的前面
例如:chmod 5775 /test
最前面的5表示特殊許可權位,因此/test目錄同時具有SUID和sticky的特殊許可權。
轉載於:https://blog.51cto.com/xslwahaha/1429646