命令详解 chattr

chattr 用于修改 Linux 文件系统支持的 inode 标志,例如不可修改、仅追加和不参与某些备份流程。它不是通用的“扩展属性”编辑器,也不等同于 ACL、SELinux 上下文或 xattr。

风险提示:+i 和 +a 可能阻止应用写入、日志轮转、软件升级和文件删除。生产环境修改前要记录目标、原因和恢复命令,不要对根目录或大范围路径递归试验。

基本语法

chattr [options] mode files...

模式中的运算符:

  • +:增加指定标志。
  • -:移除指定标志。
  • =:仅保留指定标志,可能清除其他标志,谨慎使用。

先查看再修改:

lsattr -- /path/to/file
sudo chattr +i -- /path/to/file
lsattr -- /path/to/file
sudo chattr -i -- /path/to/file

-- 用于结束选项解析,避免以连字符开头的文件名被当成参数。

常见标志

标志 典型作用 主要注意事项
i immutable,不允许修改、删除、重命名或创建硬链接 应用更新、包管理、日志轮转也会失败
a append only,仅允许追加写入 不等于日志防篡改;有权限的管理员仍可移除标志
A 不更新 atime 与挂载参数、内核和文件系统行为共同决定
d dump 程序可忽略 只对理解该标志的工具有意义
S 同步更新 可能明显降低写入性能

不同内核和文件系统对标志的支持不同。即使命令返回成功,也应通过 lsattr 和实际读写测试确认效果。

典型用法

临时保护关键配置

sudo chattr +i /etc/example/app.conf
lsattr /etc/example/app.conf

需要变更时按受控流程解锁、修改、验证并重新保护:

sudo chattr -i /etc/example/app.conf
sudoedit /etc/example/app.conf
sudo chattr +i /etc/example/app.conf

更成熟的做法是把配置纳入版本控制、配置管理和审计,而不是仅依赖 +i。

仅追加日志

sudo chattr +a /var/log/example.log

这会影响日志轮转。实施前必须验证应用、logrotate 和备份流程,并准备 chattr -a 的维护步骤。对抗恶意管理员时它不是可信的审计边界,应使用远程日志、WORM 存储或独立审计系统。

权限与文件系统限制

  • 修改某些标志需要 root 权限或相应 capability,普通所有者并不一定能操作。
  • ext2/3/4 支持较完整;XFS、Btrfs、overlayfs、网络文件系统和容器卷可能只支持部分标志或行为不同。
  • 符号链接、绑定挂载、快照和只读挂载可能让结果与预期不同。
  • chattr 不显示或修改 POSIX ACL;ACL 使用 getfacl / setfacl。
  • SELinux 上下文使用 ls -Z、restorecon 等工具管理。

排障顺序

遇到 Operation not permitted 时,按以下顺序核查:

lsattr -d -- /path/to/file
namei -l /path/to/file
findmnt -T /path/to/file
getfacl -- /path/to/file
ls -lZ /path/to/file

还要检查只读挂载、容器 capability、NFS 导出策略、SELinux/AppArmor 日志以及是否正在操作符号链接目标。

官方参考

Copyright © yan-jian.com 2023 - 2026 · Powered by GitBook更新时间: 2026-10-17 14:18:57

results matching ""

    No results matching ""