必须加nosuid,noexec的目录包括/tmp、/var/tmp、/dev/shm、web上传目录(如/var/www/uploads)、外部设备挂载点(如/mnt/usb)及独立挂载的/home或/data,需通过mount -o remount临时验证或修改/etc/fstab永久配置,并建议与nodev组合使用以构成完整防护。

在 Linux 运维中,用 nosuid 和 noexec 提升挂载点安全权限,核心是阻断两类常见攻击路径:SUID 提权(nosuid)和恶意代码直接执行(noexec)。它们不改文件、不装新工具,只靠内核层拦截,轻量且高效。
哪些目录必须加 nosuid,noexec
关键看“谁可写 + 是否真需要执行或提权”。以下路径一旦独立挂载,就应立即启用组合防护:
- /tmp 和 /var/tmp:所有服务和用户默认可写,是攻击者投递 payload 并直接运行的首选地
- /dev/shm:tmpfs 内存文件系统,支持 memfd_create 等无文件攻击,绕过磁盘扫描
- Web 上传目录(如 /var/www/uploads):用户上传内容不可信,LFI 或解析漏洞易触发脚本执行
- 外部设备挂载点(如 /mnt/usb、/media/*):U 盘插入后可能自动加载 .desktop 或 autorun 载荷
- 独立挂载的 /home 或 /data:普通用户主目录极少需运行 SUID 二进制,启用后可阻断横向移动
临时验证:一条命令快速测试兼容性
别急着改配置,先用 mount -o remount 验证是否影响业务:
- 加固临时目录:
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
临时设置重启即失效,生产环境必须写入 /etc/fstab:
- 找到对应行(例如
tmpfs /tmp tmpfs defaults 0 0),把第 4 列的defaults替换为defaults,noexec,nosuid,nodev - 注意:
defaults默认含exec和suid,必须显式覆盖才能生效 - 改完先测试:
sudo mount -a,无报错说明语法通过;再用findmnt和脚本测试确认真实生效 - 典型写法示例:
tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev 0 0或UUID=xxxx /mnt/data ext4 defaults,noexec,nosuid,nodev 0 2
补充控制:noexec 不是万能,需配合权限收束
noexec 拦不住 python script.py 这类解释器调用,必须同步做权限治理:
- 批量清理已有脚本执行位:
find /var/www/uploads -type f \( -name "*.sh" -o -name "*.py" \) -exec chmod a-x {} \; - 控制新文件默认权限:在挂载时加
umask=022,或用 ACL 限定上传用户只能读写 - 对关键目录(如上传点)叠加
ro(只读)进一步收窄风险面











