淺談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)