1.什么是权限?
生活中,有些事情你不能做,别人能做,这叫别人有做某事的权限;
Linux中,权限的概念也是类似的,特指通过一定的条件,拦住一部分人,给另一部分人权限去访问资源
2.权限的本质
上面说到,权限是限制人的,因此权限一定离不开人;另一方面,权限又跟事物的自身属性相关,你总不能说我去爱奇艺上刷算法题吧
因此,权限 = 人 + 事物属性
这里的“人”特指你充当什么样的角色,而不是你本人是谁;比如你能进入你们学校,是因为你叫xxx,还是因为你是你们学校的学生,所以能进入你们学校
接下来就分别从“人”和“事物属性”这两方面分别谈谈权限
3.Linux中的用户
Linux中的用户有两种:
- root:超级管理员账号
- /home/xxx:普通用户
3.1 用户切换
- 从root切换为普通用户:[su](切换后当前路径不变) 或者 [su -](切换后直接到用户家目录)
- 从普通用户切换到root:[su] 或者 [su -]
有这样一种情景,我是个普通用户,但我想以root的身份执行一条命令,该怎么办?
第一种方法:在你自己的Linux服务器上,直接[su -]切换成root,再执行命令;但在以后的工作中,我们一般都是普通用户,也不可能登上root账号,所以这种方式显然是不实际的
第二种方法:sudo + 命令,在执行的命令最前面加上[sudo],此时要求输入普通用户的密码;有人会问了,我想以root的身份执行命令,不应该是输入root的密码吗?
实际上,普通用户执行sudo时,默认情况下是不能执行的
需要在root下将普通用户添加到“白名单”列表中,允许普通用户使用指令提权,才能sudo一个命令
因为root已经允许普通用户使用指令提权了,因此sudo时只需要普通用户的密码
3.2 Linux中的“人”
Linux中文件的所属者有三种角色:拥有者,所属组,其他人
文件属性中并没有列出其他人这一栏,因为拥有者和所属组之外的就是其他人,比如我是一个普通用户,去访问别的用户的文件,这时我就是其他人
三种角色跟前面的用户有什么关系?
前面的用户是具体的人,而拥有者,所属组,其他人是具体的角色,角色是需要人来承担的
我有权限访问一个文件,不是因为我是xxx用户,而是因为我是该文件的拥有者或所属组
4.Linux中文件的权限
4.1文件的类型
在Linux中,不用文件的后缀区分文件的类型,也就是说Linux中文件的后缀只是摆设;但还是建议创建文件时加上后缀,便于自己区分
注意:只是Linux系统不以后缀区分文件类型,不代表Linux中的工具不以后缀区分文件类型,比如gcc在编译一个文件时,需要判断该文件是不是一个源代码文件
文件属性中的第一列表示文件的类型
- -:普通文件
- d:目录文件
b:块设备文件c:字符设备文件p:管道文件l:链接文件
目前,我们只需认识-和d即可
4.2文件的属性权限
文件的属性权限有三种,分别是
- r:读权限
- w:写权限
- x:可执行权限
文件的属性中,除去第一列,往后每三列,分别代表拥有者,所属组,other对该文件的权限
因为权限 = 角色 + 属性,所以以后我们描述一个权限时,应当是拥有者/所属组/other 对该文件 有/没有 r/w/x权限
4.2.1修改权限
在讲如何修改一个文件的权限之前,我们得知道,一个文件的权限谁能修改?
- 该文件的拥有者
- root
我们将介绍两种方式来修改权限
第一种方法:chmod
- chmod [u/g/o/a][+/-][r/w/x] filename
可以看到,去掉了文件对应的权限,就不能对该文件进行读/写/执行操作了
也就是说,对于普通用户,要受到文件权限的约束,即使该文件是自己的
为什么要设置文件权限?
在上述操作中,我们切换了用户,去对一个不属于自己的文件进行操作时,没有对应的文件属性权限就不能执行对应的操作
因此权限的意义就是保证普通用户文件的安全
上述操作中,我是file.txt文件的拥有者,没有r权限,确实不能读文件;但我也是file.txt文件的所属组,且所属组有r权限,但依旧不能读文件,这是为什么?
实际上,Linux的身份认证只识别一次,也就是说,如果你是文件的拥有者,Linux识别你是文件的拥有者后,就只看文件的拥有者权限了
怎么去验证呢?
我们用root修改file.txt文件的拥有者;切换为普通用户,此时我们不是file.txt文件的拥有者,但是file.txt文件的所属组,且所属组有rw权限,因此我们可以对file.txt文件进行读写
权限 = 角色(具体的人) + 权限属性
上面我们介绍了修改文件的属性权限,那怎么修改一个文件的角色呢?
- chown/chgrp xxx filename
- 以普通用户身份修改:需要指令提权,在指令的前面加上sudo
- 以root身份修改:随便修改
第二种方法:八进制表示
- chmod 八进制 filename
一个权限的有无可以用1或0表示,因此我们将一个角色的对应权限表示成二进制,比如rwx就是110,再表示成八进制,也就是6;同样将其他角色的对应权限也表示成八进制
比如,一个文件的拥有者,所属组,other拥有的权限是rwx,rwx,rwx,可以表示成777
如何理解x权限?
一个文件有了x权限是不是就表示该文件可执行了?
可以看到:一个文件可执行 = 该文件本身是一个可执行文件 + 用户有对该文件可执行权限
4.3目录的权限
- 目录的r权限决定能不能查看该目录中的文件
- 目录的w权限决定能不能对该目录中的文件进行增删改
- 目录的x权限决定能不能进入改目录
如何理解目录的rwx权限?
文件 = 内容 + 属性
目录的内容是该目录中所有文件的详情数据
没有r权限就代表不能对目录的内容进行读,也就是不能查看目录中的文件
没有w权限就代表不能对目录进行写,也就是不能修改目录中的文件,包括删除和增加文件
在上面的目录中,我作为一个普通用户,能删除root创建的文件吗?
答案是可以的
因为删除一个文件与该文件本身没有关系,与用户有没有该文件所处目录的w权限有关
5.文件的默认权限
当创建一个文件或目录时,可以看到自动带上了一些权限,为什么就自动带上某些权限呢?
Linux中创建普通文件的起始权限是666,创建目录的起始权限是777;但好像跟上面的权限有些不同
文件创建的过程中,会过滤掉umask中出现的权限
文件的最终权限 = 起始权限 & (~umask)