一、 問題的產生
Linux下的文件具有rwx權限,為大家所熟知,當使用ls -l查看passwd文件。
passwd在usr/bin目錄下,其所有者是root,所屬組也是root,但是其權限和其他文件卻不太一樣,rws是所屬者的權限,那和我們眾所周知的rwx有什么區別呢?
二、 問題分析
所有用戶應該都有自己的密碼,當然也可以修改,當我們執行passwd命令時,其實修改的文件為/etc/shadow,因為加密后的密碼都保存在這個文件中。
其所屬者是root,權限是rw-r-----(備注:root用戶對所有文件都具有rw權限,對所有目錄都是有rwx權限),這意味著普通用戶確實不能讀或寫這個文件。但是普通用戶又可以運行passwd這個命令來更改/etc/shadow這個文件,從而達到修改密碼的目的,那么猜測passwd這個可執行程序,應當具有特殊的權限,這也就是s和x在某些程度上的區別。
三、 Linux特殊權限:SUID、SGID、SBIT
在linux系統中文件還存在三種特殊權限,它們分別是SUID、SGID、SBIT,在設置特殊權限的時候,類似的與rwx是對應八進制421的數字一樣,SUID、SGID、SBIT,分別對應八進制421,這一點的詳細解釋會在下文中給出詳細解釋。
四、 SUID
SUID:在權限位使用s表示,出現在文件所有者的x權限上。
(1)SUID只能用于二進制可執行文件,對目錄無效
(2)執行者若具有該文件的x權限,則將具有文件所有者的權限
(3) 在程序運行過程中,執行者擁有程序擁有者的權限
(4)權限只在文件執行時有效,執行完畢不再擁有所有者權限
五、 SGID
SGID:在權限位使用s表示,出現在文件所屬群組的x權限上。
(1)SGID對于二進制程序有用
(2)程序執行者要有x權限
(3)執行者在執行過程中會獲得該程序用戶組的權限(相當于臨時加入了程序的用戶組)
(4)SGID和SUID不同,可以用于目錄
(5)權限只在文件執行時有效,執行完畢不再擁有所屬群組權限
在Linux系統下/usr/bin/mlocate就是該類型的文件。
六、 SBIT
(1) 和SUID,SGID不同的是,只能用于目錄
(2)使用者在該目錄下,僅自己與root才有權力刪除新建的目錄或文件
七、 修改SUID,SGID,SBIT權限
1.符號類型修改權限
chmodu+s test --為test文件加上suid權限
chmodg+s test --為test文件加上sgid權限
chmodo+t test --為test文件加上sbit權限
2.數字類型修改權限
我們知道普通文件的rwx權限修改
對于特殊權限,需要在前面增加一位,SUID:4,SGID:2,SBIT:1
chmod 4777 test --test擁有SUID權限,rwsrwxrwx
chmod 2777 test --test擁有SGID權限,rwxrwsrwx
chmod 1777 test --test擁有SBIT權限,rwxrwxrwt
八、 注意事項
在設置s權限時文件屬主、屬組必須先設置相應的x權限,否則s權限并不能正真生效,c h m o d命令不進行必要的完整性檢查,即使不設置x權限就設置s權限,chmod也不會報錯,當我們ls -l時看到rwS,大寫S說明s權限未生效