• 文件特殊权限


    一、SUID


    案例


    psswd的所有者(root)权限不是所谓的rwx,而是rws,这有什么特殊含义没,我们再来看看下一个文件

    这个文件就是我们前面说的过的存放用户密码的文件,但是我们发现这个文件的所有权限是关闭的(当然这对root用户无效)

    这时会出现一个问题,passwd命令对于普通用户是可执行的。当普通用户执行passwd来修改密码时,那么passwd的执行者将是普通用户。而passwd操作对象应该是shadow文件,它需要将用户的密码保存进shadow文件。从上面的图中可知shadow文件是被禁止修改的。那么可以简单的来说普通用户是如何修改shadow文件的。

    要求


    • 这有可执行程序设定SUID才有意义
    • 命令的执行者拥有该文件的执行该权限
    • 当命令执行者执行该文件时,将会临时获得该文件所有者身份(简单的理解就是变身)
    • 当程序执行完,又恢复本尊

    解决案例


    当普通用户执行passwd命令时,会“变身”为root用户,而root用户是无视规则的,可以直接修改shadow文件,那么passwd程序也就有了可以修改该文件的权限。我们可以对比cat命令来看。

    当我用普通用户来执行cat命令

    直接被拒绝,这是因为cat并没有让普通用户变身的能力

    setuid的使用


      增加S权限

    •  chmod 4755 文件名

    • chmod u+s 文件名

      取消权限

    • chmod 755 文件名
    • chmod u-s 文件名

    实践


     让普通用户可以查看shadow,注意这很危险

     

     

    二、SGID


    SetGID与SetUID有类似地方,也有不同的地方。SetUID主要是对可执行程序而言,而SetGID不仅对文件有作用,而且对目录也有作用。作用对象为文件时,用户的所属组会变身为文件所属组,我们来看一个典型的例子。

    案例


    locate命令的组权限是开启SGID的,我们知道locate是查看数据库来进行文件定位的,我们来看下数据库。

    我们看到普通用户是没有读权限,但是普通用户是可以执行locate命令来查看文件的。这是因为普通用户在执行locate命令时,它的所属组变为了slocate,而mlocate.db的组权限是开启读的。所以普通用户也可以查看数据库了。

    对目录的作用


    命令使用


    • 设定SGIG

        chmod 2755 文件名

        chmod g+s  文件名

    • 取消SGID

        chmod 755 文件名

        chmod g-s  文件名

    三、SBIT权限


    • SBIT(黏着位)只对目录有效
    • 普通用户对该目录拥有w和x权限,即普通用户在此目录拥有写入权限
    • 如果没有黏着位,由于普通用户对该目录用户写权限,那么它可以删除该目录下的所有文件,但是一旦有了黏着位,那么它只能删除自己建立的文件。

    案例


    我们看到在其它权限中有了个t字符,则说明tmp开启了SBIT权限

    命令使用


    • 设定SBIT

        chmod 1755 目录名

        chmod o+s   目录名

    • 取消SBTI

        chmod 755  目录名

        chmod o-s  目录名

    四、文件属性


    前面介绍的几种权限管理对ROOT用户是无效的,但是如果更改文件属性,则会对ROOT用户产生影响

    • chattr 选项 参数 文件/目录
    • 选项 + - =
    • 参数 i a

    当参数为i 时,如果是文件那么所有用户只能查看该文件内容,不能做任何其它操作。如果是目录,那么能且只能修改该目录下的文件中的数据。

    当参数为a时,如果是文件只能增加数据。如果是目录,只允许在目录中创建文件和修改文件的权限和内容

    abc是个文件

    test是个目录,在查看属性时需要加-d

     

  • 相关阅读:
    Laravel实用小功能
    _initialize() 区别 __construct()
    PHP websocket之聊天室实现
    原来PHP对象比数组用更少的内存
    PHP协程
    mongodb数据库的导出与导入
    我理解的数据结构(一)—— 数组(Array)
    Swoole 源码分析——Server模块之Worker事件循环
    PHP面试:说下什么是堆和堆排序?
    我理解的数据结构(二)—— 栈(Stack)
  • 原文地址:https://www.cnblogs.com/xidongyu/p/5487452.html
Copyright © 2020-2023  润新知