Linux中fstab只读挂载需在第四字段设ro,并推荐组合noexec,nosuid,nodev,noatime;示例为UUID=... /boot ext4 ro,noexec,nosuid,nodev,noatime 0 2,修改后须用sudo mount -o remount /boot验证并测试写入失败。

在Linux中,用 fstab 配置只读挂载是保护关键系统分区(如 /boot、/usr 或自定义的配置目录)最直接有效的方式。核心在于第四字段 mount options 中加入 ro,并搭配其他增强安全性的选项,避免意外写入或运行恶意代码。
只读挂载的关键选项组合
仅写 ro 不够稳妥,推荐按场景组合使用:
-
ro:强制以只读方式挂载,任何写操作(包括创建、修改、删除文件)都会被内核拒绝 -
noexec:禁止执行该分区上的任何二进制程序或脚本,防止提权或恶意代码运行 -
nosuid:忽略所有 setuid/setgid 位,阻断通过特权程序提权的路径 -
nodev:不解析设备文件(如/dev/sda1这类),防止在只读分区里伪造设备节点进行攻击 -
noatime:跳过访问时间更新,既提升性能,也减少因日志写入失败导致的挂载异常(尤其对只读介质更稳定)
实际 fstab 条目示例
假设你要将 /boot 分区设为严格只读,且已知其 UUID:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
注意:
– 第五字段 dump 设为 0(不备份)
– 第六字段 fsck 顺序建议保留为 2(仍可检查,但不阻塞启动)
– 若该分区原本是 defaults,替换时务必去掉 rw、exec 等默认开启的权限
配置前必须确认的几件事
只读挂载不是“一加就生效”,需避开常见陷阱:
- 确保挂载点目录(如
/boot)已存在,且当前未被其他进程占用写锁 - 若分区正在被使用(例如 GRUB 正在更新内核镜像),先卸载再测试:
sudo umount /boot && sudo mount -a - 不要对根分区
/直接设ro—— 系统启动过程需要写/etc/fstab、/var/log等,会导致启动失败 - 对 NTFS/FAT 分区启用只读,需额外加
uid=1000,gid=1000等属主选项,否则普通用户可能连读都受限
验证是否生效
改完 /etc/fstab 后,**不要直接重启**,先运行:
sudo mount -o remount /boot(立即应用新选项)
然后检查:findmnt -t ext4 /boot | grep -o "ro,.*" → 应输出包含 ro,noexec,nosuid,nodev 的字符串
尝试写入测试:sudo touch /boot/testfile → 应报错 Read-only file system

















