SUID权限仅对有执行权限的二进制文件生效,设置方式为chmod u+s或4755,验证时属主位显s表示有效,S则需补x权限;脚本、noexec挂载点及SELinux策略下均无效。

在 Linux 中设置文件的 SUID 权限,核心是让普通用户执行该程序时,临时获得文件所有者的权限(通常是 root)。它只对**有执行权限(x)的二进制可执行文件**生效,对脚本、目录或无 x 权限的文件无效。
确认前提条件
设置前必须满足三点:
- 目标文件是编译好的二进制程序(如 /bin/cat、/usr/bin/passwd),不是 shell 脚本
- 文件当前已具备属主执行权限(即权限中属主位有 x)
- 操作者对该文件有写权限(通常是 root 或文件所有者)
两种常用设置方式
符号模式(推荐用于交互操作):
- 添加 SUID:chmod u+s /path/to/binary
- 取消 SUID:chmod u-s /path/to/binary
数字模式(适合脚本或精确控制):
- 设为 4755:表示 SUID(4)+ 属主 rwx(7)+ 属组 r-x(5)+ 其他 r-x(5)→ chmod 4755 /path/to/binary
- 若原权限是 755,加 SUID 后就是 4755;若想清除,直接设回 0755 或 755 即可
验证是否设置成功
运行 ls -l /path/to/binary,观察属主执行位:
- 显示为 s(小写):设置成功且有执行权限,例如 -rwsr-xr-x
- 显示为 S(大写):SUID 已设,但属主无 x 权限 → 实际无效,需先补上执行权:chmod u+x /path/to/binary
更可靠的检查方式是:stat -c "%A %U:%G %n" /path/to/binary,它能避开大小写歧义,明确反映权限位状态。
关键注意事项
- SUID 对 shell 脚本完全无效(内核强制忽略),即使显示 s 也起不了作用
- 挂载选项含 noexec 的文件系统上,SUID 会被内核跳过
- SELinux 或其他 MAC 框架可能拦截 SUID 行为,需检查策略日志
- 仅在程序运行期间提权,退出后权限立即还原,不影响用户会话本身


















