有关Linux下的权限控制

文件的基本权限

文件权限设置:可以赋予某个用户或组对某个文件或者某个目录的权限,具有其应有的权限

文件/目录基本权限的三个控制对象

  • u:属主(该文件/目录的拥有者)
  • g:属组(该文件/目录的权限拥有组)
  • o:其它所有人(不包括管理员用户,即uid为0的用户,一般是root用户)

文件基本权限的三个组成要素

  • r:是否可读
  • w:是否可写
  • x:是否可执行

需要注意的是,目录和文件的组成要素虽然写法一致,但是含义并不一致!!

目录基本权限的三个组成要素

  • r:是否能够读取目录(是否能够使用ls类权限的权限查看目录下内容)
  • w:是否能够在目录下创建或者删除新的目录或者文件
  • x:是否能够进入目录(是否能够使用cd类指令的权限进入目录) **需要注意的是,目录/文件的权限中,存在部分类似上下位的关系:**
  • 文件权限的上下级:r权限在w权限之上 即:如果一个用户拥有了该文件的w权限,但是没有拥有该文件的r权限,则没法对文件内容进行修改,甚至没法看见该文件内的内容
  • 目录权限的上下级:x权限在w权限之上 即:如果一个用户拥有了该目录的w权限,但是没有拥有该目录的x权限,则没法在该目录下创建新的目录或者文件 另外,目录的权限要部分高于其内部隶属的文件权限:
  • 用户即便在一个文件上被赋予了所有的权限,如果上级的目录没有赋予其w权限,那么这个用户也无法删除这个文件:
  • 反之,如果一个文件的上级目录赋予了一个用户所有的权限,那么即便这个用户没有对于这个文件的任何权限,该用户也仍然可以删除这个文件:

文件/目录基本权限的标识形式

一般来说,我们可以通过**ll指令**,来查看一个文件或者目录的基本权限(指定目录是展示该目录下所有文件和目录的基本权限,指定文件则展示该文件的基本权限):

如上图,可以看见**test目录下的user01文件**的所有基本权限,我们以之释义这个权限段的含义:

  1. 第一个字母:“d”,其代表的含义是这个对象是目录,我们在此不做释义..
  2. 除去字母“d”后,我们对剩下的九个字母一次分成三段落: 即:rwx rwx rwx,它们每一段都由文件/目录基本权限的三个组成要素(r、w、x)组成,并且每一段都对应了一个文件/目录基本权限的三个控制对象(u、g、o),那么很明显,其就是标注了u(属主)的r、w、x权限,g(属组)的r、w、x权限以及o(其他人)的r、w、x权限的权限字段,这个字段的含义为u(属主)、g(属组)以及o(其他人)拥有这个目录的全部权限(r、w、x)

一般来说,这个字段不会全部都为字母,其大多数的表现形式为下:

如上图,我们将其再次分成三段,变成:rw- r- – r- –

这标识了这个目录的**属主拥有r、w权限,但是没有x权限(被符号“-”取代,代表这个对象没有这个位置对应的权限),属组拥有r权限,但是没有w、x权限,其他人拥有r权限,但是也没有w、x权限**

**那么,我们作为管理员用户,理所当然可以去控制所有文件\\目录的权限分配,指令为:*chmod***

但是,在分配权限时,其形式却有所不同:

字母形式

这种形式与ll指令所查看到的形式一致,以字母r、w、x分别标识了目录/文件的三个基本权限,我们也可以以这种直观的形式去管理目录和文件的权限:

由上图所示,**chmod指令**在使用字母形式给文件/目录管理权限时,形式为:

  chmod  [管理的被赋值对象]  [赋值的特殊符号]  [赋值的权限类型]  [管理的文件/目录对象]

其各个字段的释义为:

  • 对象:文件/目录基本权限的三个控制对象(u、g、o),以及包含了三种全部的a(all)
  • 赋值符号:管理增减权限(-、+),或者定义权限(=)
  • 权限类型:文件/目录基本权限的三个组成要素(r、w、x)

示例:

数字形式

用于控制每个文件或者目录的权限的话,字母形式显得似乎有点繁琐,虽然他通俗且易懂,但是对于追求效率的Linux系统来说,它并不是一种好的指令形式,所以,**chmod指令**也拥有着一种特殊化的形式:数字形

我们将ll指令获得的每一段落再次赋予概念,使用二进制的形式,给三个基本组成要素赋予数值:

如上,**r权限被赋予4,w权限被赋予2,x权限被赋予1**,再分析这三个权限对于某一个对象(u、g、o)的有无,从而组成一个加法得出的数字(比如:u对象拥有”r“和”x”权限,则u对象得出的数字为4+1=5),然后将三个得出的数字组合,则可以标识三个对象的所有权限,如此我们可以更加便捷地为文件和目录赋予权限:

例如我们给予所有对象所有权限,则三个数字都应该为4+2+1=7:

文件的特殊权限

为了适应一些特殊的场合,在Linux中文件除了拥有基础的“rwx”权限外,为了适应一些特殊的场合,还有着三种特殊权限,它们分别是:**Set-UID(SUID)、Set-GID(SGID)、Stick-BIT(SBIT)**

他们拥有着一些比基本权限更为复杂的使用场景..

**在介绍三种特殊权限之前,我们需要对于之前基本权限的部分进行些许的扩展,也好为接下来的特殊权限做些许铺垫**

  • 首先,在基本权限部分中,我们讲到权限的数字写法:777是由三种基本权限对于某一个权限控制对象,但这并非是完整的形式,真正完整的形式,应该是加上第四种,也就是加上了特殊权限的7777,四个数字的形式,相比于基本权限,特殊权限只对一种权限控制对象起效,每一个特殊权限正好都对应了一个对象:
    • Set-UID:针对控制对象-u(属主)
    • Set-GID:针对控制对象-g(属组)
    • Stick-BIT:针对控制对象-o(其他人) 因此,在基本权限中所讲述的三数字形式,并非是权限数字化的完整形式..
  • 有关特殊权限的数字化标识,也是特殊化的,普通权限的3个数字分别代表了三个控制对象对该文件的所有权限,但是特殊权限则不同于普通文件,由于其控制对象唯一,而且控制对象也都不相同,所以我们将其数字写在三个控制对象对应所有权限之前,即:若是权限数字化为4个数字出现,那么第一个数字则代表了特殊权限的分配情况**(值得注意的是,同一个文件如果同时给予了三种特殊权限,那么这一般来说是无法使其全部生效的,因为特殊权限的特殊性,同一个文件一般只给予一个特殊权限)** 我们将第一位数字的数值4赋予SUID权限,数值2赋予SUIG权限,数值1赋予给SBIT权限
  • 另外,在基本权限部分中,我们也曾说到过权限的字母形式,理所当然,特殊权限也拥有自己的字母形式:
    • Set-UID:s/S(在启用时,会替代文件属主的x权限)
    • Set-GID:s/S(在启用时,会替代文件属组的x权限)
    • Sticky-BIT:t(在启用时,会替代文件其他人的x权限) 此处的大小写形式,我们将会在接下来详细说明..
  • 每一种特殊权限,都拥有着使用的限制条件,如果不满足其条件,那么即便该权限被启用,也不会起到实质性的作用!! 有关限制的条件,我们将会在接下来详细说明..
  • 最后,特殊权限的赋予和剥夺方式和普通权限一致,可以使用字母形式,亦可以使用数字形式

Set-UID

在介绍SUID权限之前,我们先来看看有关于SUID权限的使用条件:

  1. SUID权限只有在可以执行的二进制程序文件上被启用时,才能生效
  2. SUID权限需要被启用的文件其属主拥有对此文件的基本权限-“x”权限,才能生效**(对root用户作为属主的文件,这项条件可以无视)**
  3. SUID权限需要执行文件者自己也拥有该文件的x“权限”(无论是属组权限还是其他人权限)
  4. SUID权限只会在被启用的文件程序执行过程中生效,其余的一切时间,均不生效

SUID的作用:

在启用并满足了使用条件的文件上,SUID权限所起到的作用,相当于所有使用该文件的用户们都拥有了一个由系统分配的“变身器”,在每次执行该文件的时候,执行该文件的用户(属主除外),都会被强制变身成为该文件的属主,并且全程以该文件的属主身份来执行该文件,直到文件执行结束

也许这么说有些许的抽象,我们拿来Linux系统中最典型的SUID生效文件-**passwd文件**来作为案例,进一步观察SUID

首先,我们观察一下passwd现在所被分配的文件权限是什么:

如上图,我们可以看见,文件权限部分属主部分的**“x”权限**消失,取而代之的是代表了SUID特殊权限的**“s”权限**,这代表了所有用户在执行**passwd**这个可执行的二进制文件程序的时候,都会变身成为其属主-**root用户**,这样一来,所有人就都可以执行passwd指令来更改自己的密码了**(需要注意的是,此处的passwd指令并非为完全的passwd,普通用户即便变身成为root用户,但也仍然不可以将该指令用来更改除自己以外的用户的密码)**

那么,在上述限制条件中我们可以得知:SUID权限在生效时,其文件属主必须拥有“x”权限,我们来将其权限更改,看看效果:

如上图所示,我们分配给 passwd文件以**4655权限**,也就是说我们给予这个文件**SUID权限**,并只给予属主**“wr”权限**,那么按照上述限制条件来说,**SUID权限**理应无法生效,并且,**权限标识上出现的大写S,也正是系统对于用户的警告,因为属主没有该文件的“x”权限,所以此处本应存在的小写“s”变成了大写的“S”**

那么事实真是如此吗?我们仍然观察此处的信息,可以清楚看见,passwd的属主是root用户,也就是超级管理员用户,对于root用户来说,访问文件是不需要什么“rwx”权限的,只要他想,它就能访问任何他想访问的文件或者目录,所以此处我们的SUID权限将仍然生效:

我们更改passwd文件的属主,使其属主不再是root用户,变成一个普通用户,仍将权限给予为4655,再次尝试,看看结果:

如上,明显可以看出更换了属主之后,SUID在属主无“x”权限状态下失效了

Set-GID

SGID权限实际上和SUID权限有些许的类似,只是它对于SUID拥有了更宽广的权限范围,以及一个新的控制对象(此处的控制对象指代目录/文件,并非ugo)

**在介绍SGID权限之前,我们先来看看有关于SGID权限的使用条件:**

  1. 和SUID权限一致,在赋予文件以SGID权限时,SGID权限只有在可以执行的二进制程序文件上被启用时,才能生效**(但不同于SUID权限的是,SGID也可以使用于目录)**
  2. 和SUID权限一致,在赋予文件以SGID权限时,SGID权限需要被启用的文件其属组拥有对此文件的基本权限-“x”权限,才能生效
  3. 和SUID权限一致,在赋予文件以SGID权限时,SGID权限只会在被启用的文件程序执行过程中生效,其余的一切时间,均不生效
  4. 当SGID目录上启用时,需要访问目录的用户自己拥有此目录的“r”和“w”权限

SGID的作用:

满足了SGID权限的生效条件之后,对于文件来说,其作用于SUID如出一辙,只不过变身的对象从自己变为了自己的所属组,也就是在执行二进制文件程序时,普通用户的所属组会暂时变成该文件的属组,直到文件执行完成

而针对目录的时候,其实本质上仍然是更改用户的属组,当SGID生效与目录之上时,如果有用户访问此目录,那么该用户的所属组就会变成该目录的属组,那么,无论是创建文件还是目录亦或是有关组信息的操作,都会留下该目录的属组信息

Sticky-BIT

SBIT权限相较于SUID和SGID权限而言,比较异类,前面两个特殊权限,都是针对提权做限制,而SBIT权限,则是夺权限制

**在介绍SBIT权限之前,我们先来看看有关于SBIT权限的使用条件:**

  1. 与SUID和SGID不同,SBIT权限只能在目录上生效
  2. 想要SBIT权限在目录之上起效,该目录的其他人(o)必须拥有r、w权限

SBIT的作用

满足了SBIT权限的生效条件之后,它对于目录而言,起到了整体的夺权作用。我们通过基础权限的学习理应明白,如果一个目录赋予了**其他人(o)**以**w权限**,那么也就意味着几乎所有人都能够来到这个目录中删除任何的文件(即使这个文件是管理员用户root所创建的),这是十分冲突的,为了弥补这个冲突,SBIT权限诞生。被赋予了**SBIT权限**的目录之下,无论其他人(除开root用户)拥有多高的权限,也没有办法删除别人创建的文件或者目录,只能够删除自己的文件或者目录**(但是,由于拥有了上级目录的w权限他们仍然可以查看并更改这些他人的目录或文件)**

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇