nosuid使挂载点上SUID/SGID位完全失效,内核执行时直接忽略s位;需临时验证(sudo mount -o remount,nosuid /tmp)、findmnt确认、手动测试,再永久写入/etc/fstab并mount -a生效,禁用于根分区。

防止普通用户通过SUID文件在挂载点上提权,必须让SUID位在该路径下完全失效——这不是靠权限检查或监控实现的,而是由内核在执行时直接忽略s位,关键在于挂载选项是否启用nosuid。
临时启用nosuid(立即生效,无需重启)
先验证业务兼容性,避免误伤正常服务:执行 sudo mount -o remount,nosuid /tmp。
这一步操作起来很简单,直接运行命令即可;但注意:必须确保目标挂载点当前已挂载且未被进程占用,否则会报错“busy”。可用 lsof +D /tmp 或 fuser -m /tmp 检查。
验证是否生效:运行 findmnt -o TARGET,OPTIONS /tmp,输出中应明确包含 nosuid 字样。
手动测试提权拦截效果:创建一个带SUID的测试脚本 echo '#!/bin/sh; id' > /tmp/test.sh && chmod +x,u+s /tmp/test.sh,再执行 /tmp/test.sh → 应返回 Permission denied 或实际UID仍为当前用户(而非root)。
永久配置nosuid(写入fstab,重启后持续生效)
第一步:用文本编辑器打开 /etc/fstab:sudo nano /etc/fstab。
第二步:找到对应挂载点的行,例如 /dev/sdb1 /tmp ext4 defaults 0 2,将第四字段(挂载参数)中的 defaults 替换为 defaults,nosuid;若需更强防护,可同时加入 noexec,nodev。
第三步:保存退出后,执行 sudo mount -a 重新加载所有fstab条目,触发新参数应用;若某一行语法错误,mount -a 会报错并中断,此时需立即修正fstab。
注意:切勿对根分区(/)或/boot等系统必需路径添加nosuid,否则可能导致systemd服务启动失败、日志无法写入或内核模块加载异常。
哪些目录必须加nosuid
方法一:/tmp 和 /var/tmp —— 所有服务(Nginx、MySQL、cron)默认写入位置,攻击者90%的SUID payload落点。
方法二:/dev/shm —— 内存文件系统,支持memfd_create绕过磁盘扫描,必须加nosuid+noexec才能阻断无文件提权。
方法三:独立挂载的 /home(如/home在单独分区)、Web上传目录(如/var/www/uploads)、U盘挂载点(如/mnt/usb)—— 这些路径用户可控,且无合法SUID执行需求,是加固优先级最高的区域。


















