Linux设置位S(SetUID)的详细教程

 更新时间:2025年05月08日 09:53:00   作者:碎梦归途  
linux setuid是一种权限管理机制,即设置一个程序以超级用户(root)权限运行,即使由普通用户启动也能够执行某些仅超级用户有权限执行的操作,此机制可以提高程序的安全性和可靠性,但也可能存在一些安全风险,本文将详细介绍Linux设置位S(SetUID)的教程

Linux 设置位 S(SetUID)详解

一、SetUID(S位)的作用

SetUID 是 Linux 文件权限中的一种特殊权限,目的是让普通用户在执行某些程序时,暂时拥有该程序“所属用户”的权限。

经典例子:

系统中用于修改密码的命令 passwd,其路径通常是 /usr/bin/passwd。

但 /etc/passwd 和 /etc/shadow 文件仅 root 用户拥有写权限。为了让普通用户可以修改自己的密码,passwd命令被设置了 SetUID 权限,使其在执行时临时以 root 权限运行,从而实现修改操作。

二、s 权限的设置对象

  • SetUID只能应用于可执行的二进制文件

  • 位加在用户(user)的执行权限上:chmod u+s

三、实际操作示例

查看 passwd 命令路径:

which passwd

查看权限(含 S 位):

ll /usr/bin/passwd

正常情况下输出如下:

-rwsr-xr-x 1 root root 54256 Apr 23 08:32 /usr/bin/passwd

注意rws中的 s,说明已开启 SetUID,执行时临时使用 root 权限。

四、如何移除 S 权限

方法一:直接去除 s 位

chmod u-s /usr/bin/passwd

方法二:重设权限位,去除特殊权限

chmod 0755 /usr/bin/passwd
  • 0755 中的前导0 表示 不使用任何特殊权限

  • 若要添加 SetUID:chmod 4755,其中:

  • 4代表 SetUID

  • 代表所有者的读写执行权限

  • 5分别为组和其他用户的读执行权限

五、权限位补充

权限类型数字表示含义
普通权限0无特殊权限(默认)
SetUID4用户(u)的 s 位
SetGID2组(g)的 s 位
Sticky Bit1其他用户(o)的粘着位

深度理解 Linux 的 SetUID 权限

一、SetUID 的本质:权限的临时借用机制

当一个程序文件被设置了 SetUID,用户在执行这个程序时,进程会临时获得该文件“属主”的身份执行权限。

举个类比:

  • 你是普通用户,像是没门卡的访客;

  • 某个设置了 SetUID 的程序是管理员提前放好的一把“限时门卡”;

  • 你执行程序 = 用了那张卡,权限升级,能完成只有管理员能做的操作(比如改密码)。

这个过程是临时的,程序执行完权限就消失。

二、SetUID 的底层机制

当你执行一个二进制程序时,系统会进行以下判断:

IF 文件具有 SetUID 且为可执行文件 THEN
    将执行进程的有效UID(effective UID)切换为该文件的“所有者UID”
ELSE
    使用当前用户的UID 执行进程

因此:

- passwd 文件所有者是 roo,具有 SetUID

  • 任何用户执行它时,进程权限都会提升为 root

  • 可以写/etc/shadow文件(否则连读都不能)

三、SetUID 的使用场景

场景说明
密码修改程序passwd 普通用户执行,程序临时拥有 root 权限修改 /etc/shadow
网络工具如 ping(早期)需要打开 socket,需要 root 权限
用户切换 su / sudo程序本身不是 root,但执行后临时以 root 运行

四、安全风险与管理建议

SetUID 是把“双刃剑”,用得好是便利,用不好是系统漏洞。

潜在风险:

程序存在漏洞时(如缓冲区溢出、任意文件写入等),攻击者可能通过 SetUID 程序提权为 root,拿下整台机器。

若不慎给 脚本文件 设置 S 位(虽然不会生效),仍有可能被误导滥用。

安全建议:

1、只对系统可信任的二进制程序设置 S 位

2、定期扫描系统中具有 SetUID 的文件:

find / -perm -4000 -type f 2>/dev/null

3、避免对可疑程序设 S 位,如自写脚本、测试程序

4、使用 sudo 替代部分 SetUID 场景(更安全,可审计)

五、延伸补充:SetUID vs SetGID vs Sticky Bit

特殊权限数字用途说明
SetUID(u+s4进程以文件“所有者”身份运行
SetGID(g+s2进程以文件“所属组”身份运行;或新建文件自动归组
Sticky Bit(+t1应用于目录,只有文件所有者能删除该目录下自己的文件(典型如 /tmp

六、一个实际对比案例

原始文件权限:

-rwxr-xr-x 1 root root 54256 Apr 23 08:32 /usr/bin/passwd

任何人可执行,但只有 root 能修改 /etc/shadow,普通用户运行会失败。

开启 SetUID:

chmod u+s /usr/bin/passwd

权限变为:

-rwsr-xr-x 1 root root 54256 Apr 23 08:32 /usr/bin/passwd

此时任何用户执行 passwd 都临时获得 root 权限,能安全修改自己密码。

总结一句话:

SetUID 是让“普通用户临时拥有管理员权限”的关键机制,强大但危险,务必在可控范围内使用

以上就是Linux设置位S(SetUID)的详细教程的详细内容,更多关于Linux设置位S的资料请关注脚本之家其它相关文章!

相关文章

  • Linux之删除带有空格的文件(不是目录)

    Linux之删除带有空格的文件(不是目录)

    这篇文章主要介绍了Linux之删除带有空格的文件(不是目录),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • deepin20 安装英伟达闭源驱动的步骤详解

    deepin20 安装英伟达闭源驱动的步骤详解

    这篇文章主要介绍了deepin20 安装英伟达闭源驱动的步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • xshell上传下载文件(Windows、Linux)

    xshell上传下载文件(Windows、Linux)

    Windows下载的软件包,如何上传到远程Linux主机上?如何从Linux主机下载软件包到Windows下,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Linux环境下Apache开启https服务的方法详解

    Linux环境下Apache开启https服务的方法详解

    这篇文章主要介绍了Linux环境下Apache开启https服务的方法,结合实例形式分析了阿里云环境下获取SSL证书及Apache服务器安装、开启SSL的相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • linux增加iptables防火墙规则的示例

    linux增加iptables防火墙规则的示例

    这篇文章主要介绍了linux增加iptables防火墙规则的示例,大家在使用的时候要把规则后的中文注释去掉
    2014-01-01
  • Linux系统 Centos7.4手动在线升级到Centos7.7

    Linux系统 Centos7.4手动在线升级到Centos7.7

    这篇文章主要介绍了Centos7.4手动升级到Centos7.7,需要的朋友可以参考下
    2022-01-01
  • Linux下Jenkins忘记密码的操作步骤

    Linux下Jenkins忘记密码的操作步骤

    这篇文章主要介绍了Linux下Jenkins忘记密码的操作步骤,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Linux下升级python和安装pip的详解

    Linux下升级python和安装pip的详解

    今天小编就为大家分享一篇关于Linux下升级python和安装pip的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 初窥Linux 之我最常用的20条命令总结

    初窥Linux 之我最常用的20条命令总结

    Linux中的命令的确是非常多,我们只需要了解常用的命令就可以了,本篇文章介绍了Linux 之我最常用的20条命令总结,有兴趣的可以了解一下。
    2016-12-12
  • centos7.2搭建nginx的web服务器部署uniapp项目

    centos7.2搭建nginx的web服务器部署uniapp项目

    这篇文章主要介绍了centos7.2搭建nginx的web服务器部署uniapp项目,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10

最新评论