chattr — 變更 Linux 擴充檔案屬性
設定 ext 檔案系統的擴充屬性,如 immutable(不可修改)。
語法
chattr [操作符號][屬性] 檔案...
常用選項
| 選項 | 說明 | 範例 |
|---|---|---|
+屬性 |
新增指定屬性 | chattr +i file |
-屬性 |
移除指定屬性 | chattr -i file |
=屬性 |
設定為精確的屬性集合(其他清除) | chattr =i file |
-R |
遞迴套用到目錄 | chattr -R +i /etc/ |
i |
不可修改(immutable):任何人都不能改或刪 | chattr +i important.conf |
a |
僅可附加(append-only):只能 >> 不能 > | chattr +a /var/log/secure.log |
e |
使用 extent 格式(ext4 預設,通常已設定) | |
使用範例
範例 1:鎖定重要設定檔(+i)
設定 immutable 旗標,防止任何人意外修改或刪除,連 root 也不行。
$ sudo chattr +i /etc/hosts
要解鎖時:sudo chattr -i /etc/hosts,然後再進行修改。
範例 2:設定日誌只能附加(+a)
設定 append-only,確保日誌只能新增不能被刪除或覆蓋,防止日誌竄改。
$ sudo chattr +a /var/log/app/audit.log
範例 3:解除 immutable 鎖定
需要修改被 +i 保護的檔案時,先移除旗標,修改後再重新加回。
$ sudo chattr -i /etc/hosts && sudo nano /etc/hosts && sudo chattr +i /etc/hosts
範例 4:確認屬性是否設定
用 lsattr 確認設定是否生效。
$ lsattr /etc/hosts
----i----------- /etc/hosts
常見錯誤與排錯
chattr: Operation not permitted while setting flags on /etc/file
- 原因
- 需要 root 權限設定擴充屬性。
- 解法
- 使用 sudo chattr +i file。
cannot open directory /path: Permission denied
- 原因
- chattr 不能在 tmpfs 等不支援 ext 屬性的檔案系統上使用。
- 解法
- chattr 僅適用於 ext2/ext3/ext4/btrfs。