Linux文件目录权限、隐藏属性、特殊权限

时间:2021-06-18 15:12:52

一、 Linux文件及目录权限概念

1.1 查看目录或者文件的权限

  “ls -al”命令可以查看
Linux文件目录权限、隐藏属性、特殊权限

1.2 目录及文件权限分析

从上面的图中可以看到,目录或者文件的属性字段为:
  - - - - - - - - - -
从左至右分别表示:文件的类型、文件(目录)拥有者的读权限(u)、文件(目录)拥有者的写权限(w)、文件(目录)拥有者的执行权限(x),后面以此类推分别为所属组和其他人的对此文件(目录)的权限。

  • 第一个字符-文件类型
    [d]:目录
    [-]:文件
    [l]:链接文件
    [b]:可随机存储设备
    [c]:一次性读取设备(键盘、鼠标等)
  • 三个为一组的权限
    r:可读,用数字4表示
    w:可写,用数字2表示
    x:可执行,用数字1表示
    对于文件来说:r表示可以读取文件里面的内容、w表示可以向文件写入内容、x表示可以执行该文件(前提是该文件是可执行文件)。
    对于目录来说:r表示可以读取该目录下的文件,例如可以使用ls显示目录里面的文件、w表示可以在目录下创建文件、x表示可以进入目录,例如可以使用cd 进入一个目录。

1.3 文件与目录的默认权限umask

首先执行命令umask查看一下:

    Linux文件目录权限、隐藏属性、特殊权限

 我们发现显示的是0022,那么它们代表什么意思呢?现在新建一个文件和目录,然后查看新建的文件和目录的权限。
    Linux文件目录权限、隐藏属性、特殊权限
    从图中可以看出新建的f1文件权限为644,新建的目录d1权限为755,如果一个文件或者文件具有全部权限,那么它的权限为777,我们可以发现777去掉022就是755,其实umask代表的就是新建的文件或者目录去掉的权限,但是新建文件不具备执行权限,因此还要在umask的基础上再去掉执行权限!所以新建的文件权限就是644了!

1.4 更改文件或者目录的属性和权限

  • chown:更改文件拥有者
  • chgrp:更改文件所属组
  • chmod:更改文件权限,包括后面会说到的SUID等
    Linux文件目录权限、隐藏属性、特殊权限

二 文件与目录的隐藏属性和特殊权限

2.1 文件与目录的隐藏属性

  • chattr设置文件隐藏属性
    chattr [+-=] [ASacdistu] 其中[]代表里面的参数可选
    A:存取文件时,atime不会被修改,可避免过度I/O操作
    S:进行任何的文件修改都会同步到磁盘(sync)
    a:这个文件只能增加数据,不能删除也不能修改文件数据,只有root才能设置这个属性
    c:会自动对文件进行压缩,读取的时候回自动解压缩
    d:当dump程序被执行时,可使文件不被dump备份
    i:让一个文件不被删除、改名、设置链接也无法写入或新增数据
    s:如果一个文件被删除,它将完全从磁盘删除
    u:如果文件被删除,数据的内容还存在在磁盘中

  • lsattr显示文件隐藏属性
    lsattr [-adR] 文件或目录
    -a:将文件的隐藏属性显示出来
    -d:如果接的是目录,仅列出目录本身的属性而非目录内的文件
    -R:连同子目录的属性也一并显示
    Linux文件目录权限、隐藏属性、特殊权限
    从上图可以看出设置了i隐藏属性后,root也无法删除,必须把i属性去掉才可以删除。

    2.2 文件的特殊权限SUID、SGID、SBIT

  • SUID(set UID)
    当S出现在文件拥有者的x权限上面时,执行者在执行该文件的过程中拥有该文件拥有者的权限!例如/etc/passwd文件
    Linux文件目录权限、隐藏属性、特殊权限
    虽然该文件(命令)所输入和所属组都是root,但是每个人都可以修改自己的密码,因为在执行该文件(命令)的时候,设置了UID,就拥有了root权限。
    SUID只对可执行文件有效!,也就是二进制文件

  • SGID(set GID)
    SGID对文件和目录都有效,其效果分别如下表述:
    —-针对文件,SGID对二进制文件有效、执行者需要拥有执行文件的X权限,执行者执行过程中会获得程序文件群组的支持!
    例如locate程序去查找mlocate.db数据库:
    Linux文件目录权限、隐藏属性、特殊权限
    从上面可以知道,locate文件(命令)的组X权限具有S权限,那么执行的人在执行locate时候将会获得slocate群组的权限,这样就可以查看mlocate.db的内容了。

    —-针对目录,SGID设置在目录的X上面,如果执行者具有目录的w和x权限,那么执行者在该目录下所创建的文件具有和目录相同的所属组!

  • SBIT (Sticky Bit)
    只对目录有效,对目录设置了SBIT之后,在目录中创建的文件只能自己和root可以删除。用鸟哥的话说:“当甲这个使用者于 A 目录是具有群组或其他人的身份,并且拥有该目录 w 的权限, 这表示“甲使用者对该目录内任何人创建的目录或文件均可进行 “删除/更名/搬移” 等动作。”不过,如果将 A 目录加上了 SBIT 的权限项目时, 则甲只能够针对自己创建的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。”可以自己试试操作!

    设置特殊权限的命令

      4—SUID
      2—SGID
      1—SBIT
    Linux文件目录权限、隐藏属性、特殊权限