nosuid通过使SUID/SGID权限位失效来阻断提权:即使程序属主为root且设定了-rwsr-xr-x权限,挂载时启用nosuid后,普通用户执行它仍以自身身份运行,无法获得root权限;它适用于/tmp、用户上传目录等非系统路径,常与noexec、nodev组合使用以增强防护。

直接用 mount -o nosuid 挂载分区,能让该分区上所有带 SUID/SGID 权限的二进制程序失效——普通用户运行它时,不会切换成 root 或其他高权限身份,而是始终以当前用户身份执行,从而切断一条常见提权路径。
nosuid 是怎么挡住提权的
Linux 中 SUID 位(如 -rwsr-xr-x)的作用是:执行者以文件所有者身份运行程序。攻击者常利用它调用 /bin/bash、/usr/bin/find 或自编译的 exp 获取 root shell。而 nosuid 告诉内核:“别管这个文件有没有 s 位,一律按执行者自己的权限来”。哪怕 /mnt/data/shell 是 root:root 且带 SUID,挂载时加了 nosuid,运行它就只是普通用户进程,无法提权。
临时启用 nosuid(测试用)
对已挂载的分区,无需重启,一条命令即可验证效果:
- 执行
sudo mount -o remount,nosuid /mnt/data - 验证是否生效:
findmnt -o TARGET,OPTIONS /mnt/data,确认输出中含nosuid - 进一步测试:复制一个带 SUID 的程序到该目录,比如
cp /bin/bash /mnt/data/mysh && chmod u+s /mnt/data/mysh,再运行/mnt/data/mysh -p—— 若返回的是普通用户 shell(提示符不是#),说明已起作用
永久生效(生产环境必须)
编辑 /etc/fstab,找到对应分区那一行,在第 4 字段(options)里加入 nosuid:
原内容:
/dev/sdb1 /mnt/data ext4 defaults 0 2
修改后:
/dev/sdb1 /mnt/data ext4 defaults,nosuid 0 2
保存后执行 sudo mount -a 重载配置,立即生效,无需重启。
为什么建议搭配 noexec 和 nodev
单用 nosuid 只防 SUID 提权,但攻击者还可能通过其他方式突破:
-
noexec:禁止直接运行任何可执行文件(如
./exp),补上“不能执行”这一环 -
nodev:不解析设备文件,防止在挂载点下创建
/mnt/data/evil_device并用于攻击
典型安全组合写法(fstab 示例):
/dev/sdb1 /mnt/data ext4 defaults,nosuid,noexec,nodev 0 2
注意:不要对 /、/usr、/bin 等系统目录加这些选项,否则系统命令会失效。适用场景明确——/tmp、/var/tmp、用户上传目录、数据盘、容器 bind 挂载路径等非系统路径。


















