Linux权限篇

1.什么是权限?

生活中,有些事情你不能做,别人能做,这叫别人有做某事的权限;

Linux中,权限的概念也是类似的,特指通过一定的条件,拦住一部分人,给另一部分人权限去访问资源


2.权限的本质

上面说到,权限是限制人的,因此权限一定离不开人;另一方面,权限又跟事物的自身属性相关,你总不能说我去爱奇艺上刷算法题吧

因此,权限 = 人 + 事物属性

这里的“人”特指你充当什么样的角色,而不是你本人是谁;比如你能进入你们学校,是因为你叫xxx,还是因为你是你们学校的学生,所以能进入你们学校

接下来就分别从“人”和“事物属性”这两方面分别谈谈权限


3.Linux中的用户

Linux中的用户有两种:

  • root:超级管理员账号
  • /home/xxx:普通用户

3.1 用户切换

  • 从root切换为普通用户:[su](切换后当前路径不变) 或者 [su -](切换后直接到用户家目录)
  • 从普通用户切换到root:[su] 或者 [su -]Linux权限篇_第1张图片

有这样一种情景,我是个普通用户,但我想以root的身份执行一条命令,该怎么办?

第一种方法:在你自己的Linux服务器上,直接[su -]切换成root,再执行命令;但在以后的工作中,我们一般都是普通用户,也不可能登上root账号,所以这种方式显然是不实际的

第二种方法:sudo + 命令,在执行的命令最前面加上[sudo],此时要求输入普通用户的密码;有人会问了,我想以root的身份执行命令,不应该是输入root的密码吗?Linux权限篇_第2张图片

实际上,普通用户执行sudo时,默认情况下是不能执行的

需要在root下将普通用户添加到“白名单”列表中,允许普通用户使用指令提权,才能sudo一个命令

因为root已经允许普通用户使用指令提权了,因此sudo时只需要普通用户的密码


3.2 Linux中的“人”

Linux中文件的所属者有三种角色:拥有者,所属组,其他人Linux权限篇_第3张图片

文件属性中并没有列出其他人这一栏,因为拥有者和所属组之外的就是其他人,比如我是一个普通用户,去访问别的用户的文件,这时我就是其他人

三种角色跟前面的用户有什么关系?

前面的用户是具体的人,而拥有者,所属组,其他人是具体的角色,角色是需要人来承担的

我有权限访问一个文件,不是因为我是xxx用户,而是因为我是该文件的拥有者或所属组


4.Linux中文件的权限

4.1文件的类型

在Linux中,不用文件的后缀区分文件的类型,也就是说Linux中文件的后缀只是摆设;但还是建议创建文件时加上后缀,便于自己区分

注意:只是Linux系统不以后缀区分文件类型,不代表Linux中的工具不以后缀区分文件类型,比如gcc在编译一个文件时,需要判断该文件是不是一个源代码文件

文件属性中的第一列表示文件的类型

  • -:普通文件
  • d:目录文件
  • b:块设备文件
  • c:字符设备文件
  • p:管道文件
  • l:链接文件

目前,我们只需认识-和d即可

4.2文件的属性权限

文件的属性权限有三种,分别是

  • r:读权限
  • w:写权限
  • x:可执行权限

文件的属性中,除去第一列,往后每三列,分别代表拥有者,所属组,other对该文件的权限

Linux权限篇_第4张图片

因为权限 = 角色 + 属性,所以以后我们描述一个权限时,应当是拥有者/所属组/other 对该文件 有/没有 r/w/x权限

4.2.1修改权限

在讲如何修改一个文件的权限之前,我们得知道,一个文件的权限谁能修改?​​​​​​​

  1. 该文件的拥有者
  2. root

我们将介绍两种方式来修改权限

第一种方法:chmod​​​​​​​

  • ​​​​​​​chmod [u/g/o/a][+/-][r/w/x] filename

Linux权限篇_第5张图片

可以看到,去掉了文件对应的权限,就不能对该文件进行读/写/执行操作了

也就是说,对于普通用户,要受到文件权限的约束,即使该文件是自己的

为什么要设置文件权限?

Linux权限篇_第6张图片

在上述操作中,我们切换了用户,去对一个不属于自己的文件进行操作时,没有对应的文件属性权限就不能执行对应的操作

因此权限的意义就是保证普通用户文件的安全

Linux权限篇_第7张图片

上述操作中,我是file.txt文件的拥有者,没有r权限,确实不能读文件;但我也是file.txt文件的所属组,且所属组有r权限,但依旧不能读文件,这是为什么?

实际上,Linux的身份认证只识别一次,也就是说,如果你是文件的拥有者,Linux识别你是文件的拥有者后,就只看文件的拥有者权限了

怎么去验证呢?

Linux权限篇_第8张图片

我们用root修改file.txt文件的拥有者;切换为普通用户,此时我们不是file.txt文件的拥有者,但是file.txt文件的所属组,且所属组有rw权限,因此我们可以对file.txt文件进行读写

权限 = 角色(具体的人) + 权限属性

上面我们介绍了修改文件的属性权限,那怎么修改一个文件的角色呢?

  • chown/chgrp xxx filename
  1. 以普通用户身份修改:需要指令提权,在指令的前面加上sudo
  2. 以root身份修改:随便修改

第二种方法:八进制表示

  • chmod 八进制 filename

一个权限的有无可以用1或0表示,因此我们将一个角色的对应权限表示成二进制,比如rwx就是110,再表示成八进制,也就是6;同样将其他角色的对应权限也表示成八进制

比如,一个文件的拥有者,所属组,other拥有的权限是rwx,rwx,rwx,可以表示成777

Linux权限篇_第9张图片

如何理解x权限?

一个文件有了x权限是不是就表示该文件可执行了?Linux权限篇_第10张图片

可以看到:一个文件可执行 = 该文件本身是一个可执行文件 + 用户有对该文件可执行权限

4.3目录的权限

  • 目录的r权限决定能不能查看该目录中的文件
  • 目录的w权限决定能不能对该目录中的文件进行增删改
  • 目录的x权限决定能不能进入改目录

如何理解目录的rwx权限?

文件 = 内容 + 属性

目录的内容是该目录中所有文件的详情数据

没有r权限就代表不能对目录的内容进行读,也就是不能查看目录中的文件

没有w权限就代表不能对目录进行写,也就是不能修改目录中的文件,包括删除和增加文件

Linux权限篇_第11张图片

在上面的目录中,我作为一个普通用户,能删除root创建的文件吗?

答案是可以的

因为删除一个文件与该文件本身没有关系,与用户有没有该文件所处目录的w权限有关


5.文件的默认权限

当创建一个文件或目录时,可以看到自动带上了一些权限,为什么就自动带上某些权限呢?

Linux中创建普通文件的起始权限是666创建目录的起始权限是777;但好像跟上面的权限有些不同

文件创建的过程中,会过滤掉umask中出现的权限

文件的最终权限 = 起始权限 & (~umask)​​​​​​​

你可能感兴趣的:(Linux,linux)