Linux权限管理:setUID、setGID 和 Sticky BIT

1、setUID、setGID 和 Sticky BIT 的功能详解

  setuid 功能:

    1、只有可执行的二进制文件程序才能设定 SUID 权限(前提)

    2、命令执行者要对该程序有执行(x)权限(必要条件)

    3、命令执行者再执行该程序时获得该程序文件属主的身份

    4、setuid 权限只在该程序执行过程中生效

  setgid 功能: -- 对文件而言

    1、只有可执行的二进制程序设置SGID

    2、命令执行者要对该程序拥有执行(x)权限

    3、命令执行再执行程序的时候,组身份升级为该程序文件的属组

    4、setgid 权限童谣只在该程序执行过程中有效

  sticky BIT 功能:

    1、粘位一般用于对目录进行操作

    2、普通用户对该目录拥有 w 和 x 权限

    3、设置了粘位的目录,其目录下的文件只有由那个创建的人才能删除,其他人即使拥有w权限也是不行的(root管理员除外)
  

2、setuid、setgid 和 sticky BIT的实例应用

  setuid和setgid

  setuid 和setgid位是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令。比 如我们用普通用户运行passwd命令来更改自己的口令,实际上最终更改的是/etc/passwd文件我们知道/etc/passwd文件是用户管理的 配置文件,只有root权限的用户才能更改
  

  作为普通用户如果修改自己的口令通过修改/etc/passwd肯定是不可完成的任务,但是不是可以通过一个命令来修改呢答案是肯定的,作为普通用 户可以通过passwd 来修改自己的口令这归功于passwd命令的权限我们来看一下;
  

  因为/usr/bin/passwd 文件已经设置了setuid 权限位(也就是r-s--x--x中的s),所以普通用户能临时变成root,间接的修改/etc/passwd,以达到修改自己口令的权限
  我们在Linux 系统中的超级权限的控制中 有提到过我们知道Linux的用户管理是极为严格的,不同的用户拥有不同的权限,为了完成只有root用户才能完成的工作,我们必须为普通用户提升权 限,最常用的方法就是su或sudo虽然setuid 和setgid也是让普通用户超越自身拥有的普通权限达到root权限的方法,但我不推荐大家使用,因为它能为系统带来隐患!!
  注意:setuid和setgid会面临风险,所以尽可能的少用

  我们想让一个普通用户 qiuyu 拥有root用户拥有超级rm删除权限,我们除了用su或sudo 临时切换到 root身份操作以外,还能怎么做呢?

  

  Linux权限管理:setUID、setGID 和 Sticky BIT_第1张图片

  rm: 无法删除 beinantest.txt: 权限不够
  那我们怎么才能让qiuyu 这个普通用户也拥有root超级的rm 删除功力呢?
  Linux权限管理:setUID、setGID 和 Sticky BIT_第2张图片

  Linux权限管理:setUID、setGID 和 Sticky BIT_第3张图片

  我们只是设置了rm 的setuid位,让普通用户在rm指令上有超级root的删除超级权力
  通过这个例子,我们应该能明白setuid和setgid位的应用了,如同前面所说,让普通用户超越本身的能力,让普通用户能执行只有root才能 执行的命令在这一点,我们要和su和sudo 区分开来请参见su和sudo的文档:Linux 系统中的超级权限的控制
  

  sticky BIT

  我们知道 /tmp 是系统的临时文件目录,所有的用户在该目录下拥有所有的权限,也就是说在该目录下可以任意创建、修改、删除文件,那如果用户A在该目录下创建了一个文件,用户B将该文件删除了,这种情况我们是不能允许的。为了达到该目的,就出现了stick  bit(粘滞位)的概念。它是针对目录来说的,如果该目录设置了stick  bit(粘滞位),则该目录下的文件除了该文件的创建者和root用户可以删除和修改/tmp目录下的stuff,别的用户均不能动别人的,这就是粘滞位的作用。

  设置 /tmp目录的粘位:

  

  再由 qihuan 用户进入该目录下新建 aa 文件并操作:

  

   再用 qiuyu 用户对 aa 进行删除操作:

  Linux权限管理:setUID、setGID 和 Sticky BIT_第4张图片

3、setuid、setgid和 sticky BIT的设置方法
  Chmod命令中的特殊权限位含义:

    1、S_ISUID 04000 文件的 (set user-id on execution)位

    2、S_ISGID 02000 文件的 (set group-id on execution)位

    3、S_ISVTX 01000 文件的sticky 位

    上面的都是8进制数。

  如何设置UID、GID、STICK_BIT:

    SUID:置于 u 的 x 位,原位置有执行权限,就置为 s,没有了为 S .

      chmod u+s  xxx # 设置setuid权限

      chmod 4551 file // 权限: r-sr-x—x

    SGID:置于 g 的 x 位,原位置有执行权限,就置为 s,没有了为 S .

      chmod g+s  xxx # 设置setgid权限

      chmod 2551 file // 权限: r-xr-s--x

    STICKY:粘滞位,置于 o 的 x 位,原位置有执行权限,就置为 t ,否则为T .

      chmod o+t  xxx # 设置stick bit权限,针对目录

      chmod 1551 file // 权限: r-xr-x--t

4、注意事项

  注意:特殊权限只对可执行权限的文件有效,没有执行权限的文件被设置成特殊限位时毫无意义的

  没有可执行权限的文件被设置成特殊权限位的标志:

  SUID---S(大写)---不可用状态

  SGID---S(大写)---不可用状态

  SBIT----T(大写)---不可用状态

你可能感兴趣的:(Linux权限管理:setUID、setGID 和 Sticky BIT)