1. 程式人生 > >淺談Linux4:檔案許可權(特殊)

淺談Linux4:檔案許可權(特殊)

系統預設許可權的設定

我們已經學習了檔案許可權的相關基本內容,包括如何檢視,如何修改,以及針對不同使用者主體怎樣修改。

但是,有沒有考慮過,當我們新建一個檔案或者資料夾時,並沒有設定關於許可權的任何引數,那麼它的許可權是多少呢?又是從哪裡來呢?


我們可以很容易的看到,新建檔案的許可權是644,而新建目錄的許可權是755.(喜歡用數字代表權限……)

為什麼會是755而不是其他許可權?這些許可權是從哪裡來的呢?

Linux內有一種機制叫做系統預設許可權,當我們執行新建操作時,檔案許可權就由此獲得。

預設許可權當然能更改,可以臨時修改,也可以永久修改。

先用umask檢視預設許可權

許可權等於022,那麼跟755有什麼關係呢?

檔案滿許可權是rwxrwxrwx,也就是777,777-022=755

這當然不是生掰硬套了……umask代表的值是系統保留許可權,滿許可權去除保留許可權,就是現在新建資料夾時的預設許可權啦。

同樣利用umask命令可以臨時修改保留許可權


永久修改涉及到兩個檔案,/etc/bashrc和/etc/profile,必須兩個檔案同時修改。


修改後,執行source   filename命令重新讀取,就可以永久設定啦。

值得注意的是,雖然可以修改系統預設許可權,但需要根據實際情況調整,畢竟開放權利越大,對系統安全性的挑戰也越大。

檔案的控制訪問(acl列表)

acl = access control

指定特殊使用者對特殊檔案具有特殊許可權

比如,我們之前建立的資料夾,要允許給xiaoxinxin執行和修改許可權,就可以通過acl列表來實現。

常用的命令是getfacl和setfacl

getfacl filename   檢視檔案的訪問列表


檔案許可權資訊可以輕鬆讀取到。

那如何實現剛剛說的那個小需求呢?給xiaoxinxin增加執行和修改許可權?

你也許會說,把檔案所有者改成xiaoxinxin不就行啦,再不濟,給加到檔案所有組也可以啊。

風險點在於:

    1,當檔案所有者更改後,其他使用者讀取這個檔案會有影響。這個資料夾之前的所有者是root,其他普通使用者無法讀取其中的內容,當修改成xiaoxinixn之後,其他普通使用者會有越權風險。

    2,當檔案所有組更改後,想象一下,原本root組的使用者可以看到一些“機密檔案”,執行一些“特殊操作”,把xiaoxinxin加到root組,是否意味著,他也可以進行同樣的操作?

這兩點風險,都是有關乎產品安全性的問題。

而acl列表的方式,相對於普通修改許可權的方式,則解決了這種特殊情況。針對於特定檔案(package)為特定使用者(xiaoxinxin)提供特殊操作(增加執行和修改許可權)

具體的設定方式是:

setfacl -m <u|g>:<username|groupname>:許可權 檔案|目錄
-m #設定
 u #使用者

 g #組


同樣也可以對特定組增加對特定檔案的特定操作,自己試試啦~

刪除列表也是可以的,命令是:

setfacl -x <u|g>:<username|groupname> 檔案|目錄

假如給一個檔案增加了多個acl列表,不想用的時候,難道要一個一個刪麼?

setfacl -b 檔案|目錄    

一條搞定,你值得擁有。


檔案許可權列表中有一個屬性叫做mask,是許可權掩碼,也就是能賦予使用者的最大許可權,這個值當然也是可以改變的,改過之後,再執行setfacl去新增的時候,許可權只能大於等於許可權掩碼。


(effective 代表有效許可權)

acl列表還有一個常用的性質在於,可以設定預設許可權。

也就是說,給了xiaoxinxin對package資料夾的讀寫許可權,當package資料夾中有新建的檔案時,這個屬性也能預設繼承。

setfacl -m d:<u|g>:<username|groupname>:rwx  資料夾


特殊許可權

普通的檔案許可權有三位:u位,g位,o位

特殊的檔案許可權也有三位:suid(冒險位),sgid(強制位),sticky(粘制位)

suid   

運用目標:二進位制可執行檔案

結果:檔案內所記錄的程式產生的程序的所有人為檔案所有人,與程序發起者無關。

設定方式: chmod u+s filename    (又因為suid=4,所以數字修改方式是 chmod 4XXX filename)


sgid

運用目標:二進位制可執行檔案或目錄

結果:

        對二進位制可執行檔案,任何人執行該檔案,程式產生的程序的所有組都是檔案的所有組,和程序發起人的組無關。

        對目錄,目錄中新建的所有檔案的所有組都自動歸屬到目錄的所有組之中,和檔案建立者所在的組無關。

設定方式:chmod g+s filename  (又因為sgid=2,所以數字修改方式是 chmod 2XXX filename)


sticky

運用目標:目錄

結果:當一個目錄上添加了t許可權之後,目錄中的檔案只能被檔案的所有者刪除。

設定方式:chmod o+t directory  (又因為sticky=1,所以數字修改方式是 chmod 1XXX driectory)