和ctrl討論linux系統上s,t許可權位的問題,頗有感觸,總結如下

sqysl發表於2008-10-25



關於Linux系統中檔案或目錄的s、t許可權位的說明

[root@localhost /]# ls -l /bin/bash
-rwxr-xr-x    1 root     root       626028 2003-02-11  /bin/bash
-----------------------------------------------------------------------------------
[root@localhost /]# chmod u+s /bin/bash
[root@localhost /]# ls -l /bin/bash
-rwsr-xr-x    1 root     root       626028 2003-02-11  /bin/bash
s位的說明:
     如上圖所示:
     一般來說,一個執行中的程式為執行這個程式的使用者所擁有。    但如果該程式是suid/guid程式,則執行的程式則為檔案所有者擁有,執行中的程式在程式執行期間擁有檔案所有者的全部許可權。     如果一個普通使用者執行了一個屬於根使用者的帶s標誌的程式,那麼,該程式將不考慮使用者許可權,而是自動擁有在系統中讀/寫任何檔案及目錄的特權。
    這樣做,有一定的好處,但一般我們不建議採用s位,要嚴格設定這種許可權,避免破壞性。
   比如:若你的suid程式是/bin/bash的話,則會導致嚴重後果,一個普通使用者若在某個短時間取得過root許可權,他就能設定一個suid程式/binb/bash來取得根特權。 (若拿它來破壞別人的系統,後果自負)
# cp /bin/bash /home/jephe/.backdoor
# chmod 4755 /home/jephe/.backdoor
這樣當攻擊者執行了/home/jephe/.backdoor後就得到了根特權,可用id命令顯示suid=0
t位的說明:
   t位就比較好理解了。如下圖所示:
[root@localhost root]# ls -l 4444.jpg
-rw-r--r--    1 root     root       550349  3?? 14 14:31 4444.jpg
[root@localhost root]# chmod o+t 4444.jpg
[root@localhost root]# ls -l 4444.jpg
-rw-r--r-T    1 root     root       550349  3?? 14 14:31 4444.jpg
   程式的t屬性表示粘著位,即告訴系統在程式完成後在記憶體中儲存一份執行程式的備份,如該程式常用,可為系統 節省點時間,不用每次從磁碟載入到記憶體。由本人註明:是儲存在虛擬記憶體中,而不是實體記憶體中。
   目錄的t屬性,設定了目錄的T屬性後1000,由只有該目錄的所有者及root才能刪除該目錄,
    如/tmp目錄就是drwxrwxrwt
記住,記住,呵呵。


lhdz_bj:
好,很精深的問題。美中不足的是,T粘著位的介紹少了點,再清楚點就好了,呵。。。
主人回覆:
哈,多謝老大哥捧場。 t位的說明就那點意思啊,呵呵。若有不太清楚的地方,您說~,我知無不言,言無不盡。

lhdz_bj:
首先,你說的很清楚了,可我覺得S和T許可權位,似乎都和安全能扯上關係,S位對安全的影響你說的很清楚很詳細了,T位雖然說清楚了,但沒涉及到安全的問題,能否說點T位和安全的具體關係呢?不過,首先宣告,我對LINUX研究肯定沒老弟深入,就是再7、8年前看過一點,還看過一本有關安全的書,都講到了S、T位和安全的關係,現在也忘記的差不多了,呵,多賜教啊。
主人回覆:
據目前所看到的資料而言,t位好像確實沒有安全方面的關係。它的作用應該就是~可以使帶有t位的程式在執行結束以後,不會退出記憶體,而是將這個程式保留在虛擬記憶體當中。這樣,當再次執行這個程式的時候,就不再需要從磁碟中重新讀取調入記憶體了,加快了程式的執行速度。好像就是這個作用:)

lhdz_bj:
我剛才查了一下,是這個意思,其實你剛才最後一句有這個意思:
要刪除一個檔案,你不一定要有這個檔案的寫許可權,但你一定要有這個檔案的上級目錄的寫許可權。也就是說,你即使沒有一個檔案的寫許可權,但你有這個檔案的上級目錄的寫許可權,你也可以把這個檔案給刪除,而如果沒有一個目錄的寫許可權,也就不能在這個目錄下建立檔案。
如何才能使一個目錄既可以讓任何使用者寫入檔案,又不讓使用者刪除這個目錄下他人的檔案,sticky就是能起到這個作用。sticky一般只用在目錄上,用在檔案上起不到什麼作用。
在一個目錄上設了sticky位後,(如/tmp,許可權為1777)所有的使用者都可以在這個目錄下建立檔案,但只能刪除自己建立的檔案,這就對所有使用者能寫的目錄下的使用者檔案啟到了保護的作用。
至於,sticky bit是否如你所說,可以使程式執行後儲存在記憶體的交換區中,你是參考的什麼資料,我一直沒看到相應的資料。
主人回覆:
可以建立自己的檔案,刪除自己的檔案,但就是不能刪除別人的檔案。嗯,學到!! 檔案也可以設定t位,它不僅可以設定t位(chmod 1777 myfie),而且,也可以設定T位(chmod o+t myfile)。t和T之間的區別我還沒有搞清楚。 程式的t位,參考地址:http://blog.chinaunix.net/u2/63316/showart_495911.html

lhdz_bj:
查了些資料,都是些互相抄錄的東西,總結如下:
1.目錄設定STICKY BIT後,即使使用者擁有該目錄的寫許可權,目錄下的檔案也只能由屬主和 ROOT才能刪除,使用者不能刪除該目錄下的其他使用者的檔案。
2.檔案設定了STICKY BIT後,即使其他使用者擁有對該檔案的寫許可權,也不能刪除該檔案,只能由該檔案的屬主刪除。當然,也有檔案設定該sticky bit位後,程式執行後要再記憶體中保留影像的說法,也可能會有這種功能,但現在用的不是很多,有待驗證,至於程式留在系統交換區的說法,我覺得有待商榷,因為系統交換區是再硬碟上的,放在交換區和用到該程式時重新從盤上讀,能快多少呢?
3.關於t和T,是這樣的,當設定STICKY BIT位後,當用ls -al命令列目錄或檔案許可權時,如果目錄或檔案的的STICKY BIT位原來有x許可權,就顯示t,如果原來沒有x許可權,就顯示T,因為顯示時sticky bit位要佔用x位的。
共勉。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8484829/viewspace-478111/,如需轉載,請註明出處,否則將追究法律責任。

相關文章