可通过 mount 的 noexec 选项禁止分区执行程序,临时用 mount -o remount,noexec /path,永久修改 /etc/fstab 添加 noexec;注意不适用于系统关键目录,且不影响显式调用解释器执行。

可以通过 mount 命令的 noexec 挂载选项,禁止在指定分区上执行任何二进制程序或脚本,这是系统安全加固中常用手段。
确认目标分区及当前挂载状态
先用 df -h 或 lsblk 查看待操作分区(如 /dev/sdb1),再用 findmnt /mount/point 确认它是否已挂载、当前挂载参数(是否已有 noexec)。
例如:
-
df -h | grep sdb1→ 找到挂载点(如/data) -
findmnt /data→ 查看输出中OPTIONS列是否含noexec
临时禁用执行权限(重启后失效)
对已挂载分区,使用 remount 加 noexec 参数立即生效:
sudo mount -o remount,noexec /data- 验证:尝试在
/data下运行一个可执行文件(如/data/test.sh),应报错Permission denied - 注意:若原挂载含
exec,remount,noexec会覆盖;若原为默认(隐含exec),该命令同样生效
永久禁用执行权限(写入 fstab)
编辑 /etc/fstab,修改对应分区行,在第4字段(options)中加入 noexec(多个选项用逗号分隔,不加空格):
- 原行示例:
/dev/sdb1 /data ext4 defaults 0 2 - 修改后:
/dev/sdb1 /data ext4 defaults,noexec 0 2 - 保存后执行
sudo mount -a重读 fstab 并应用变更(不重启也可生效) - 补充建议:常与
nosuid、nodev一起使用,进一步限制风险,如defaults,noexec,nosuid,nodev
注意事项与常见问题
noexec 只影响通过文件系统直接执行的程序(如 ./a.out 或 bash script.sh),不影响解释器显式调用(如 /bin/bash /data/script.sh 仍可能运行——但此时脚本本身不具执行位,安全性取决于解释器策略和脚本内容)。
- 若分区用于存放 Web 上传文件、用户上传内容或日志归档,
noexec能有效缓解恶意脚本提权风险 - 不要对
/、/usr、/bin等系统根目录或关键路径启用noexec,否则系统无法启动或命令失效 - 某些应用(如 Java 临时解压、Node.js 编译缓存)可能依赖执行权限,启用前需测试业务兼容性










