暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux中suid和sgid详解

运维DevOps 2023-07-07
120

suid和sgid都是用来设置相关权限,下面就以最简单直接的方式介绍一下用法,不详细深究底层原理

一、SUID

SUID是Set UID的简称,翻译过来是设置用户ID,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限

例如:查看/usr/bin/passwd二进制文件的权限,如图:

上图中的用户权限组中的可执行权限(x)被s替换,此时passwd这个程序具备suid权限,无论哪个用户都有权限执行passwd,在执行passwd的时候,会临时获得文件所有者(root)的权限,这就是为什么每个用户都可以调用passwd命令来修改自己的密码

使用SUID需要满足以下几个条件:

  • SUID只对二进制文件有效

  • 调用者对该文件有执行权

  • 在执行过程中,调用者会暂时获得该文件的所有者权限

  • 该权限只在程序执行的过程中有效

由于SUID只对二进制文件有效,因此我们可以根据需要将要设置的二进制文件赋予SUID权限,此时其他用户即具备了执行此文件的权限

赋予SUID权限的命令如下:

    chmod u+s usr/bin/passwd

    例如:普通用户无法执行打开和关闭防火墙的命令,此时我们给予systemctl文件赋予SUID权限,然后在普通用户下执行,如图:

    在普通用户下执行开启防火墙命令,如图:

    二、SGID

    SGID即Set GID的缩写,它出现在文件所属组权限的执行位上面,它对普通二进制文件和目录都有效, 当它作用于普通文件时,和SUID类似,在执行该文件时,用户将获得该文件所属组的权限。当SGID作用于目录时,意义就非常重大了。当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录用SGID修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。

    设置SGID的命令如下:

      chmod g+s /tmp

      例如:修改/tmp目录的文件夹权限为SGID,然后通过普通用户在该目录下创建文件,如图:

      从上图看出,设置完sgid后,用户组位置的x变成了s,此时通过普通用户在tmp目录下创建文件,如图:

      从上面可以看出,在普通用户下创建文件abcd,可以看出文件的属组继承的当前/tmp的属组,为root,如果不设置SGID,那么abcd文件的属主和属组都为admin_app

      注意:通常情况下SGID只用来设置目录权限,SUID和SGID都是高危操作,慎重使用

      文章转载自运维DevOps,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论