开发者

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

目录
  • linux 设置位 S(SetUID)详解
    • 一、SetUID(S位)的作用
      • 经典例子:
    • 二、s 权限的设置对象
      • 三、实际操作示例
        • 四、如何移除 S 权限
          • 方法一:直接去除 s 位
          • 方法二:重设权限位,去除特殊权限
        • 五、权限位补充
        • 深度理解 Linux 的 SetUID 权限
          • 一、SetUID 的本质:权限的临时借用机制
            • 举个类比:
          • 二、SetUID 的底层机制
            • 三、SetUID 的使用场景
              • 四、安全风险与管理建议
                • 潜在风险:
                • 安全建议:
              • 五、延伸补充:SetUID vs SetGID vs Sticky Bit
                • 六、一个实际对比案例
                • 总结一句话:

                  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 /usrandroid/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 的程序是管理员提前放好的一把“限时门卡&rdWLAezTquo;;

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

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

                  二、SetUID 的底层机制

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

                  IF 文件具有 SetUID 且为可执行文件 THEphpN
                      将执行进程的有效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)的详细教程的android详细内php容,更多关于Linux设置位S的资料请关注编程客栈(www.devze.com)其它相关文章!

                  0

                  上一篇:

                  下一篇:

                  精彩评论

                  暂无评论...
                  验证码 换一张
                  取 消

                  最新运维

                  运维排行榜