linux文件系统只读挂载的核心目标是阻断对目录的写入行为,通过内核级拒绝write、truncate、unlink等系统调用实现比chmod更彻底的安全防护,支持mount -o ro挂载、remount切换及fstab开机自动配置,但需配合防范符号链接跳转、bind mount覆盖和底层设备写入等绕过风险。

Linux 文件系统实施只读挂载,核心目标是阻断对目录的写入行为,从文件系统层而非单个文件权限层面加固安全。它不依赖用户身份或 umask 设置,而是让整个挂载点在内核级拒绝 write、truncate、unlink 等系统调用,即使 root 用户也无法直接修改内容——这是比 chmod a-w 更彻底的防护手段。
挂载时直接设为只读
适用于新挂载或临时挂载场景。使用 mount -o ro 指定只读选项即可:
- 基础命令:sudo mount -o ro /dev/sdb1 /mnt/data
- 验证效果:执行 touch /mnt/data/test.txt 会提示 “Read-only file system”
- 注意:若设备已挂载,需先 umount 再重新挂载;也可用 remount 方式避免卸载(见下条)
运行中切换为只读(remount)
无需中断服务,适合已挂载但需紧急锁定的目录(如日志归档后、审计前):
- 命令格式:sudo mount -o remount,ro /mnt/data
- 前提条件:该挂载点必须支持 remount(绝大多数本地文件系统如 ext4、xfs 均支持)
- 验证方式:运行 mount | grep "/mnt/data",确认输出含 "ro," 字样(如 "ext4,ro,relatime")
开机自动只读:配置 /etc/fstab
确保系统重启后仍保持只读状态,防止人为遗漏。编辑 /etc/fstab,添加或修改对应行:
- 标准条目示例:/dev/sdc1 /opt/readonly xfs ro,noatime,nofail 0 0
-
关键字段说明:
- 第4列(options):ro 表示只读;noatime 减少访问时间更新(提升性能且避免触发写);nofail 防止因设备缺失导致启动失败
- 第5、6列(dump & pass):设为 0 0,表示不备份、不 fsck 检查(只读文件系统通常无需 fsck)
- 生效方式:保存后执行 sudo mount -a 测试语法并立即应用(无需重启)
只读挂载 ≠ 绝对不可变:需配合其他机制
只读挂载保护的是挂载点下的文件数据,但存在几个常见绕过点,需同步防范:
- 符号链接跳转:若目录内存在指向外部可写路径的软链(如 ln -s /tmp/malware ./payload),攻击者仍可通过链接写入。应定期检查并清理可疑链接
- 挂载覆盖(mount --bind):有 root 权限者可用 bind mount 覆盖只读挂载点。限制 root 权限使用、审计 mount 命令调用可降低风险
- 底层设备写入:只读挂载不阻止对块设备本身(如 /dev/sdc1)的 dd 或 fdisk 操作。物理访问控制与设备权限(如 /dev/sd* 的 group ownership)仍需管理
- 补充建议:对关键静态目录(如 /usr/share/doc),可叠加 chattr +i 防止 even root 修改,形成双重防护











