1. 程式人生 > 實用技巧 >linux特殊檔案許可權 SUID/SGID/sticky-bit

linux特殊檔案許可權 SUID/SGID/sticky-bit

一、三種特殊許可權簡介:
SUID :

當一個設定了SUID 位的可執行檔案被執行時,該檔案將以所有者的身份執行,也就是說無論誰來執行這個檔案,他都有檔案所有者的特權。

如果所有者是 root 的話,那麼執行人就有超級使用者的特權了。這時該位將變成一個安全漏洞,因此不要輕易設定該位。

SGID:

當一個設定了SGID 位的可執行檔案執行時,該檔案將具有所屬組的特權, 任意存取整個組所能使用的系統資源

若一個目錄設定了SGID,則所有被複制到這個目錄下的檔案, 其所屬的組都會被重設為和這個目錄一樣,

除非在複製檔案時加上-p (preserve,保留檔案屬性)的引數,才能保留原來所屬的群組設定。

一般來說,SGID多用在特定的多人團隊的專案開發上,在系統中用得較少。

sticky-bit:

對一個檔案設定了sticky-bit之後,儘管其他使用者有寫許可權, 也必須由屬主執行刪除、移動等操作。

sticky-bit位要求作業系統既是在可執行程式退出後,仍要在記憶體中保留該程式的映象。

這樣做是為了節省大型程式的啟動時間,但是會佔用系統資源。因此設定該位,不如把程式寫好。


二、三種特殊許可權數值表示
我們知道了檔案的許可權可以用三個八進位制數字表示。其實檔案的許可權應該用四個八進位制來表示,不過用 ls -l 命令時,只顯示三個罷了。那個沒有顯示的八進位制數字其實是第一個,它用來設定一些特殊許可權。這個八進位制數字的三個位是: SUID SGID sticky-bit。SUID、SGID和sticky-bit三種特殊許可權用單獨的一位8進位制數值表示,表示如下

SUID SGID sticky 二進位制 八進位制 說明
- - - 000 0 不設定特殊許可權
- - t 001 1 只設置sticky
- s - 010 2 只設置SGID
- s t 011 3 只設置SGIDsticky
s - - 100 4 只設置SUID
s - t 101 5 只設置SUIDsticky
s s - 110 6 只設置SUIDSGID
s s t 111 7 設定三種特殊許可權

三、set uid; set gid; sticky bit區別:
每一個檔案有所有者及組編號,set uid ;set gid可以改變使用者對檔案具有的許可權:寫和執行.
setuid: 在執行時具有檔案所有者的許可權.
setgid: 設定目錄,一個目錄被標上setgid位,此目錄下建立的檔案繼承該目錄的屬性.
sticky bit: 該位可以理解為防刪除位. 設定sticky bit位後,就算使用者對目錄具有寫許可權,但也只能新增檔案而不能刪除檔案。


四、三種特殊許可權設定:


操作這些標誌與操作檔案許可權的命令是一樣的, 都是通過chmod。有兩種方法來操作,
1) 第一種:chmod u[g]+s[T] filename

# chmod u+s temp -- 為temp檔案加上setuid標誌. (setuid 只對檔案有效,U=使用者) 
# chmod g+s tempdir -- 為tempdir目錄加上setgid標誌 (setgid 只對目錄有效,g=組名) 
# chmod o+t temp -- 為temp檔案加上sticky標誌 (sticky只對檔案有效) 


注:suid是在u的x位用s/S設定suid,guid是在g的x位用s/S設定guid,當x位本身就設定了執行許可權,則用小s表示;當x沒有設定執行許可權,則用大S表示。具體如下所示

file:-rwx r-x r-x
diredrw- r r

file:-rws(S) r-x r-x
diredrwS(s) r r


2) 第二種:chmod +4位遵循許可權設定的數字 filename。採用八進位制方式。八進位制數字三位的意義如下,
如果希望設定suid,那麼就將許可權位最前面(第一個短橫線_所佔據的)的那一位設定為4;
如果希望設定guid,那麼就將許可權位最前面的那一位設定為2;
如果希望兩者都置位,那麼將許可權位最前面的那一位設定為4+2。

# chmod 2775 temp  //這裡的2,即為temp目錄新增setgid標誌;775則是常規的檔案許可權設定rwxrwxr-x
# chmod 4755 filename–>rws r-x r- x檔案被設定了suid,檔案屬主具有讀、寫和執行的許可權,所有其他使用者具有讀和執行的許可權
# chmod 6711 filename–>rws –s –x 檔案被設定了suid和guid,檔案屬主具有讀、寫和執行的許可權,所有其他使用者具有執行的許可權
# chmod 4764 filename–>rws rw- r- – 檔案被設定了suid,檔案屬主具有讀、寫和執行的許可權,同組使用者具有讀和執行的許可權,其他使用者具有讀許可權

五、三種特殊許可權檢視,可以用ls -l來檢視。如果本來在該位上有x, 則這些特殊標誌顯示為小寫字母 (s, s, t). 否則, 顯示為大寫字母 (S, S, T),如:
rwsrw-r– 表示有setuid標誌 (rwxrw-r–:rwsrw-r–)
rwxrwsrw- 表示有setgid標誌 (rwxrwxrw-:rwxrwsrw-)
rwxrw-rwt 表示有sticky標誌 (rwxrw-rwx:rwxrw-rwt)

參考:http://coolnull.com/3278.html