char详解
- 一、chattr是什么
- 二、基础语法
- [三、最核心 2 个属性(工作 99% 只用这两个)](#三、最核心 2 个属性(工作 99% 只用这两个))
- 四、其他次要属性(了解即可)
- [五、配套查看 lsattr](#五、配套查看 lsattr)
- 六、实战演示对比
- 七、注意事项
摘要:本文完整讲解chattr命令语法、高频属性与实操案例,区分它和普通权限的差异,给运维、开发者提供实用的服务器文件安全防护方案。
一、chattr是什么
chattr = change attribute,用来修改 文件 / 目录的隐藏扩展属性。
- 普通 ls -l 看不到这些属性,
就算是 root 用户也会被限制操作,用来保护关键文件防误删、防篡改。
配套查看命令:lsattr 查看隐藏属性。
二、基础语法
javascript
chattr [操作符] [属性] 文件/目录
操作符(3 种)
- +:增加某个属性
- -:移除某个属性
- =:只保留指定属性,清空其他所有属性
常用全局选项
- -R:递归作用到目录下所有文件、子目录
- -V:显示执行详情
三、最核心 2 个属性(工作 99% 只用这两个)
- i = immutable 不可变(最强锁)
文件加i 后:root 都不能删、改名、覆盖、编辑、硬链接,只能读。
示例
javascript
# 给test.txt上锁,禁止任何修改删除
chattr +i test.txt
# 解锁
chattr -i test.txt
# 递归锁住整个目录
chattr -R +i /etc/secure
适用场景 :保护/etc/passwd、/etc/shadow、关键配置文件,防止被篡改、删除。
- a = append only 仅追加
只能用 >> 往文件末尾追加内容;不能覆盖、不能删除、不能修改原有内容。
示例
javascript
# 日志文件只允许追加写入,防止删日志毁痕迹
chattr +a /var/log/mysql.log
# 取消追加限制
chattr -a /var/log/mysql.log
适用场景:服务器日志文件,保证日志无法被清空、篡改历史记录。
四、其他次要属性(了解即可)
- A:访问文件不更新 atime(减少磁盘 IO)
- d:dump 备份工具忽略该文件
- S:写入立即同步磁盘,不缓存
五、配套查看 lsattr
javascript
# 查看文件隐藏属性
lsattr test.txt
# 查看目录下所有文件
lsattr -a /var/log
输出里出现 i/a 就代表已开启对应保护。
六、实战演示对比
场景 1:文件加 i 锁
javascript
chattr +i a.txt
rm -rf a.txt # Operation not permitted(root也报错)
echo 123 > a.txt # 覆盖写入报错
mv a.txt b.txt # 改名报错
echo 123 >> a.txt# 追加也报错
场景 2:文件加 a 锁(日志专用)
javascript
chattr +a log.txt
echo "new line" >> log.txt # ✅ 允许追加
echo 123 > log.txt # ❌ 覆盖报错
rm log.txt # ❌ 删除报错
vim log.txt # ❌ 无法修改原有内容
七、注意事项
- 只有 root 能设置 / 取消 i、a 属性;
- 该功能只支持 ext3/ext4 文件系统,部分云服务器 XFS 不完全兼容;
- 系统关键目录 / /dev /tmp 不要随便加 i,极易导致系统崩溃。