linux系統下文件的特殊權限

是不是感覺linux文件權限太復雜了,用戶、組、文件權限、默認權限、隱藏屬性、acl,現在怎么又來一個特殊權限。心疼頭發三秒~。

我們來看一個文件

ls?/usr/bin/passwd??-l -rwsr-xr-x.?1?root?root?27832?Jun?10??2014?/usr/bin/passwd

發現沒有,怎么出現了一個奇怪的東西s。這個s出現在了文件所有者的x上面,此時就被稱為Set UID,簡稱為SUID。如果出現在所屬組的x上面,則表示SGID。如果是在其他人的x上面,則表示Sticky。

下面通過一個表格來解釋下各特殊權限的用處:

文件 目錄
SUID? 此用戶將繼承此程序的所有者權限? 無意義
SGID 此用戶將繼承此程序的所屬組權限 此目錄下所有用戶新建文件都自動繼承此目錄的用戶組??
Sticky 無意義 目錄中每個用戶僅能刪除、移動或改名自己的文件或目錄

下面,我們通過/usr/bin/passwd這個文件來講解下SUID的用途。

我們知道,linux下每個用戶都可以修改自己的密碼,而root則可以修改所有用戶的密碼。那你有沒有想過,為什么普通用戶也可以修改自己的密碼?密碼不是保存在/etc/shadow文件中的么?這個文件對于普通用戶沒有寫入權限阿。

#?ls?-l?/etc/shadow ----------?1?root?root?969?Sep?10?09:37?/etc/shadow

這個就是SUID的用途了,普通用戶通過passwd命令來修改自己的密碼。執行期間,用戶會暫時擁有該文件所有者即root的權限,所以普通用戶可以修改自己的密碼。如果該文件特殊權限為SGID,那么執行期間就會擁有該文件所屬組的權限。

SGID除了可以作用于文件外,還可以作用于目錄,注意,對于文件和目錄,它的作用完全不同。我們通過一個場景來講解SGID對于目錄的作用。

下面,我們模擬一個場景:公司現在需要開發一個項目,原型圖已經給出,需要交給設計部門design進行設計。現在創建一個目錄project1_ps。design部門所有人員對這個目錄下的文件均具有rwx權限。

我們知道,在linux中,當新建一個文件或目錄時,所有者是自己,所屬組為自己所屬的組。這樣一來,當設計師a新建了一個文件時,其他用戶對這個文件是其他人的權限,不符合我們的要求。所以,我們需要SGID來完成需求。

#?groupadd?design??#創建design用戶組 #?useradd?-G?design?--no-create-home?dgn1?#?創建用戶 #?useradd?-G?design?--no-create-home?dgn2?#?創建用戶 #?id?dgn1 uid=1003(dgn1)?gid=1004(dgn1)?組=1004(dgn1),1003(design) #?id?dgn2 uid=1004(dgn2)?gid=1005(dgn2)?組=1005(dgn2),1003(design) ? #?mkdir?design?#?工作目錄 #?chgrp?design?design/ #?chmod?2770?design/??<p>最后,我們來看看Sticky。這個非常好理解,目錄中每個用戶僅能刪除、移動或改名自己的文件或目錄。其實/tmp目錄就是使用該特殊權限。</p><pre class="brush:php;toolbar:false">#?ll?/tmp?-d drwxrwxrwt.?9?root?root?868352?Sep?13?08:24?/tmp

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享