天天看點

Linux就該這麼學--檔案權限

檔案權限與歸屬

盡管在Linux系統中一切都是檔案,但是每個檔案的類型不盡相同,是以Linux系統使用了不同的字元來加以區分,常見的字元如下所示。

 -:普通檔案。

d:目錄檔案。

l:連結檔案。

b:塊裝置檔案。

c:字元裝置檔案。

p:管道檔案。

Linux就該這麼學--檔案權限
Linux就該這麼學--檔案權限

檔案的讀、寫、執行權限可以簡寫為rwx,亦可分别用數字4、2、1來表示,檔案所有者,所屬組及其他使用者權限之間無關聯,如表5-5所示。                                       

檔案權限的字元與數字表示

Linux就該這麼學--檔案權限
Linux就該這麼學--檔案權限

數字和字母可以來回定義檔案的權限值 

Linux就該這麼學--檔案權限

檔案的特殊權限 

 SUID

SUID是一種對二進制程式進行設定的特殊權限,可以讓二進制程式的執行者臨時擁有屬主的權限(僅對擁有執行權限的二進制程式有效).臨時有效,一次性的。

預設使用者在檢視/etc/shadow檔案中。仔細檢視這個檔案就會發現它的預設權限是000,也就是說除了root管理者以外,所有使用者都沒有檢視或編輯該檔案的權限。

Linux就該這麼學--檔案權限
Linux就該這麼學--檔案權限
Linux就該這麼學--檔案權限

 SGID

SGID主要實作如下兩種功能:

讓執行者臨時擁有屬組的權限(對擁有執行權限的二進制程式進行設定);

在某個目錄中建立的檔案自動繼承該目錄的使用者組(隻可以對目錄進行設定)

 SGID的第一種功能是參考SUID而設計的,不同點在于執行程式的使用者擷取的不再是檔案所有者的臨時權限,而是擷取到檔案所屬組的權限。舉例來說,在早期的Linux系統中,/dev/kmem是一個字元裝置檔案,用于存儲核心程式要通路的資料

[[email protected] tmp]# mkdir 2021_test
[[email protected] tmp]# ls -ald 2021_test/
drwxr-xr-x. 2 root root 6 Jan 16 22:22 2021_test/
[[email protected] tmp]# chmod -Rf 777 2021_test/
[[email protected] tmp]# ls -ald 2021_test/
drwxrwxrwx. 2 777 root 6 Jan 16 22:22 2021_test/
[[email protected] tmp]# chmod  -Rf g+s 2021_test/
[[email protected] tmp]# ls -ald 2021_test/
drwxrwsrwx. 2 777 root 6 Jan 16 22:22 2021_test/
[[email protected] tmp]# 
           
Linux就該這麼學--檔案權限

 SBIT

當目錄被設定SBIT特殊權限位後,檔案的其他人權限部分的x執行權限就會被替換成t或者T,原本有x執行權限則會寫成t,原本沒有x執行權限則會被寫成T。

當然普通使用者不能删,root使用者是可以删的

Linux就該這麼學--檔案權限
Linux就該這麼學--檔案權限
Linux就該這麼學--檔案權限

檔案的隐藏屬性

chattr指令用于設定檔案的隐藏權限,格式為“chattr [參數] 檔案”。如果想要把某個隐藏功能添加到檔案上,則需要在指令後面追加“+參數”,如果想要把某個隐藏功能移出檔案,則需要追加“-參數”

i	無法對檔案進行修改;若對目錄設定了該參數,則僅能修改其中的子檔案内容而不能建立或删除檔案
a	僅允許補充(追加)内容,無法覆寫/删除内容(Append Only)
S	檔案内容在變更後立即同步到硬碟(sync)
s	徹底從硬碟中删除,不可恢複(用0填充原檔案所在硬碟區域)
A	不再修改這個檔案或目錄的最後通路時間(atime)
b	不再修改檔案或目錄的存取時間
D	檢查壓縮檔案中的錯誤
d	使用dump指令備份時忽略本檔案/目錄
c	預設将檔案或目錄進行壓縮
u	當删除該檔案後依然保留其在硬碟中的資料,友善日後恢複
t	讓檔案系統支援尾部合并(tail-merging)
x	可以直接通路壓縮檔案中的内容
           
Linux就該這麼學--檔案權限

lsattr指令

lsattr指令用于顯示檔案的隐藏權限,格式為“lsattr [參數] 檔案”。在Linux系統中,檔案的隐藏權限必須使用lsattr指令來檢視,平時使用的ls之類的指令則看不出端倪:

[[email protected] tmp]# lsattr  chattr_test2021 
----ia-A---------- chattr_test2021
[[email protected] tmp]# 
           

檔案通路控制清單

就需要用到檔案的通路控制清單(FACL)了。通俗來講,基于普通檔案或目錄設定ACL其實就是針對指定的使用者或使用者組設定檔案或目錄的操作權限。另外,如果針對某個目錄設定了FACL,則目錄中的檔案會繼承其FACL;若針對檔案設定了FACL,則檔案不再繼承其所在目錄的ACL。

Linux就該這麼學--檔案權限

setfacl指令

setfacl指令用于管理檔案的ACL規則,格式為“setfacl [參數] 檔案名稱”。檔案的ACL提供的是在所有者、所屬組、其他人的讀/寫/執行權限之外的特殊權限控制,使用setfacl指令可以針對單一使用者或使用者組、單一檔案或目錄來進行讀/寫/執行權限的控制。其中,針對目錄檔案需要使用-R遞歸參數;針對普通檔案則使用-m參數;如果想要删除某個檔案的ACL,則可以使用-b參數。下面來設定使用者在/root目錄上的權限

Linux就該這麼學--檔案權限

 getfacl指令

getfacl指令用于顯示檔案上設定的ACL資訊,格式為“getfacl 檔案名稱”。Linux系統中的指令就是這麼又可愛又好記。想要設定ACL,用的是setfacl指令;要想檢視ACL,則用的是getfacl指令。下面使用getfacl指令顯示在root管理者家目錄上設定的所有ACL資訊

Linux就該這麼學--檔案權限

su指令與sudo服務

su指令可以解決切換使用者身份的需求,使得目前使用者在不登出的情況下,順暢地切換到其他使用者,比如從root管理者切換至普通使用者,上面的su指令與使用者名之間有一個減号(-),這意味着完全切換到新的使用者,即把環境變量資訊也變更為新使用者的相應資訊,而不是保留原始的資訊。

sudo指令用于給普通使用者提供額外的權限來完成原本root管理者才能完成的任務,格式為“sudo [參數] 指令名稱”

-h 列出幫助資訊
-l 列出目前使用者可執行的指令
-u 使用者名或UID值 以指定的使用者身份執行指令
-k 清空密碼的有效時間,下次執行sudo時需要再次進行密碼驗證
-b 在背景執行指定的指令
-p 更改詢問密碼的提示語
sudo指令具有如下功能:

限制使用者執行指定的指令:

記錄使用者執行的每一條指令;

配置檔案(/etc/sudoers)提供集中的使用者管理、權限與主機等參數;

驗證密碼的後5分鐘内(預設值)無須再讓使用者再次驗證密碼。
           

編輯visudo配置檔案

Linux就該這麼學--檔案權限
Linux就該這麼學--檔案權限

 如果需要讓某個使用者隻能使用root管理者的身份執行指定的指令,切記一定要給出該指令的絕對路徑,否則系統會識别不出來。我們可以先使用whereis指令找出指令所對應的儲存路徑,然後把配置檔案第99行的使用者權限參數修改成對應的路徑即可

Linux就該這麼學--檔案權限

繼續閱讀