必须启用noexec,nosuid,nodev组合的挂载点包括:/tmp、/var/tmp、/dev/shm、web上传目录(如/var/www/uploads)、独立挂载的/home、外部设备挂载点(如/mnt/usb),三者缺一不可,仅对“用户可写+无合法执行需求”场景启用。

新手配置 noexec 和 nosuid 阻断开放服务提权,关键不是“禁止所有执行”,而是精准卡住攻击者最常走的两条路:在临时目录或上传点直接运行恶意程序(noexec),以及利用带 SUID 的二进制文件切换到 root 身份(nosuid)。这两项必须配合使用,且只加在非系统路径上——加错地方会导致系统命令崩溃。
哪些挂载点必须加 noexec,nosuid,nodev
开放服务(如 Web、FTP、SSH 上传)一旦被入侵,攻击者第一反应就是往这些目录里扔东西并执行。以下路径只要独立挂载,就应立即加固:
- /tmp 和 /var/tmp:几乎所有服务(Apache、Nginx、数据库、cron)都会写入,是提权 payload 的首选落地点
- /dev/shm:内存型 tmpfs,常被用于无文件攻击(如 memfd_create + execve),极易绕过磁盘扫描
- Web 上传目录(如 /var/www/uploads):用户上传 ZIP、图片甚至 .sh/.py 文件后,若存在 LFI 或解析错误,可能触发执行
- 独立挂载的 /home:普通用户主目录下常有开发环境、编译产物,启用后可阻止非授权本地提权链
- 外部设备挂载点(如 /mnt/usb):U 盘插入后自动挂载,.desktop 或 autorun 类载荷会直击桌面会话
快速验证是否兼容(别急着改 fstab)
先用 remount 临时生效,确认业务不受影响再写死配置:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 给 /tmp 加防护:sudo mount -o remount,noexec,nosuid,nodev /tmp
- 给上传目录设只读+禁执行:sudo mount -o remount,ro,noexec,nosuid,nodev /var/www/uploads
- 验证是否生效:findmnt -o TARGET,OPTIONS /tmp,输出中应含 noexec,nosuid,nodev
- 手动测试:echo '#!/bin/sh; id' > /tmp/test.sh && chmod +x /tmp/test.sh && /tmp/test.sh → 应报 Permission denied
如果执行失败但业务异常(比如某监控脚本卡在 /tmp 编译),说明不兼容,立刻回退:sudo mount -o remount,exec,suid,dev /tmp。
永久生效:正确修改 /etc/fstab
临时命令重启即失效,必须写进 fstab 才真正起作用。编辑时注意格式和顺序:
- 找到对应行(例如 /tmp 行),将第 4 列(options 字段)从 defaults 改为 defaults,noexec,nosuid,nodev
- 常见正确写法示例:tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev 0 0
- 如果是独立分区(如 /home 在 /dev/sda2 上):UUID=xxxx /home ext4 defaults,noexec,nosuid,nodev 1 2
- 保存后务必运行 sudo mount -a 测试语法;无报错再重启,否则可能无法进系统
不能只靠挂载选项:补上执行位和默认权限
noexec 只拦 ./script,不拦 python script.py;nosuid 只废 SUID 位,不删文件本身。所以还需两步收尾:
- 批量清理已有可执行位:find /tmp -type f -perm /u+x,g+x,o+x -exec chmod a-x {} \;
- 设置新文件默认无执行权限:在对应挂载点所在服务(如 vsftpd、nginx)配置 umask 027,或用 setfacl 设默认 ACL
- 对 /etc/passwd、/etc/shadow 等关键认证文件加不可变锁:sudo chattr +i /etc/shadow(ext4 有效)










