理解Linux文檔的默認安全機制、隱藏屬性、特殊權限,媽媽在也不用擔心你從刪庫到跑路!!!
寫在前面
前面的章節 詳解Linux文檔屬性、擁有者、群組、權限、差異,介紹了文檔的基本權限,包括讀寫執行(r,w,x),還有若幹的屬性,包括是否為目錄(d)、文件(-)、鏈接文件(l)、擁有者、所屬群組、容量大小(字節數)、最後修改時間等等,可以通過chown、chgrp、chmod
來變更這些屬性和權限。
默認安全機制
首先,我們使用管理員root
賬戶分別創建文件file001
和目錄dir001
:
從上圖可以看到,
- 文件
file001
的默認權限為rw-r--r--
,即擁有者可讀寫,同群組下賬戶只能讀取文件,其他人也只能讀取文件。 - 目錄
dir001
的默認權限為rwxr-xr-x
,即擁有者可訪問、進入、編輯、刪除目錄下的文件,同一群組下的賬戶可以訪問、進入該目錄,其他人也可以訪問、進入該目錄。
然後,我們再使用一般justmine
賬戶分別創建文件file001
和目錄dir001
:
從上圖可以看到,
- 文件
file001
的默認權限為rw-rw-r--
,即擁有者可讀寫文件,同群組下的賬戶可讀寫文件,其他人只能讀取文件。 - 目錄
dir001
的默認權限為rwxrwxr-x
,即擁有者可訪問、進入、編輯、刪除目錄下的文件,同群組下的賬戶可以訪問、進入、編輯、刪除目錄下的文件,其他人也可以訪問、進入該目錄。
看到了吧,不同賬戶創建的文檔,它們的默認權限是不一樣的,這是因為Linux
系統應用了默認的文檔安全機制,那麽這些默認權限是如何計算出來的呢,這裏就需要弄清楚兩個概念。
文檔的默認權限
- 文件
文件的默認權限為rw-rw-rw-
x
權限,數字分數表示為666。所以,我們為shell文件分配執行權限,因為默認去掉這個權限的,現在曉得了吧。 - 目錄
目錄的默認權限為rwxrwxrwx
,數字分數表示為777。
umask
表示要拿掉的文檔默認權限。比如:002,即拿掉其他人的w
權限。
我們知道r、w、x對應的權限分為4、2、1,權限次序為擁有者、群組、其他人,那麽如果拿掉其他人的w
權限,umask應該設置為002。如果拿掉群組和其他人的w
權限,umask應該設置為022。這兩種默認的文檔安全機制,分別應用於管理員和一般賬戶。
示例說明:
root
賬戶:
justmine
賬戶:
根據這兩種默認的安全機制,現在我們來計算文件和目錄的實際默認權限
root管理員賬戶
- 創建文件時:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
- 創建目錄時:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x
justmine一般賬戶
- 創建文件時:(-rw-rw-rw-) - (--------w-) ==> -rw-rw-r--
- 創建目錄時:(drwxrwxrwx) - (d-------w-) ==> drwxrwxr-x
瞧見了吧,文檔實際的默認權限就是這麽來的。明白了這個機制,大家應該可以舉一反三建立自己的文檔默認安全機制了吧,嘿嘿。那麽,如何修改umask呢,超級簡單,直接在後面輸入權限分數,如:umask 002。順便說一下,supervisor
進程守護器就運用了這個機制來保護子進程,如下:
隱藏屬性
除了9大基本權限外,文檔還可以使用chattr
來設置隱藏屬性,比如完全不可修改,連文檔擁有者都不可修改此文檔哦。這些隱藏屬性,只能通過lsattr
來查看。
Centos7.x使用的
xfs
文件系統,而不是傳統的Ext2/Ext3/Ext4文件系統,並不支持所有的chattr
參數。
語法
chattr [+-=] [文件|目錄]
+ 增加隱藏屬性
- 拿掉隱藏屬性
= 設置隱藏屬性
用法
- 變更目錄為完全不可修改
- 變更文件為完全不可修改
看到了吧,這個屬性的作用,可以讓我們再也不用擔心誤操作rm -rf然後跑路了吧!!!
尤其是在系統安全層面上,如果需要強烈的系統安全,那麽隱藏屬性就顯得非常有用了。
特殊權限
什麽文檔還有特殊權限,前面9大權限腦殼都整大了,嗚嗚嗚。其實特殊權限才是最難理解的,包括SUID, SGID, SBIT。
- SUID
當s占據文檔擁有者x權限的位置時,稱為 Set UID,簡稱為 SUID,如:-rwsr-xr-x。- SUID 權限僅對二進制程序(binary program)有效;
- 執行者對於該程序需要具有 x 的可執行權限;
- 僅在執行該程序的過程中有效(run-time);
- 執行者將具有該程序擁有者 (owner)的權限(此權限最重要的作用,因為賦予了一般用戶通過二進制程序暫時獲得root賬戶的權利)。
- GUID
當s占據文檔群組x權限的位置時,稱為 Set GID,簡稱為 SGID,如:-rwxr-sr-x。- SGID 對二進制程序有用;
- 程序執行者對於該程序來說,需具備 x 的權限;
- 執行者在執行的過程中將會獲得該程序群組的支持(對於文檔多租戶的管理非常有用,請參考前面章節:Linux如何管理文檔多租戶);
- GBID
- 當使用者對於此目錄具有 w, x 權限,亦即具有寫入的權限時;
當使用者在該目錄下創建文件或目錄時,僅有自己與 root 才有權力刪除該文件;
備註:SBIT只對目錄有效,對於文件沒有任何效果
特殊權限的設置
前面我們介紹使用數字法設置文檔基本權限,如:chmod 777,表示擁有者、群組、其他人的權限組合。那麽特殊權限的設置呢,它的位置在擁有者的前面。它們的權限分數分別為SUID=4,SGID=2,SBID=1。
用法
設置文件test6的權限為-rwxr-sr-x,由於s占據了群組x的位置,所以特殊權限為SGID,那麽命令就為:chmod 2755 test6
總結
本篇我們詳細介紹了Linux文檔的默認安全機制、隱藏屬性、特殊權限,寫這幾篇的文章的目的,就是為了能夠玩轉Linux系統的多租戶。好記性不如爛筆頭,荀子說“不聞不若聞之,聞之不若見之,見之不若知之,知之不若行之,學至於行而止矣,行之,明也。”對於基礎知識的學習,光看過不了多久,可能就忘了,所以大家跟我一起行動起來吧。
如果你覺得本篇文章對您有幫助的話,感謝您的【推薦】。
如果你對 linux 感興趣的話可以關註我,我會定期的在博客分享我的學習心得。
理解Linux文檔的默認安全機制、隱藏屬性、特殊權限,媽媽在也不用擔心你從刪庫到跑路!!!