zoukankan      html  css  js  c++  java
  • 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身份操作以外,还能怎么做呢?

      

      

      rm: 无法删除 beinantest.txt: 权限不够
      那我们怎么才能让qiuyu 这个普通用户也拥有root超级的rm 删除功力呢?
      

      

      我们只是设置了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 进行删除操作:

      

    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(大写)---不可用状态

  • 相关阅读:
    struts的action直接输出中文备注【原创】
    iframe高度处理【原创】
    Gel备注【原创】
    关于用jsp生成xml的问题【原创】
    网上流行的flash切换图片之研究【原创】
    c#连mysql的latin1编码乱码问题
    windows phone 7图片搜索小工具(源码)
    家猫js类库
    理解c#中的readonly,const与enum枚举
    Silverlight 雷达图和一种特殊泡泡画法
  • 原文地址:https://www.cnblogs.com/qiuyu666/p/11818730.html
Copyright © 2011-2022 走看看