必须启用noexec,nosuid,nodev组合挂载选项阻断提权,适用于/tmp、/var/tmp、/dev/shm、web上传目录、独立挂载的/home及外部设备挂载点,先remount临时验证再写入/etc/fstab永久生效。

挂载时通过 exec 和 suid 选项控制程序执行与特权切换行为,本质是内核在挂载阶段对文件系统行为的策略设定——不是限制用户操作,而是告诉内核“遇到这类文件时该怎么解释权限位”。这两个选项可独立使用,也可组合生效。
exec 和 noexec:决定能否直接运行二进制文件
exec 是默认行为(除非显式禁用),表示允许执行该分区上的可执行文件(如 ./a.out、/mnt/app/start.sh);noexec 则禁止所有直接执行动作,哪怕文件有 x 权限,运行也会报错 Permission denied。
- 临时启用:
sudo mount -o remount,exec /mnt/data(若原为 noexec) - 临时禁用:
sudo mount -o remount,noexec /mnt/data - 永久配置:在
/etc/fstab对应行的 options 字段加入exec或noexec,例如:/dev/sdb1 /mnt/data ext4 defaults,noexec 0 2 - 注意:
noexec不影响通过解释器间接调用(如bash script.sh),它只拦截execve()系统调用直接加载二进制。
suid 和 nosuid:决定 SUID/SGID 权限位是否生效
suid 是默认行为,即当普通用户执行一个属主为 root 且带 -rwsr-xr-x 权限的程序时,进程有效 UID 会临时切换为 root;nosuid 则强制忽略所有 SUID/SGID 位,始终以执行者真实 UID/GID 运行。
- 临时启用:
sudo mount -o remount,suid /mnt/data(极少需要显式开启,因默认即开) - 临时禁用:
sudo mount -o remount,nosuid /mnt/data - 永久配置:在
/etc/fstab中添加nosuid,例如:/dev/sdb1 /mnt/data ext4 defaults,nosuid 0 2 - 验证是否生效:复制一个带 SUID 的程序(如
cp /bin/bash /mnt/data/sh && chmod u+s /mnt/data/sh),再运行/mnt/data/sh -p;若提示符仍是$而非#,说明nosuid已起效。
常见组合及适用场景
单独控制某一项不够全面,生产中常组合使用:
-
noexec,nosuid,nodev:适用于用户上传目录、/tmp、Web 上传区等不受信路径。既防直接执行恶意 payload,也防利用 SUID 提权,还禁用设备文件解析。 -
exec,suid:系统根分区、/usr等可信区域,默认即可,无需额外声明。 -
exec,nosuid:需运行程序但不允许提权的场景,比如容器镜像存储卷、CI 构建工作区。 - 不推荐
noexec,suid:逻辑矛盾——SUID 只在程序被执行时才有意义,noexec已阻断执行入口,SUID 自然无效。
注意事项与排查要点
挂载选项受内核版本和文件系统类型影响,部分行为需留意:
- 某些文件系统(如
overlayfs、bind mount)可能不完全继承父挂载的noexec或nosuid,需显式指定。 -
nosuid对脚本无效(SUID 本就对脚本不起作用),但能防止脚本调用的二进制子进程提权。 - SELinux 或 AppArmor 等 MAC 框架可能覆盖或限制这些挂载选项的效果,需一并检查策略状态。
- 用
findmnt -o SOURCE,TARGET,FSTYPE,OPTIONS /mnt/data查看当前实际生效的挂载参数,避免误判配置是否加载成功。











