非常游戏网
如何在Linux中修改文件为只读不可写 Linux设置只读文件权限的方法

如何在Linux中修改文件为只读不可写 Linux设置只读文件权限的方法

2026-05-23300663

不能。chmod 444 仅限制普通用户写入,root 或 sudo 用户仍可绕过;真正防修改需用 chattr +i 实现内核级不可变锁定,连 root 也无法直接写、删或重命名。

直接设 chmod 444 只能限制普通用户,root 仍可写;真要防误改或恶意覆盖,必须用 chattr +i

chmod 444 能否真正防止文件被修改?

不能。它只控制 POSIX 权限层面的写入,root 用户或拥有 sudo 权限者仍可绕过:chmod 444 后执行 echo "x" > file 会失败,但 sudo echo "x" > filesudo tee file 依然成功。常见误判场景包括:

  • 运维脚本里只加了 chmod 444,结果 cron 任务以 root 身份运行时覆盖了配置文件
  • 容器内应用以 root 运行,chmod 对其完全无效
  • SELinux 或其他 MAC 框架未启用时,chmod 是唯一防线;但一旦有更高权限上下文,它就形同虚设

chattr +i 是唯一可靠的只读锁定方式

chattr +i 设置不可变(immutable)属性,内核级拦截所有写操作,连 root 也无法绕过 —— 除非先移除该属性。关键点:

  • 必须用 root 执行:sudo chattr +i /path/to/file
  • 生效后,任何写、删、重命名、lnmvtruncate 均报 Operation not permitted
  • 验证是否生效:lsattr /path/to/file 应显示 ----i--------e---
  • 解除锁定必须显式执行:sudo chattr -i /path/to/file,没有“临时失效”机制

什么时候该用 chmod 444,而不是 chattr?

仅当目标是“对非 root 用户做基础访问控制”,且你明确接受 root 可覆盖时才用 chmod 444。典型适用场景:

Docker Desktop(linux)

当前 Docker 最新稳定版本之一,主要针对稳定性和兼容性进行了修复优化,适合生产环境与日常开发使用。该版本继续强化 AI 开发支持、容器日志管理以及 Docker Engine 的安全能力,对 Windows/macOS/Linux 平台兼容性进行了进一步优化。

  • 共享开发环境里,防止同事误改公共配置模板(所有人都是普通用户)
  • 打包构建阶段临时锁定源码文件,避免构建脚本意外写入
  • 配合 umaskinstall 命令分发只读资源(如文档、证书)

注意:chmod 644444 效果一致(无执行位时,第1位的 64 对文件内容写入无区别),但语义上 444 更准确表达“纯只读”意图。

目录设为只读需额外注意

对目录设 chattr +i 会锁死整个目录结构:无法新建、删除、重命名任何子项,但已有文件内容仍可被修改(除非它们也单独加了 +i)。若只想禁止删改子项,又允许更新文件内容,应:

  • 给目录本身加 +i(防 rm -rfmv
  • 对关键子文件(如 config.json)单独加 +i
  • 避免对日志类文件加 +i,改用 chattr +a 允许追加但禁止覆盖

递归加 +isudo chattr -R +i /dir)极少需要,且极难恢复 —— 一不小心就卡住系统关键路径,比如 /etc 下某个子目录。

标签: