核心是通过noexec、nosuid、nodev、ro等挂载选项从源头限制行为,配合chown/chmod收紧属主权限及bind mount路径隔离,再经findmnt和用户实测验证,实现对非授权用户的有效访问控制。

直接禁止普通用户访问挂载点,核心不是“一刀切屏蔽”,而是通过挂载选项、属主控制和访问路径隔离三者配合,让挂载点本身对非授权用户不可见或不可用。
用挂载选项从源头限制行为
在 /etc/fstab 或 mount 命令中加入安全选项,是最基础也最有效的手段:
- noexec:禁止在该挂载点下执行任何二进制文件(防恶意脚本或提权程序)
- nosuid:忽略所有 SUID/SGID 位(防止普通用户通过 setuid 程序获取高权限)
- nodev:不解析设备文件(避免挂载点内创建 /dev/tty、/dev/zero 等危险节点)
- ro:只读挂载(适用于配置目录、静态资源等无需写入的场景)
- bind + ro:对已有目录做只读绑定,如 /data/configs /srv/app/configs none bind,ro 0 0
调整挂载点属主与权限,切断默认访问
即使挂载成功,普通用户仍可能通过路径访问。需主动收紧挂载点本身的目录权限:
- 挂载后立即执行 sudo chown root:root /mnt/secret 和 sudo chmod 700 /mnt/secret,确保只有 root 可进入
- 若需特定用户访问,不改挂载点权限,而是用 setfacl 单独授权:sudo setfacl -m u:deploy:r-x /mnt/secret
- 避免将挂载点设为 world-readable(如 755),否则即使挂载加了 nosuid/noexec,用户仍可读取敏感内容
用 bind mount 隐藏真实路径,制造受控入口
不暴露原始数据位置,是更深层的防护思路。例如把日志目录映射到一个受限路径:
- 执行 sudo mount --bind /var/log/audit /jail/logs
- 然后仅对 /jail/logs 设置严格权限:chmod 700 + setfacl 放行指定用户
- 这样普通用户即使知道 /var/log/audit 存在,也无法直接访问;而 /jail/logs 又只对授权用户开放
- 本质是“换锁不换柜”,既不影响源目录其他用途,又实现了访问路径隔离
验证是否真正生效
配置完别只看 fstab 是否写对,要实测效果:
- 运行 sudo mount -a 重载配置,确认无报错
- 用 findmnt -D /mnt/secret 查看实际启用的挂载选项,确认含 noexec,nosuid,nodev
- 切换到普通用户,尝试 cd /mnt/secret(应提示 Permission denied)
- 在挂载点下放测试脚本并 chmod +x,再执行——应报 Permission denied,而非 “command not found”











