• Linux特殊权限:SUID、SGID、SBIT


    SUID:

         只对二进制程序有效
         执行者对于程序需要有x权限
         在程序运行过程中,执行者拥有程序拥有者的权限
         例如:
         普通用户执行passwd命令。
         首先查看passwd命令的绝对路径:
           
         查看passwd命令权限:
           
         passwd的拥有者是root,且拥有者权限里面本应是x的那一列显示的是s,这说明这个命令具有SUID权限。
         同时发现普通用户没有w权限,所以按理来说普通用户是不能执行这个命令的,因为这个命令修改了密码肯定是要写文件的。

         进一步分析,实际上passwd这个命令会操作/etc/shadow这个文件,因为密码都是放在这里,查看密码文件权限:

           
         发现权限是000,(注意:root用户对所有文件都是有rw权限的,对所有目录都是有rwx权限的),这意味着普通用户确实不能独读或写这个文件。
         不过因为passwd命令具有SUID权限,所以普通用户执行这个命令时,当系统生成对应的进程后,这个进程就拥有了/usr/bin/passwd文件拥有者root的权限。

           

         上面的操作在要输入密码时按CTRL+Z,回车。
         查看进程树:
           
         可以发现确实passwd的权限不是pstar而是root!
     

    SGID:

         对于文件:
              SGID对于二进制程序有用
              程序执行着要有x权限
              执行者在执行过程中会获得改程序用户组的权限(相当于临时加入了程序的用户组)
              例如:
              普通用户使用locate命令。(直接看图)
                
              发现用户组权限中应该出现x的位置显示的s,表示这个命令具有SGID权限。而普通用户只有x权限而没有rw权限。
              locate这个命令,实际上会去访问/var/lib/mlocate/mlocate.db这个文件。
                
              这个文件对于普通用户没有任何权限。所以理论上普通用户执行locate命令是不行的。
              不过因为locate命令有SGID权限,所以运行locate生成进程时,这个进程会得到locate命令的用户组权限,相当于pstar这个用户被临时加入了用户组slocate。
              于是就对mlocate.db这个文件有了r权限,可以访问了!
         对于目录:
              用户对此目录有rx权限可以进入目录
              用户进入此目录后,有效用户组会变成该目录的用户组
              若用户在此目录有w权限,则用户创建的文件用户组与该目录用户组相同
              例如:
              一个团队想在linux某个目录下协同工作来做一个项目,那么每个团队成员都得对这个目录下的所有文件具有rwx权限。
              于是我们首先新建一个用户组,再新建几个账号,每个账号的用户组都加入刚才新建的那个用户组。
              再新建工作目录,权限设为770,把目录的用户组加上上一步新建的用户组。
              到这里为止,我们思考下会有什么问题?
              现在账号A新建一个文件,新建文件的拥有者和用户组都会是A!重要的是其他用户都无法访问这个文件!
              所以我们需要给这个目录加入SGID权限,之后任意一个用户创建的文件,文件用户组都会是这个目录的用户组。万事OK!
     

    SBIT:

         只针对目录有效
         当用户对目录拥有wx权限时,用户在该目录创建的文件或目录,只有自己与root才可以删除。
     
     

    设置和查看SUID/SGID/SBIT权限的方法:

         SUID是4   SGID是2    SBIT是1
         chmod 4755 filename
         第一个7代表的就是这三个特殊命令,后面的755是普通权限。上面的命令把filename这个文件加入了SUID权限。
         查看特殊权限的方法就是普通的ls命令:
              SUID会在所属用户权限本应是x的地方显示s
              SGID会在所属用户组权限本应是x的地方显示s
              SBIT在其它用户权限本应是x的地方显示t
         如果希望查找系统中所有具有特殊权限的文件,则:
         find / -perm +7000
  • 相关阅读:
    WPF,WinForm调用WCF RIA
    使用c#调用XMLHTTP(XMLHTTPClass) ,发送和返回 json
    WPF 不能dll添加引用的问题
    ORACLE 10g下载|ORACLE 10g下载地址|ORACLE 10g官网下载地址
    写给我们这些浮躁的程序员
    oracle 10g 几个版本jdbc驱动下载
    List对象排序通用方法
    SQL 常用的计算时间的方法
    JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载
    Integer 自动装箱机制
  • 原文地址:https://www.cnblogs.com/pcyy/p/8514926.html
Copyright © 2020-2023  润新知