只读挂载本质是内核/运行时拦截写系统调用,彻底阻断非法写入。需分场景选择机制:系统分区用fstab设ro;docker容器用volumes:ro或read_only:true;本地目录用acl+sticky bit;移动设备依赖终端管控策略。

对敏感资产启用只读挂载,本质是切断非法写入路径,而非仅靠文件权限“防君子不防小人”。它从内核或运行时层面拦截写系统调用,无论进程是否拥有文件级写权限,只要挂载点设为只读,所有写操作(创建、修改、删除、截断)都会被拒绝。关键在于分场景选对机制:系统分区用 /etc/fstab,容器服务用 docker-compose.yml 或 docker run 参数,本地目录用挂载重映射或 ACL 配合 sticky bit,U 盘等移动设备则依赖终端管控策略。
系统关键分区:fstab 中配置严格只读
适用于 /boot、/usr、自定义固件目录等不可变更的系统资产:
- 在
/etc/fstab第四字段添加ro,noexec,nosuid,nodev,noatime,例如:UUID=4eff9bdb... /boot ext4 ro,noexec,nosuid,nodev,noatime 0 2 - 切勿对根分区
/直接设ro,否则系统无法写日志、更新状态,导致启动失败 - 修改后执行
sudo mount -o remount /boot实时生效,并用touch /boot/test验证报错 Read-only file system - 若该分区原为
defaults,需显式移除rw、exec等默认开启项
Docker 容器内敏感路径:卷挂载级只读
适用于挂载的配置文件、证书、静态资源等无需运行时修改的内容:
- 使用短语法:
volumes: - ./config:/etc/nginx:ro - 或长语法(更清晰):
read_only: true,与--read-only(根文件系统只读)互不冲突,可叠加使用 - 日志、缓存、会话等需写入的目录必须单独挂载且保持可写,例如
- nginx-logs:/var/log/nginx - 验证方式:进入容器执行
echo test > /etc/nginx/conf.d/default.conf,应返回权限错误
本地敏感目录:非挂载点下的“只读不删”控制
当无法重新挂载(如普通数据盘上的 /data/conf),需组合 ACL 与目录属性实现逻辑只读:
- 给目标用户设文件级读权限:
setfacl -m u:auditor:r /data/conf/*.yml - 收回其对父目录的写/删除权:
setfacl -m u:auditor:r-x /data/conf(注意不是rwx) - 启用粘滞位:
chmod +t /data/conf,防止同组其他用户删除非自己创建的文件 - 设置默认 ACL,确保新生成文件自动继承:
setfacl -d -m u:auditor:r /data/conf - 验证命令:
getfacl /data/conf和getfacl /data/conf/app.yml,确认无w且含default条目
移动存储设备:终端策略层强制只读
U 盘、移动硬盘等物理介质需在接入源头阻断写入能力,不能依赖设备自身设置(易被绕过):
- 企业环境推荐使用终端管控软件(如域智盾、安企神),统一配置“只读”策略并按岗位下发
- 策略生效后,员工插入 U 盘可正常打开、复制内容,但无法将电脑内文件拖入或保存到该设备
- 同步禁用蓝牙、手机 MTP、光驱等替代通道,避免绕过 USB 管控
- 对已发放的内部 U 盘,可结合硬件绑定+AES 加密,即使丢失也无法读取明文数据
- 禁用自动运行、扫描可疑快捷方式和隐藏脚本,防范伪装型恶意 U 盘攻击











