zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    ubuntu安装jdk的两种方法
    LeetCode 606. Construct String from Binary Tree (建立一个二叉树的string)
    LeetCode 617. Merge Two Binary Tree (合并两个二叉树)
    LeetCode 476. Number Complement (数的补数)
    LeetCode 575. Distribute Candies (发糖果)
    LeetCode 461. Hamming Distance (汉明距离)
    LeetCode 405. Convert a Number to Hexadecimal (把一个数转化为16进制)
    LeetCode 594. Longest Harmonious Subsequence (最长的协调子序列)
    LeetCode 371. Sum of Two Integers (两数之和)
    LeetCode 342. Power of Four (4的次方)
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3161511.html
Copyright © 2011-2022 走看看