必须对/tmp、/var/tmp、Web上传目录(如/var/www/uploads)、可移动设备挂载点(如/mnt/usb)及独立数据盘(如/mnt/data)等“用户可写+无合法执行需求”路径,组合启用noexec、nosuid、nodev挂载选项,三者缺一不可,并通过/etc/fstab永久配置和findmnt验证生效。

挂载点本身不继承父目录权限,但若配置不当,会成为权限溢出的突破口。关键不是“锁死整个目录树”,而是针对用途做精准隔离——用内核级挂载参数从源头切断越权路径。
哪些目录必须加防护
重点盯住“用户能写、程序能读、但不该执行代码”的位置:
- /tmp 和 /var/tmp:系统临时文件集中地,恶意 payload 常在这里生成并执行
- /var/www/uploads 或类似 Web 上传目录:用户上传的压缩包、图片可能被伪装成 .sh/.py 脚本
- /mnt/usb、/media/* 等可移动设备挂载点:U 盘插入后自动执行风险高
- /data、/mnt/data 等独立数据盘:若存放用户生成内容,也建议加限制
核心挂载参数组合
不是单靠一个选项,而是 noexec + nosuid + nodev 三者协同生效:
- noexec:禁止直接执行二进制或脚本(如 ./malware.sh),但不拦解释器调用(如 python malware.py)
- nosuid:让 SUID/SGID 位失效,防止普通用户通过 setuid 程序提权
- nodev:阻止挂载点内解析设备节点(如 /dev/sda),避免绕过访问控制创建非法设备
- 对静态资源目录(如 /web/static)加 ro(只读),配合 bind + remount 实现运行时锁定
永久配置与验证要点
/etc/fstab 改完不能直接重启,必须先验证:
- 找到对应行(例如 /dev/sdb1 /mnt/data ext4 defaults 0 2),把第 4 列的 defaults 替换为 defaults,noexec,nosuid,nodev
- 因为 defaults 默认含 exec 和 suid,必须显式覆盖才生效
- 测试命令:sudo mount -o remount /mnt/data 或 sudo mount -a,无报错即成功
- 验证是否生效:findmnt -o TARGET,OPTIONS /tmp,确认输出中包含 noexec
别漏掉权限层的配合动作
挂载参数是第一道防线,但还需叠加基础权限管理:
- 批量清理已有脚本执行位:find /var/www/uploads -type f \( -name "*.sh" -o -name "*.py" \) -exec chmod a-x {} \;
- 让新文件默认无执行权:Web 服务启动脚本里加 umask 022(新建文件权限为 644)
- 更稳妥做法:对目录设默认 ACL,确保子文件一创建就是 -rw-r--r--:setfacl -d -m u::rw-,g::r--,o::r-- /var/www/uploads

















