前面我們知道了Linux中文件、目錄一般有rwx三種權(quán)限,但是請(qǐng)看下面命令的結(jié)果,我們可以發(fā)現(xiàn)了多了2個(gè)權(quán)限:s,t:




其中s權(quán)限當(dāng)出現(xiàn)于用戶的x位置時(shí)被稱為SUID,當(dāng)s權(quán)限出現(xiàn)于組用戶的x位置時(shí)被稱為SGID (而SGID又分為作用于文件還是目錄,SUID僅對(duì)文件有用)
那么這兩個(gè)權(quán)限有什么作用呢?簡(jiǎn)單的概括起來(lái):
①SUID允許執(zhí)行該文件的用戶在運(yùn)行時(shí)暫時(shí)擁有所有者的權(quán)限
②SGID允許執(zhí)行該文件的用戶在運(yùn)行時(shí)暫時(shí)擁有用戶組的權(quán)限
③如果SGID作用于目錄,則使用者在該目錄下創(chuàng)建的文件,其用戶組都和該目錄一樣
Example 1:修改passwd文件中用戶paul的密碼
我們知道/usr/bin/passwd文件的用戶是root,用戶組也是root,如果沒有s權(quán)限,那么光憑用戶paul的x權(quán)限我們只能執(zhí)行而不能看到,更改這個(gè)文件的內(nèi)容。但是實(shí)際上我們完全可以通過passwd命令來(lái)修改自己的密碼。








那么為什么我們不具備對(duì)passwd這個(gè)文件rw權(quán)限,卻能夠修改這個(gè)文件呢?原因就在于我們前面提到的s權(quán)限--SUID。從描述可以知道當(dāng)paul用戶執(zhí)行該文件時(shí)(x權(quán)限),可以暫時(shí)地獲得用戶root對(duì)這個(gè)文件的權(quán)限,用戶root對(duì)passwd是rwx權(quán)限,所以我們當(dāng)然可以修改自己的密碼了。
但一旦我們執(zhí)行完畢時(shí)這個(gè)權(quán)限就還回去了,如果我們cat這個(gè)文件我們會(huì)發(fā)現(xiàn)沒有權(quán)限顯示



不過SUID和SGID也不是隨便那個(gè)人,那個(gè)文件都可以用的,必須滿足下面兩個(gè)條件
①用戶對(duì)要執(zhí)行的文件必須具備x權(quán)限
②SUID,SGID僅對(duì)二進(jìn)制文件起作用
【2.SBIT】
SBIT權(quán)限就是前面我們看到的t權(quán)限,它只能作用于目錄,它的作用是:但用戶在該目錄下建立文件或目錄時(shí),僅有用戶自己或root用戶有權(quán)刪除。其他人無(wú)法刪除,而用戶也無(wú)法刪除他人的目錄或文件。



我們看到/tmp目錄的x位置被替換成t了,這意味著這個(gè)目錄下的內(nèi)容只有root用戶和創(chuàng)建者有權(quán)刪除。
Example 1:試驗(yàn)SBIT權(quán)限
首先我們以paul用戶身份在/tmp目錄下建立一個(gè)文件test,并設(shè)置成為777權(quán)限。讓所有人可以修改文件。







然后我們以O(shè)racle用戶身份分別嘗試刪除該文件和修改該文件








經(jīng)過試驗(yàn)我們發(fā)現(xiàn)兩個(gè)結(jié)果:
①我們不能以O(shè)racle身份刪除test文件,即便/tmp目錄對(duì)其他用戶開放w權(quán)限
②我們可以O(shè)racle身份修改test文件,因?yàn)槲覀儗?duì)test文件設(shè)置了777權(quán)限
這就是SBIT權(quán)限的好處,即不會(huì)限制正常的刪除,又可以防止意外或惡意的刪除。
【3.如何設(shè)置特殊權(quán)限】
如何設(shè)置權(quán)限我們已經(jīng)在前面提到過了,設(shè)置特殊權(quán)限也是同樣的。只是特殊權(quán)限在設(shè)置時(shí)是位于普通權(quán)限的前面,而且4代表SUID權(quán)限,2代表SGID權(quán)限,1代表SBIT權(quán)限。見下面例子:










注意最后一個(gè)7666權(quán)限的例子,大寫S和T和上面小寫的s和t不同,這是空的特殊權(quán)限的表示。因?yàn)楸旧?66已經(jīng)斷絕了所有人的執(zhí)行權(quán)限,所以特殊權(quán)限也就沒有意思了。
(來(lái)自《鳥哥的私房菜》的例子)
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。