我們用八進制表示一個權限時,如644或者755,省略了最前面的一個特別權限位,完整地表示是0644或者0755,而第一位就是特別權限位。這里著重要說的是三個特別權限位:setuid,setgid和 sticky位。
setuid位:當文件設置了setuid位后,任何能夠執行此文檔的用戶都有與文件屬主相同的權限,即使得任意使用者在執行該文件時,都綁定了文件屬主的權限。例如,某個程序為root擁有,又設置了setuid位,那即使是一個普通用戶運行該程序,該程序的身份一樣是root的身份,可以訪問所有只有root可以訪問的資源,設置setuid位的程序曾是被攻擊的對象。 setuid位典型的應用是/usr/bin/passwd,查看該文件權限顯示-rwsr-xr-x,這里的s表示設置了setuid位且該文件可由文件屬主執行,如果一般用戶執行該文件,則在執行過程中可以獲得root權限,從而更改用戶密碼。大寫S表示文件本來沒有可執行權限并且設置了setuid 位。
命令用法:chmod 4755 your_program
setgid位:與setuid位相似,只對目錄有效,setgid權限位被設定以后,任何用戶都擁有了該文件所屬組的權限,也就是能夠像該文件組內成員相同運行它。另外當一個目錄被配置setgid位后,以后用別的用戶創建或者復制到這個目錄下的文件,它所屬的組會自動被改成目錄文件所在的組,除非復制是加上-p (preserve)選項。
命令用法:chmod 2755 your_program
sticky位:一般只用在目錄上,可以理解為防刪除位,當一個目錄被設置了sticky位,則該目錄下的文件只能由一、超級管理員刪除;二、該目錄的所有者刪除;三、該文件的所有者刪除。也就是說,即便該目錄是任何人都可以寫,但也只有文件的屬主才可以刪除文件。
要刪除一個文件,你不一定要有這個文件的寫權限,但你一定要有這個文件的上級目錄的寫權限。也就是說,你即使沒有一個文件的寫權限,但你有這個文件的上級目錄的寫權限,你也可以把這個文件給刪除,而如果沒有一個目錄的寫權限,也就不能在這個目錄下創建文件。 如何才能使一個目錄既可以讓任何用戶寫入文件,又不讓用戶刪除這個目錄下他人的文件,sticky就是能起到這個作用。stciky一般只用在目錄上,用在文件上起不到什么作用
典型應用為/temp目錄,/tmp是一個存放臨時文件的目錄,要求是對所有用戶可寫。但每個用戶都只能刪除自己擁有的文件。通過ls -l |grep tmp可以看到/temp的權限表述為drwsrwsrwt,其中字母t代表了這個目錄被設置了粘著位。相同的需求往往在ftp服務器的upload 目錄中也存在。