一、檔案的隐藏屬性
檔案的隐藏屬性用于規定檔案的特殊用法,尤其在系統安全方面的相關特性。
文法
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的權限時,如果是使用者則不能修改(如下圖)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL3UTM1UzN0gDMyEzNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
是以要切換使用者進行修改
可見修改成功
如果要取消加鎖,可以這樣
檢視隐藏屬性
lsattr指令用于顯示用chattr指令設定的檔案屬性。
文法
lsattr [-adlRvV][檔案或目錄…]
參數 | 說明 |
---|---|
-a | 顯示所有檔案和目錄,包括以".“為名稱開頭字元的額外内建,現行目錄”.“與上層目錄”…"。 |
-d | 顯示,目錄名稱,而非其内容 |
-l | 此參數目前沒有任何作用 |
-R | 遞歸處理,将指定目錄下的所有檔案及子目錄一并處理 |
-v | 顯示檔案或目錄版本 |
-V | 顯示版本資訊 |
例1:顯示log所有檔案和目錄
例2:顯示檔案或目錄版本
二、預設權限
使用者在建立檔案或目錄時自動為其賦予預設操作權限,這個權限值預設是666(檔案rw-rw-rw-)或777(目錄drwxrwxrwx),即每一類使用者在建立檔案時賦予的最大值是6,系統不允許建立文本檔案時就賦予它執行權限,而是要在建立後用chmod指令增加這個權限。但是目錄檔案如果不具備執行權限的話,使用者就不能對目錄進行讀寫,是以在建立目錄權限時,權限值就賦予7。
umask顯示設定建立檔案或目錄時的預設權限
文法
umask【選項】【參數】
選項
-p:輸出的權限掩碼可直接作為指令來執行;
-S:以符号方式輸出權限掩碼。
參數
權限掩碼:指定權限掩碼
例1 :umask顯示預設權限掩碼
例2:umask -S以符号方式輸出權限掩碼
例3:umask -p輸出的權限掩碼可直接作為指令來執行
預設掩碼值的計算
在例1中用umask傳回了0022,那麼它是怎麼計算出來的呐?
其實umask指令用于設定使用者建立檔案或目錄預設權限時,它與chmod指令中權限值的含義剛好相反
例1 用ls -ld指令顯示log目錄權限
權限值為755,那麼umask值=777-755=022
同樣檔案的umask值也是這樣算出來的
三、特殊權限
Linux中除了常見的讀( r)、寫(w)、執行(x)權限外,還有三種特殊的權限,分别是setuid,setgid和stick 位。
其中之一就是setuid位,八進制表示為4000。
例1
在/home/liuao下建立了一個檔案new1,并檢視檔案屬性
檔案的建立者預設就是所有者,是以檔案new1的所有者為liuao 。
接着管理者root給touch指令添加setuid權限:
權重限時可以 chmod u+s /bin/touch # 或 chmod 4755 /bin/touch兩種方法
接着檢視touch的權限
然後再用普通使用者liuao建立檔案new2,看到如下結果:
可以看到new2檔案擁有者是root。通過這個例子,我們可以說一下setuid的作用,即當一個可執行檔案(指令touch)設定setuid權限後,當普通使用者liuao執行touch建立新檔案時,實際上是以touch指令所有者root的身份在執行此操作,這就是SetUID的作用。
再一個是setgid,八進制表示為2000,類似于setuid,隻不過setuid改的是擁有者而它改的是組群
例2
在/home/liuao下建一個檔案new3,并檢視檔案屬性
接着切換到root下,給touch指令添加setgid權限
然後回到liuao下,可以發現檔案組群改變。
最後一個是sticky,八進制表示位1000。它是從UNIX中繼承下來的,在LINUX中将會忽略檔案的sticky位。但是對一個目錄設定sticky位,那麼将能阻止使用者删除或者重命名檔案,除非使用者是這個目錄的所有者、檔案所有者或者超級使用者。它通常用來控制對共享目錄(例如/tmp)的通路。
例3
先用ll -d羅列出目前目錄的資訊
然後進入/tmp,并建立檔案aaa
然後切換使用者為liuao,并建立bbb
接着用使用者liuao來删除root建立的aaa
你會發現删除不掉aaa,而隻能删除使用者自己建立的bbb
這個就是sticky的用處