noexec 用于防止分区上直接执行二进制或脚本,降低webshell等恶意代码运行风险;适用于/tmp、/var/tmp、/var/www等纯数据分区,禁用于系统关键分区;需配合权限控制与安全机制才有效。

新手配置 Linux 分区挂载选项中的 noexec,核心是防止在该分区上直接执行二进制文件或脚本,从而降低恶意代码(如上传的 Webshell、临时编译的木马)被运行的风险。但要注意:noexec 不是万能防病毒开关,也不能替代权限控制和安全审计,它只是纵深防御中的一环。
哪些分区适合加 noexec?
原则是:存放纯数据、不需运行程序的挂载点。常见推荐:
- /tmp:临时文件目录,极容易被利用来写入并执行攻击载荷
- /var/tmp:同上,生命周期更长,同样高风险
- /home(可选):如果用户不依赖本地编译/运行脚本,加上可限制普通用户执行任意程序
- /var/www(Web 根目录):防止 PHP/Python 等脚本引擎之外的二进制被直接调用(如上传的 ELF 文件)
⚠️ 不要加在 /、/usr、/bin、/sbin 等系统关键分区,否则系统无法启动或命令失效。
临时启用 noexec(重启前验证)
先用 mount -o remount,noexec /tmp 测试是否影响业务。然后尝试在 /tmp 下放一个简单脚本测试:
echo '#!/bin/sh\necho "test"' > /tmp/test.sh chmod +x /tmp/test.sh /tmp/test.sh # 应报错:Permission denied
如果没报错,说明 remount 失败或分区类型不支持(如某些 tmpfs 需显式指定 mode)。成功后可继续下一步。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
永久生效:修改 /etc/fstab
找到对应分区行(例如 /tmp 对应的那行),在第4列(挂载选项字段)加入 noexec,多个选项用逗号分隔,不加空格:
# 原来可能是: tmpfs /tmp tmpfs defaults 0 0 # 改为(推荐同时加 nosuid、nodev 提升防护): tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev 0 0
保存后运行 sudo mount -a 重载 fstab,再用上面的 test.sh 验证是否生效。若出错,检查语法(比如漏逗号、多空格)或日志 dmesg | tail。
注意兼容性和绕过风险
noexec 只限制通过 execve() 系统调用直接执行文件,以下情况仍可能绕过:
- 脚本解释器调用:如
python /tmp/mal.py或bash /tmp/shell.sh仍可运行(因为 bash/python 本身在 /bin 下,且有执行权) - 动态加载:某些攻击利用 dlopen 加载 .so 文件,不受 noexec 影响(取决于文件系统实现)
- 内存执行:Shellcode 注入、mmap + mprotect 绕过,noexec 完全无效
所以它必须配合 严格权限(如 /tmp 的 sticky bit)、SELinux/AppArmor、最小化用户权限、定期审计 才真正有用。










