noexec挂载可从内核层面禁止挂载点下任何文件直接执行,适用于/tmp、/var/tmp、web上传目录、外部设备挂载点及独立数据盘;需配合nosuid和nodev,通过remount临时启用或修改/etc/fstab永久生效,严禁用于/、/usr等系统关键路径。

在 Linux 系统中,通过挂载时添加 noexec 参数,可从内核层面禁止该挂载点下任何文件被直接执行(如 ./script.sh 或 ./malware),无论其是否具有 x 权限。这是防御恶意脚本落地执行的关键防线。
临时启用 noexec(立即生效,重启失效)
适用于测试兼容性或紧急加固:
- 对已挂载目录重挂载:
sudo mount -o remount,noexec /tmpsudo mount -o remount,noexec,nosuid,nodev /var/www/uploads - 挂载新设备时直接指定:
sudo mount -t ext4 -o noexec,nosuid,nodev /dev/sdb1 /mnt/data - 验证是否生效:
findmnt -o TARGET,OPTIONS /tmp→ 输出应包含noexec; 手动测试:echo '#!/bin/sh; id' > /tmp/test.sh && chmod +x /tmp/test.sh && /tmp/test.sh→ 应报Permission denied
永久启用 noexec(开机自动生效)
编辑 /etc/fstab,确保每次启动都按安全策略挂载:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 先用
sudo blkid查目标分区 UUID(比设备名更可靠) - 在
/etc/fstab中添加或修改对应行,第 4 列(options)加入noexec,并建议同步加上nosuid,nodev:UUID=abcd1234 /tmp tmpfs defaults,noexec,nosuid,nodev 0 0UUID=ef567890 /var/www/uploads ext4 defaults,noexec,nosuid,nodev 0 2 - 保存后运行
sudo mount -a测试语法与挂载逻辑是否正确(无输出即成功) - 再用
findmnt和手动脚本测试确认真实生效
哪些目录必须加 noexec?
不是所有路径都适用,重点锁定“用户/服务可写、但无合法执行需求”的挂载点:
-
/tmp和/var/tmp:几乎所有服务和用户都会写入,是提权 payload 首选落点 -
/dev/shm:内存型 tmpfs,常被用于无文件攻击(如 memfd_create) - Web 上传目录(如
/var/www/uploads):用户上传内容可能藏有脚本,LFI 或解析错误易触发执行 - 可移动设备挂载点(如
/mnt/usb):防范 .desktop / autorun 类自动载荷 - 独立挂载的
/home:普通用户主目录极少需直接运行二进制,启用后可阻断横向移动
注意事项与补充说明
noexec 不是万能的 —— 它只拦截 ./xxx 这类直接执行,不影响解释器显式调用(如 python3 script.py、sh script.sh)。因此需配合其他措施:
- 批量清理已有脚本的执行位:
find /var/www/uploads -type f \( -name "*.sh" -o -name "*.py" \) -exec chmod a-x {} \; - 控制新文件默认权限:设置
umask 022(新建文件为 644),或配置默认 ACL:setfacl -d -m u::rw-,g::r--,o::r-- /path/to/dir - 切勿对系统关键路径(如
/、/usr、/bin)加noexec,否则sudo、passwd等命令将异常










