[Linux]權限s權限和t權限


問題

     在《Unix高級編程》第4.9章節中描述了函數chmod()的參數mode常量值

當中S_ISUID、S_ISGID、S_ISVTX三個常量讓人困惑.

分析

通過查閱文檔,發現這幾個權限叫做強制位(s權限)和粘滯位(t權限)

一、s權限

     包含S_ISUID、S_ISGID兩個常量在內,叫做強制位權限,作用在於設置使文件在執行階段具有文件所有者的權限,相當於臨時擁有文件所有者的身份. 典型的文件是passwd. 如果一般用戶執行該文件, 則在執行過程中, 該文件可以獲得root權限, 從而可以更改用戶的密碼.

ls -al /usr/bin/passwd
-rwsr-xr-x 1 pythontab pythontab 32988 2018-03-16 14:25 /usr/bin/passwd

     兩個常量的值是:

  oct dec
S_ISUID 4000 2048
S_ISGID 2000 1024

     即分別是第12位和第11位的掩碼.

     設置suid:將相應的權限位之前的那一位設置為4;

     設置guid:將相應的權限位之前的那一位設置為2;

     兩者都置位:將相應的權限位之前的那一位設置為4+2=6.

     設置一個文件運行時具備文件擁有者UID的身份:

chmod 4755 test

     設置一個文件運行時具備文件擁有者GID的身份:

chmod 2755 test

     設置一個文件運行時以上兩者兼備的身份:

chmod 6755 test

注意:在設置s權限時文件屬主、屬組必須先設置相應的x權限,否則s權限並不能正真生效(c h m o d命令不進行必要的完整性檢查,即使不設置x權限就設置s權限,chmod也不會報錯,當我們ls -l時看到rwS,大寫S說明s權限未生效)

二、t權限

     這個常量的值是:

  oct dec
S_ISVTX 1000 512

     即是第10位的掩碼,不過有一點挺奇怪是,在centos7.0下標准頭文件sys/stat.h卻沒有定義這個常量,但是在文件系統中這個標志位是真實存在的.

     設置一個文件夾運行時具備t權限:

chmod 1777 test

     t權限:要刪除一個文檔,您不一定要有這個文檔的寫權限,但您一定要有這個文檔的上級目錄的寫權限。也就是說,您即使沒有一個文檔的寫權限,但您有這個文檔的上級目錄的寫權限,您 也能夠把這個文檔給刪除,而假如沒有一個目錄的寫權限,也就不能在這個目錄下創建文檔。

怎樣才能使一個目錄既能夠讓任何用戶寫入文檔,又不讓用戶刪除這個目錄下他人的文檔,t權限就是能起到這個作用。t權限一般只用在目錄上,用在文檔上起不到什么作用。

在一個目錄上設了t權限位后,(如/home,權限為1777)任何的用戶都能夠在這個目錄下創建文檔,但只能刪除自己創建的文檔(root除外),這就對任何用戶能寫的目錄下的用戶文檔 啟到了保護的作用。

可以通過chmod +t filename 來設置t權限

在這再總結一下

s或S(SUID,Set UID):

可執行的文件搭配這個權限,便能得到特權,任意存取該文件的所有者能使用的全部系統資源。請注意具備SUID權限的文件,黑客經常利用這種權限,以SUID配上root帳號擁有者,無聲無息地在系統中開扇后門,供日后進出使用。

t或T(Sticky):

/tmp和 /var/tmp目錄供所有用戶暫時存取文件,亦即每位用戶皆擁有完整的權限進入該目錄,去瀏覽、刪除和移動文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM