zoukankan      html  css  js  c++  java
  • 权限管理二

    一、文件特殊权限 SetUID、SetGID、Sticky BIT

    SetUID
    1、SetUID 是什么

    SetUID 的功能可以这样理解:

    • 只有可以执行的二进制程序才能设定 SETUID 权限
    • 命令执行者要对该程序拥有 x(执行)权限
    • 命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程短暂成为为文件的属主)

    SetUID 权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

    2、setuid举例
    passwd命令的执行位置权限是 s 代表passwd这个文件具有 setuid 权限。
    [root@love2 ~]# ll /usr/bin/passwd 
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
    

    当一个具有执行权限的文件设置 SetUID 权限后,用户执行这个文件时将以文件所有者的身份执行。/usr/bin/passwd命令具有 SetUID 权限,所有者为 root (Linux 中的命令默认所有者都是 root) , 也就是说当普通用户使用 passwd 更改自己密码的时候,一瞬间灵魂附体,实际是在用 passwd 命令所有者 root 的身份在执行 passwd 命令,命令执行完成 后该身份也随之消失。如果取消 SetUID 权限,则普通用户就不能修改自己的密码了。
    测试

    删除s权限
    [root@love2 ~]# chmod u-s /usr/bin/passwd 
    [root@love2 ~]# su - love2 
    passwd: Authentication token manipulation error
    love2用户修改密码报错。
    
    3、检测setuid

    因为setuid权限比较危险,所以我们需要检查计算机内的可执行文件,看是否有一些可以文件被赋予setuid权限。
    脚本参考于他人。可提前搜索系统中所有拥有 SUID 和 SGID 的文件作为模板文件。我的模板文件为/root/setuid.check

    find / -perm -4000 -o -perm -2000 > /tmp/setuid.check
    #搜索系统中所有拥有 SUID 和 SGID 的文件,并保存到临时目录中。 
    for i in $(cat /tmp/setuid.check)  
    #做循环,每次循环取出临时文件中的文件名 
            do
            grep $i /root/setuid.check > /dev/null  
            #比对这个文件名是否在模板文件中                 
            if [ "$?" != "0" ]     # 如果不在,则将文件添加到日志文件中                
                    then                        echo "$i isn't in listfile! " >> /root/suid_log_$(date +%F)  # 如果不在,则将文件添加到日志文件中           
            fi
    done 
    rm -rf /tmp/setuid.check # 删除临时文件 
    
    SetGID
    1、针对文件的作用

    SGID 即可以针对文件生效,也可以针对目录生效,这和 SUID 明显不同。如果针对文件,SGID 的 含义如下:

    • 只有可执行的二进制程序才能设置 SGID 权限
    • 命令执行者要对该程序拥有 x(执行)权限
    • 命令执行在执行程序的时候,组身份升级为该程序文件的属组
    • SetGID 权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
    [root@love2 ~]# ll /var/lib/mlocate/mlocate.db
    -rw-r----- 1 root slocate 4252817 Dec  2 03:34 /var/lib/mlocate/mlocate.db
    大家发现属主权限是 r、w,属组权限是 r,但是其他人权限是 0: 
    [root@love2 ~]# ll /usr/bin/locate
    -rwx--s--x. 1 root slocate 40520 Apr 11  2018 /usr/bin/locate
    当普通用户 love2 执行 locate 命令时,会发生如下事情:
    /usr/bin/locate 是可执行二进制程序,可以赋予 SGID
    用户 love2 执行/usr/bin/locate 命令时,组身份会升级为 slocate 组,而 slocate 组对 /var/lib/mlocate/mlocate.db 数据库拥有 r 权限,所以普通用户可以使用 locate 命令查询 mlocate.db 数据库 
    命令结束,love2 用户的组身份返回为 love2 组
    
    2、针对目录的作用(作用不大)

    如果 SGID 针对目录设置,含义如下:

    • 普通用户必须对此目录拥有 r 和 x 权限,才能进入此目录
    • 普通用户在此目录中的有效组会变成此目录的属组
    • 若普通用户对此目录拥有 w 权限时,新建的文件的默认属组是这个目录的属组。
    3、文件特殊权限之 Sticky BIT

    Sticky BIT 粘着位,也简称为 SBIT。SBIT 目前仅针对目录有效,它的作用如下:

    • 粘着位目前只对目录有效
    • 普通用户对该目录拥有 w 和 x 权限,即普通用户可以在此目录拥有写入权限
    • 如果没有粘着位,因为普通用户拥有 w 权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了 root 可以删除所有文件,普通用户就算拥有 w 权 限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
    4、设定文件特殊权限

    特殊权限这样来表示:

    • 4 代表 SUID
    • 2 代表 SGID
    • 1 代表 SBIT
    [root@love2 ~]# chmod 4755 ftest  # 赋予 SUID 权限 
    [root@love2 ~]# chmod 2755 ftest  # 赋予 SGID 权限 
    [root@love2 ~]# mkdir dtest 
    [root@love2 ~]# chmod 1755 dtest/ #SBIT 只对目录有效,所以建立测试目录,并赋予 SBIT  
    

    二、文件系统属性 chattr 权限

    1、命令格式
    [root@love2 ~]# chattr [+-=] [选项] 文件或目录名 
    选项:  
    +: 增加权限  
    -: 删除权限  
    =: 等于某权限 
    i: 如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置 i 属性,那么只能修改目录下文件的数据,但不允许建立和删  除文件。   
    a: 如果对文件设置 a 属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删  除 
    e: Linux 中绝大多数的文件都默认拥有 e 属性。表示该文件是使用 ext 文件系统进行存储的,而且不能使用“chattr -e”命令取消 e 属性。 
    
    2、查看文件系统属性

    lsattr

    [root@love2 ~]# lsattr 选项 文件名 
    选项:  
    -a  显示所有文件和目录  
    -d 若目标是目录,仅列出目录本身的属性,而不是子文件的
    
    一般都是显示 e 权限
    [root@love2 ~]# lsattr .bashrc 
    -------------e-- .bashrc
    
  • 相关阅读:
    python--DAY7面向对象进阶
    python--socket实例
    Python---day5-各类模块的使用
    python--day4--迭代器、生成器
    Python--三元运算与lambda表达式
    python--函数式登录程序
    Python--变量作用域
    Python--函数
    Python----文件的IO操作
    swagger2文档的步骤
  • 原文地址:https://www.cnblogs.com/hjnzs/p/11969965.html
Copyright © 2011-2022 走看看