Linux 文件系统安全挂载:使用 nosuid 参数防御提权的方法

作者:袖梨 2026-07-03
nosuid是Linux挂载关键安全选项,使SUID/SGID位失效,防止普通用户执行特权程序提权;必须用于/tmp、/var/tmp、Web上传目录、独立数据盘、外部设备挂载点及/dev/shm,禁用于系统根目录;临时启用用sudo mount -o remount,nosuid,永久配置需在/etc/fstab对应行options字段添加nosuid并执行mount -a。

nosuid 是 Linux 文件系统挂载中一道关键防线,它不阻止程序运行,而是让所有 setuid/setgid 权限位彻底失效——普通用户执行 root 所有、带 s 位的程序时,依然只是普通用户身份,无法切换 UID/GID,从而切断最常见的一类本地提权路径。

哪些位置必须加 nosuid
只对“用户可写 + 不该继承特权”的非系统路径启用,加错地方会导致系统瘫痪:

  • /tmp/var/tmp:服务与用户共用的临时区,极易被植入 SUID shell 或恶意工具
  • Web 上传目录(如 /var/www/uploads):上传文件可能含伪造的 SUID 二进制
  • 独立挂载的数据盘(如 /mnt/data/mnt/backup):纯存储用途,无需特权继承
  • 外部设备挂载点(如 /mnt/usb):U 盘插入后自动挂载,防范 autorun 类提权载荷
  • /dev/shm:内存 tmpfs,常被用于无文件攻击链中的 SUID 利用环节

怎么快速验证是否生效
别等重启,先临时启用并测试:

  • 运行 sudo mount -o remount,nosuid /tmp(替换为你的目标挂载点)
  • 创建测试程序:cp /bin/bash /tmp/mysh && chmod u+s /tmp/mysh
  • 执行 ./tmp/mysh -p:若提示符仍是 $(不是 #),且 id 显示 uid/gid 未提升,说明 nosuid 已起效
  • 查看状态:findmnt -o TARGET,OPTIONS /tmp,输出中应明确包含 nosuid

永久配置要写进 /etc/fstab
临时挂载重启即失效,生产环境必须固化:

  • 找到对应分区行,例如:/dev/sdb1 /mnt/data ext4 defaults 0 2
  • 修改第 4 字段(options 列),加入 nosuid 并用逗号分隔:
    /dev/sdb1 /mnt/data ext4 defaults,nosuid,noexec,nodev 0 2
  • 保存后运行 sudo mount -a 测试语法是否合法,无报错即生效

为什么不能单用 nosuid
它只管“权限位”,不管“能不能跑”和“有没有设备”:

  • 攻击者仍可上传并直接执行普通二进制(如 ./exploit),需 noexec 拦住
  • 可能通过创建 /mnt/data/evil_dev 设备节点绕过权限控制,需 nodev 封堵
  • 对纯归档或镜像类分区,再加 ro(只读)能彻底杜绝写入+执行+提权三连风险

特别注意适用边界

  • 绝对不要对 //usr/bin/sbin/lib 等系统目录加 nosuid,否则 sudopingpasswd 等命令将无法正常工作
  • nosuid 对已加载进内存的进程无效,只作用于新执行的程序
  • 它不影响 capabilities 机制,也不替代 chattr +i 锁定 /etc/shadow 等核心文件

不复杂但容易忽略

相关文章

精彩推荐