1. 程式人生 > >suid sgid sticky-bit 三種特殊許可權簡介

suid sgid sticky-bit 三種特殊許可權簡介

三種特殊許可權簡介
SUID

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

如果所有者是 root 的話,那麼執行人就有超級使用者的特權了。

SGID

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

若一個目錄設定了SGID,則所有被複制到這個目錄下的檔案, 其所屬的組都會被重設為和這個目錄一樣,除非在複製檔案時加上-p (preserve,保留檔案屬性)的引數,才能保留原來所屬的群組設定。

sticky-bit

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


對一個目錄設定了sticky-bit之後,存放在該目錄的檔案僅准許其屬主執行刪除、 移動等操作。


特殊許可權的數值表示
三種特殊許可權可以用單獨的一位8進位制數值表示

SUID、SGID和sticky-bit的數值表示

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

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

SUID SGID sticky-bit 
它們的含義是:

SUID
當設定了SUID 位的檔案被執行時,該檔案將以所有者的身份執行,也就是說無論誰來執行這個檔案,他都有檔案所有者的特權。如果所有者是 root 的話,那麼執行人就有超級使用者的特權了。這時該位將變成一個安全漏洞,因此不要輕易設定該位。 

SGID
與上面的內容類似。檔案執行時,執行者將具有所屬組的特權。

sticky-bit

sticky 位要求作業系統既是在可執行程式退出後,仍要在記憶體中保留該程式的映象。這樣做是為了節省大型程式的啟動時間。但是會佔用系統資源。因此設定該位,不如把程式寫好。

set uid ;set gid;sticky bit區別


每一個檔案有所有者及組編號,set uid ;set gid可以改變使用者對檔案具有的許可權:寫和執行.

setuid: 在執行時具有檔案所有者的許可權. 
setgid: 設定目錄. 一個目錄被標上setgid位,此目錄下建立的檔案繼承該目錄的屬性. 
sticky bit: 該位可以理解為防刪除位. 設定sticky bit位後,就算使用者對目錄具有寫許可權,但也只能新增檔案而不能刪除檔案。


如何設定:

操作這些標誌與操作檔案許可權的命令是一樣的, 都是 chmod. 有兩種方法來操作, 
1) chmod u+s temp -- 為temp檔案加上setuid標誌. (setuid 只對檔案有效,U=使用者) 
chmod g+s tempdir -- 為tempdir目錄加上setgid標誌 (setgid 只對目錄有效,g=組名) 
chmod o+t temp -- 為temp檔案加上sticky標誌 (sticky只對檔案有效) 

2) 採用八進位制方式. 這一組八進位制數字三位的意義如下, 
abc 
a - setuid位, 如果該位為1, 則表示設定setuid 
b - setgid位, 如果該位為1, 則表示設定setgid 
c - sticky位, 如果該位為1, 則表示設定sticky 

設定後, 可以用 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)

如何設定suid和guid

第一種:chmod u[g]+u[U] +filename
suid是在u的x位用s/S設定suid,當x位本身就設定了執行許可權,則用小s表示;當x沒有設定執行許可權,則用大S表示;
eg:file:-rwx r-x r-x
dire:drw- r– r–
—–>
file:-rws(S) r-x r-x
dire:drwS(s) r– r–
guid是在g的x位用s/S設定guid,當x位本身就設定了執行許可權,則用小s表示;當x沒有設定執行許可權,則用大S表示;

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

下面給出幾個例子:

chmod 4755 filename–>rws r-x r- x檔案被設定了suid,檔案屬主具有讀、寫和執行的許可權,所有其他使用者具有讀和執行的許可權
chmod 6711 filename–>rws –s –x 檔案被設定了suid和guid,檔案屬主具有讀、寫和執行的許可權,所有其他使用者具有執行的許可權
chmod 4764 filename–>rws rw- r- – 檔案被設定了suid,檔案屬主具有讀、寫和執行的許可權,同組使用者具有讀和執行的許可權,其他使用者具有讀許可權