1. 程式人生 > 其它 >Linux chattr命令詳解:修改檔案系統的許可權屬性

Linux chattr命令詳解:修改檔案系統的許可權屬性

管理 Linux 系統中的檔案和目錄,除了可以設定普通許可權和特殊許可權外,還可以利用檔案和目錄具有的一些隱藏屬性。

chattr 命令,專門用來修改檔案或目錄的隱藏屬性,只有 root 使用者可以使用。該命令的基本格式為:

[root@localhost ~]# chattr [+-=] [屬性] 檔案或目錄名

+ 表示給檔案或目錄新增屬性,- 表示移除檔案或目錄擁有的某些屬性,= 表示給檔案或目錄設定一些屬性。

表 1 列出了常用的一些屬性及功能。

表 1 chattr 命令常用的屬性選項及功能

屬性選項 功能
i 如果對檔案設定 i 屬性,那麼不允許對檔案進行刪除、改名,也不能新增和修改資料;
如果對目錄設定 i 屬性,那麼只能修改目錄下檔案中的資料,但不允許建立和刪除檔案;
a 如果對檔案設定 a 屬性,那麼只能在檔案中増加資料,但是不能刪除和修改資料;
如果對目錄設定 a 屬性,那麼只允許在目錄中建立和修改檔案,但是不允許刪除檔案;
u 設定此屬性的檔案或目錄,在刪除時,其內容會被儲存,以保證後期能夠恢復,常用來防止意外刪除檔案或目錄。

s

和 u 相反,刪除檔案或目錄時,會被徹底刪除(直接從硬碟上刪除,然後用 0 填充所佔用的區域),不可恢復。

【例 1】 給檔案賦予 i 屬性。

[root@localhost ~]# touch ftest
#建立測試檔案
[root@localhost ~]# chattr +i ftest
[root@localhost 
~]# rm -rf ftest rm:cannot remove 'ftest':Operation not permitted #無法刪除"ftesr",操作不允許 #被賦予i屬性後,root不能刪除 [root@localhost ~]# echo 111>>ftest bash:ftest:Permission denied #許可權不夠,不能修改檔案中的資料

可以看到,設定有 i 屬性的檔案,即便是 root 使用者,也無法刪除和修改資料。

【例 2】為目錄賦予 i 屬性。

[root@localhost ~]# mkdir dtest
#建立測試目錄
[root@localhost dtest]# touch dtest
/abc #再建立一個測試檔案abc [root@localhost ~]# chattr +i dtest #給目錄賦予i屬性 [root@localhost ~]# cd dtest [root@localhost dtest]# touch bed touch: cannot touch 'bed':Permission denied #無法建立"bcd",許可權不夠,dtest目錄不能新建檔案 [root@localhost dtest]# echo 11>>abc [root@localhost dtest]# cat abc 11 #可以修改檔案內容 [root@localhost dtest]# rm -rf abc rm: cannot remove 'abc': Permission denied #無法刪除"abc",許可權不夠

一旦給目錄設定 i 屬性,即使是 root 使用者,也無法在目錄內部新建或刪除檔案,但可以修改檔案內容。

給設定有 i 屬性的檔案刪除此屬性也很簡單,只需將 chattr 命令中 + 改為 - 即可。

【例 3】演示 a 屬性的作用。
假設有這樣一種應用,我們每天自動實現把伺服器的日誌備份到指定目錄,備份目錄可設定 a 屬性,變為只可建立檔案而不可刪除。命令如下:

[root@localhost ~]# mkdir -p /back/log
#建立備份目錄
[root@localhost ~]# chattr +a /back/log
#賦予a屬性
[root@localhost ~]# cp /var/log/messages /back/log
#可以複製檔案和新建檔案到指定目錄中
[root@localhost ~]# rm -rf /back/log/messages
rm: cannot remove '/back/log/messages': Permission denied
#無法刪除 /back/log/messages,操作不允許

注意,通常情況下,不要使用 chattr 命令修改 /、/dev/、/tmp/、/var/ 等目錄的隱藏屬性,很容易導致系統無法啟動。另外,chatrr 命令常與 lsattr 命令合用,前者修改檔案或目錄的隱藏屬性,後者用於檢視是否修改成功。有關 lsattr 命令,放到下節講解。