天天看點

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

一、檔案的隐藏屬性

檔案的隐藏屬性用于規定檔案的特殊用法,尤其在系統安全方面的相關特性。

文法

chattr [ -RV ] [ -v version ] [ mode ] file1,file2…

其中mode部分是由+ - =和[ASacDdIijsTtu]這些字元組合的,這部分是用來控制檔案的屬性。

-R:遞歸處理,将指令目錄下的所有檔案及子目錄一并處理;
-v<版本編号>:設定檔案或目錄版本;
-V:顯示指令執行過程;
           
模式 說明
+ 追加參數
- 移除參數
= 更新為指定參數設定
a 即append,設定該參數後,隻能向檔案中添加資料,而不能删除,多用于伺服器日志檔案安全,隻有root才能設定這個屬性。
b 不更新檔案或目錄的最後存取時間
c 即compresse,設定檔案是否經壓縮後再存儲。讀取時需要經過自動解壓操作。
d 即no dump,設定檔案不能成為dump程式的備份目标。
i 設定檔案不能被删除、改名、設定連結關系,同時不能寫入或新增内容。i參數對于檔案系統的安全設定有很大幫助。
s 保密性地删除檔案或目錄
u 與s相反,當設定為u時,資料内容其實還存在磁盤中,可以用于undeletion
S 即時更新檔案或目錄

例如:用chattr指令防止系統中某個檔案被修改

chattr +i /var/log/messages
           

例如:讓某個檔案隻能往裡面追加資料,但不能删除,适用于各種日志檔案

chattr +a /var/log/messages
           

注意:使用chattr指令時應注意權限問題

例如:修改messages的權限時,如果是使用者則不能修改(如下圖)

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限
Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

是以要切換使用者進行修改

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限
Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

可見修改成功

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

如果要取消加鎖,可以這樣

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

檢視隐藏屬性

lsattr指令用于顯示用chattr指令設定的檔案屬性。

文法

lsattr [-adlRvV][檔案或目錄…]

參數 說明
-a 顯示所有檔案和目錄,包括以".“為名稱開頭字元的額外内建,現行目錄”.“與上層目錄”…"。
-d 顯示,目錄名稱,而非其内容
-l 此參數目前沒有任何作用
-R 遞歸處理,将指定目錄下的所有檔案及子目錄一并處理
-v 顯示檔案或目錄版本
-V 顯示版本資訊

例1:顯示log所有檔案和目錄

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限
Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

例2:顯示檔案或目錄版本

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限
Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

二、預設權限

使用者在建立檔案或目錄時自動為其賦予預設操作權限,這個權限值預設是666(檔案rw-rw-rw-)或777(目錄drwxrwxrwx),即每一類使用者在建立檔案時賦予的最大值是6,系統不允許建立文本檔案時就賦予它執行權限,而是要在建立後用chmod指令增加這個權限。但是目錄檔案如果不具備執行權限的話,使用者就不能對目錄進行讀寫,是以在建立目錄權限時,權限值就賦予7。

umask顯示設定建立檔案或目錄時的預設權限

文法

umask【選項】【參數】

選項

-p:輸出的權限掩碼可直接作為指令來執行;
-S:以符号方式輸出權限掩碼。
           

參數

權限掩碼:指定權限掩碼

例1 :umask顯示預設權限掩碼

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

例2:umask -S以符号方式輸出權限掩碼

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

例3:umask -p輸出的權限掩碼可直接作為指令來執行

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

預設掩碼值的計算

在例1中用umask傳回了0022,那麼它是怎麼計算出來的呐?

其實umask指令用于設定使用者建立檔案或目錄預設權限時,它與chmod指令中權限值的含義剛好相反

例1 用ls -ld指令顯示log目錄權限

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

權限值為755,那麼umask值=777-755=022

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

同樣檔案的umask值也是這樣算出來的

三、特殊權限

Linux中除了常見的讀( r)、寫(w)、執行(x)權限外,還有三種特殊的權限,分别是setuid,setgid和stick 位。

其中之一就是setuid位,八進制表示為4000。

例1

在/home/liuao下建立了一個檔案new1,并檢視檔案屬性

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限
Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

檔案的建立者預設就是所有者,是以檔案new1的所有者為liuao 。

接着管理者root給touch指令添加setuid權限:

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

權重限時可以 chmod u+s /bin/touch # 或 chmod 4755 /bin/touch兩種方法

接着檢視touch的權限

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

然後再用普通使用者liuao建立檔案new2,看到如下結果:

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

可以看到new2檔案擁有者是root。通過這個例子,我們可以說一下setuid的作用,即當一個可執行檔案(指令touch)設定setuid權限後,當普通使用者liuao執行touch建立新檔案時,實際上是以touch指令所有者root的身份在執行此操作,這就是SetUID的作用。

再一個是setgid,八進制表示為2000,類似于setuid,隻不過setuid改的是擁有者而它改的是組群

例2

在/home/liuao下建一個檔案new3,并檢視檔案屬性

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

接着切換到root下,給touch指令添加setgid權限

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

然後回到liuao下,可以發現檔案組群改變。

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

最後一個是sticky,八進制表示位1000。它是從UNIX中繼承下來的,在LINUX中将會忽略檔案的sticky位。但是對一個目錄設定sticky位,那麼将能阻止使用者删除或者重命名檔案,除非使用者是這個目錄的所有者、檔案所有者或者超級使用者。它通常用來控制對共享目錄(例如/tmp)的通路。

例3

先用ll -d羅列出目前目錄的資訊

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

然後進入/tmp,并建立檔案aaa

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限
Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

然後切換使用者為liuao,并建立bbb

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

接着用使用者liuao來删除root建立的aaa

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限
Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

你會發現删除不掉aaa,而隻能删除使用者自己建立的bbb

Linux學習筆記——檔案的隐藏屬性、預設權限和特殊權限

這個就是sticky的用處

繼續閱讀