11.03.2011

SUID, SGID, SBIT (I)

這一次要介紹的主題,分三個,但觀念都很類似,所以就放在一起寫好了!!

但前提是,先瞭解一下檔案的屬性,我們先拷貝一個無關痛養的檔案來當作範例:

cat -n /etc/issue

cp -vf /etc/issue /root/

ls -l /root/issue



當我們執行ls的時後,就可以看到/root/issue這個檔案的一些基本屬性。

由上圖可知,檔案的基本屬性,總共有11碼:-rw-r--r--.。但我們的重點是在中間的九碼。

rw-: 第2到4碼,指的是這個檔案使用者 (User)的權限。r代表Read (可以讀取);w代表Write (可以寫入);x代表Executable (可以執行);-代表無法執行

r--: 第5到7碼,指的是這個檔案的所屬群組 (Group)的權限。這裡所表示的是:這個檔案的所屬群組只能夠讀取。

r--: 第8到10碼,指的是其它的使用者 (Others)對這個檔案的權限

簡介完檔案屬性之後,就要講一些進階一點的東西,也就是接下來要講的主題。

◎ SUID (Set User ID)
Set UID是幹嘛的?? 讓這支程式的執行者,在執行時 (Run-Time)等同擁有者的權限;且只能針對Binary File,無法針對目錄

有一支程式剛好可以解釋這個範例─passwd

which passwd

ls -l /usr/bin/passwd



由上圖可知,passwd這支程式的擁有者是root;可是當我們為一般使用者時,依然可以執行這支程式 (因為每個使用者都可以重新定義自己的密碼):

passwd擁有者的第三個欄位為小寫的s,表示這個Binary File被Set過UID了。

那麼該如何設定一個檔案的SUID呢?? 再回到一開始那個無關痛養的檔案;有兩種方式:

chmod u+s /root/issue; ls -l /root/issue

既然要讓這支程式的執行者,在執行時等同擁有者的權限,所以意味著這個檔案的使用者本身要能夠執行 (所以我必須要讓issue這個檔案的第4個欄位為x):



如此,這個檔案就已經Set過UID了。我們除了使用chmod u+s的方法之外,也能透過數字表示法來設定,原本的權限為744,我們還可以這樣執行:

chmod 4744 /root/issue

也可以得到同樣的結果。

(To be continue....)

沒有留言:

張貼留言