在Linux中用chattr和lsattr命令管理檔案和目錄屬性

linux.cn發表於2015-06-10

為了允許新增資料,防止更改或者刪除等,檔案和資料夾可以設定了特定的控制屬性。例如,你可以在關鍵的系統檔案或者資料夾中啟用屬性,然後沒有任何使用者,包括root,可以刪除或者修改它,比如不允許使用像dump這樣的命令等備份工具去備份一個特定的檔案或者資料夾,等等。這些屬性只可以在ext2,ext3或者ext4檔案系統中的檔案和資料夾上設定。


有兩個命令 lsattr 和 chattr 用來管理屬性。下面是常用屬性的列表。

屬性

描述

a (append)

允許在檔案中進行追加操作

A

這個屬性不允許更新檔案的訪問時間

c (compressed)

啟用這個屬性時,檔案在磁碟上會自動壓縮

d (dump)

不能使用dump命令備份檔案

D

設定了資料夾的D屬性時,更改會在同步儲存在磁碟上

e (extent format)

它表明,該檔案使用磁碟上的塊的對映擴充套件

i (immutable)

在檔案上啟用這個屬性時,我們不能更改、重新命名或者刪除這個檔案

j (journaling)

設定了這個屬性時,檔案的資料首先儲存在日誌中,然後再寫入檔案

S (synchronous)

設定了這個屬性時,變更或更改同步儲存到磁碟上

chattr屬性中可以使用的不同選項 :
  • -R 遞迴地修改資料夾和子資料夾的屬性
  • -V chattr命令會輸出帶有版本資訊的冗餘資訊
  • -f 忽略大部分錯誤資訊
在chattr中用於設定或者取消屬性的 操作符
  • ‘+’ 符號用來為檔案和資料夾設定屬性,
  • ‘-’ 符號用來移除或者取消屬性
  • ‘=’ 使它們成為檔案有的唯一屬性。
chattr 和 lsattr 命令的基本語法 :
# chattr <options> <attributes> <file or Directory >
# lsattr <File or Directory>
例:1 使用‘i’屬性使檔案不可更改
[root@linuxtechi ~]# chattr +i dummy_data
[root@linuxtechi ~]# lsattr dummy_data
----i----------- dummy_data
現在試著刪除或者修改檔案
[root@linuxtechi ~]# rm -f dummy_data
rm: cannot remove 'dummy_data': Operation not permitted

[root@linuxtechi ~]# echo "test" >> dummy_data
-bash: dummy_data: Permission denied
例:2 移除不可更改屬性
[root@linuxtechi ~]# chattr -i dummy_data
[root@linuxtechi ~]# lsattr dummy_data
---------------- dummy_data
例:3 在檔案中只允許追加操作
[root@linuxtechi ~]# chattr +a dummy_data
[root@linuxtechi ~]# lsattr dummy_data
-----a---------- dummy_data
現在試著把fstab檔案的內容追加到dummy_data檔案
[root@linuxtechi ~]# cat /etc/fstab >> dummy_data
[root@linuxtechi ~]#
例 :4 使用 -R 選項和 ‘+i’ 屬性使資料夾和它的子資料夾成為安全目錄
讓我們來新建一個sysadmin資料夾和它的子資料夾
[root@linuxtechi ~]# mkdir sysadmin
[root@linuxtechi ~]# mkdir sysadmin/admim_{1,2,3,4,5}
[root@linuxtechi ~]# ls -l sysadmin/
total 0
drwxr-xr-x. 2 root root 6 Apr 19 09:50 admim_1
drwxr-xr-x. 2 root root 6 Apr 19 09:50 admim_2
drwxr-xr-x. 2 root root 6 Apr 19 09:50 admim_3
drwxr-xr-x. 2 root root 6 Apr 19 09:50 admim_4
drwxr-xr-x. 2 root root 6 Apr 19 09:50 admim_5
在sysadmin資料夾遞迴設定不可更改屬性
[root@linuxtechi ~]# chattr -R +i sysadmin

[root@linuxtechi ~]# lsattr -R sysadmin/
----i----------- sysadmin/admim_1
sysadmin/admim_1:
----i----------- sysadmin/admim_2
sysadmin/admim_2:
----i----------- sysadmin/admim_3
sysadmin/admim_3:
----i----------- sysadmin/admim_4
sysadmin/admim_4:
----i----------- sysadmin/admim_5
sysadmin/admim_5:
[root@linuxtechi ~]#
現在試著用rm命令刪除資料夾
[root@linuxtechi ~]# rm -rf sysadmin
rm: cannot remove ‘sysadmin/admim_1’: Permission denied
rm: cannot remove ‘sysadmin/admim_2’: Permission denied
rm: cannot remove ‘sysadmin/admim_3’: Permission denied
rm: cannot remove ‘sysadmin/admim_4’: Permission denied
rm: cannot remove ‘sysadmin/admim_5’: Permission denied
[root@linuxtechi ~]#
使用以下命令遞迴取消屬性
[root@linuxtechi ~]# chattr -R -i sysadmin
評論(1)

相關文章