大家好,我是苏貝,本篇博客带大家了解Linux的权限,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
一.什么是权限?
就是通过一定的条件,拦住一部分人,给了一部分人权力,来访问某种资源。
比如:腾讯视频的vip能看一些非vip不能看的电影
二.权限的本质
权限同人/角色有关
权限同事物的属性有关
比如:你上课签到需要在学习通上,不能在腾讯视频上,因为学习通和腾讯视频的属性不同
三.Linux中的用户
1. Linux中的3中角色:拥有者 、所属组 、other
拥有者:你创建了一个文件,那你就是该文件的拥有者
所属组:首先讲解一下用户组的概念。用户组就是一组用户的集合,那为什么要把用户放入一个用户组中呢?当然是为了方便管理。大家想想,如果我有 100 位用户,而这 100 位用户对同一个文件的权限是一致的,那我是一位用户一位用户地分配权限方便,还是把 100 位用户加入一个用户组中,然后给这个用户组分配权限方便呢?不言而喻,一定是给一个用户组分配权限更加方便。
所属组类似,所属组内的所有人对同一个文件的权限相同
other:除了拥有者和所属组外的所有人
2. 具体的人
Root 超级管理员,不受权限约束
其它的都是普通用户
Root和普通用户之间可以进行身份的切换吗?可以的
普通用户变成root
1) su+输入root的密码
这样就是进行身份的变化,由普通用户变成root
2) su - 然后再输入root的密码
这样就是将root账号重新登陆
Root变成普通用户
Su/su- 用户名即可,不需要输入用户的密码
我不想变成root,但是我想以root的身份执行一个工作,这该怎么办?
用sudo提权
这里有2个问题:
为什么sudo对指令进行提权的时候,输入的是普通用户的密码,而不是root的密码?
跳过这个问题,我们来输入自己的密码,但系统会报错,说我们不在sudoers文件中,这又是怎么回事呢?
这两个问题我们暂时不解决,等学习的更深入,我们会知道的
四.Linux中文件的权限
权限=用户角色+文件权限属性
1. 前10个字符
我们知道,从拥有者开始往后的所有信息的意思,那拥有者前面的1和再前面的-rw-rw-r--是什么意思呢?
拥有者前面的1的意思我们后面再讲,先了解一下前面的10个字符
第一个字符:
-:表示普通文件
d:表示目录文件
剩下的9个字符:
先了解文件的属性权限(一般为3种):
r:读
w:写
x:可执行权限
剩下的9个字符3个为一组,分别对应:拥有者,所属组,other
拥有者字符:
第一个字符:是否具有读权限
如果是,就为r,否则为-
第二个字符:是否具有写权限
如果是,就为w,否则为-
第三个字符:是否具有可执行权限
如果是,就为x,否则为-
所以该文件拥有者具有读和写权限,没有可执行权限
所属组和other同理
该文件所属组具有读和写权限,没有可执行权限。Other只具有读权限,没有写和可执行权限
2. 快速掌握修改权限的方法:
首先我们要知道,一个文件的权限,谁能修改?
文件的拥有者和root
现在我们有下面这个文件,它的拥有者是我们自己,我们是普通用户
(a) 添加拥有者的可执行权限
U代表拥有者user
(b) 去掉拥有者的读写该文件的权限
(c) 去掉所属组对该文件的读写权限
G代表所属组group
(d) 增加所属组的读写和可执行权限
(e) 去掉other的读权限
O代表other
(f) 增加所有人的读写和可执行权限
A代表所有人all
(g) 去掉所有人的读写和可执行权限
上面用普通用户来举例,root修改权限的方法同普通用户
所以修改权限的方法:
Chmod u±rwx,g±rwx,o±rwx,a±rwx filename
当我们用2进制来表示三种角色的权限:
第一位字符是r,就为1,不是则为0
第二位字符是w,就为1,不是则为0
第三位字符是x,就为1,不是则为0
所以我们很轻易地写出了110 110 100
将每个角色的二进制改为八进制即:664
那如果有角色的八进制为7(111),那说明它有3种权限;八进制为1(001),说明它只有可执行权限;为2(010),说明它只有写权限......
(a)增加所有人的读写和可执行权限
(b)改变权限:
拥有者的权限:(1=001)可执行权限
所属组的权限:(2=010)写权限
Other的权限:(3=011)写权限和可执行权限
(c)去掉所有人的读写和可执行权限
3. 对比权限有无,表现:
(a)
从上面2张图我们可以看出:
对于普通用户,自身要受到相应权限的约束,即使这个文件是自己的
(b)
还是上图,虽然拥有者没有读写和可执行权限,但它在所属组里面,所属组有读写权限,那为什么拥有者还是没有读写权限呢?
因为Linux对用户的身份识别,只会识别一次。在拥有者里面发现zy没有读写和可执行权限,再在所属组里面就不会在对zy进行识别
(c)那root呢?会受到权限的限制吗?
对file.txt文件来说,root不是拥有者,不是所属组,所以root是other,other是没有读写和可执行权限的
但是我们发现root是有读写权限的,所以我们得出下面结论
Root不受权限约束
4. 修改权限的第二套做法
我们知道:权限=用户角色(具体的人)+文件权限属性
上面的快速掌握修改权限的方法是通过修改文件权限属性来完成的,现在我们来试试能否通过修改用户角色(具体的人)来修改权限
下面的命令是想将file.txt的拥有者变成普通用户zkj和超级管理员root
但是系统报错了,因为 把文件给别人是强制给的
所以我们要先用sudo提权或者用su变成root/su-登录root,来将文件强制给别人
(a)改变拥有者
(b)改变所属组
(c)同时改变拥有者和所属组
当角色为root或普通会员提权到root时:
Chown username filename
Chgrp username filename
Chown username1 : username2 filename
5. 文件类型
(a)了解文件类型
在介绍Linux的文件类型之前,请大家思考一下,Windows是如何区分文件类型的?
答案很简单,是通过文件的后缀名
那Linux呢?
Linux不通过后缀区分文件类型(不是说Linux不用后缀名)
那Linux通过什么区分呢?答案是ls-l结果的第一个属性列
Linux文件类型:
-:普通文件:文本文件、可执行程序、库等
d:目录文件
b:块设备文件
c:字符设备文件
p:管道文件
l:链接文件
我们暂时是需要知道上面那2种文件类型,其它的看看就行。
我们进入下一个问题,当log.c的内容是下图时:
将log.c重命名为log.txt,然后再用gcc编译
我们发现,gcc编译失败。不是说Linux不用后缀名来区分文件类型吗?那为什么会编译失败。因为Linux不用,不代表gcc不用。Linux系统!=gcc
总结:Linux不通过后缀名区分文件类型,但Linux上的工具可能通过后缀名来区分
(b)如何理解可执行权限x
可执行权限等于可执行吗?
我们发现,虽然a.out和test.txt都有可执行权限,但是只有a.out能执行,test.txt不能被执行。所以可执行权限!=可执行
能执行=具有可执行权限+本身是个可执行文件
(c)如果我们要进入一个目录,我们需要什么权限?
总共就3种权限,用控制变量法一个一个试吧
我们新建一个目录a/b/c,发现对拥有者,默认有3种权限
现在我去掉读权限,发现能进入目录a,能新建/修改/删除文件,但是不能读取目录a下的文件信息
现在恢复读权限,去掉写权限。发现也能进入目录a,可以读取目录信息,但是不能新建/修改/删除文件
再恢复文件的写权限,去掉文件的可执行权限,我们发现,这时就不能进入目录a了
所以我们要进入一个目录,需要可执行权限x
目录的r属性:决定用户能否查看指定目录的文件信息
目录的w权限:决定用户是否能够在指定目录下新建/修改/删除文件
(d)Linux创建文件的时候,为什么好像有默认权限?为什么是我们看到的样子
创建的普通文件,起始权限是:0666
创建的目录文件,起始权限是:0777
不管前面的0,普通文件是666(110 110 110),所以3种角色都没有可执行权限;普通文件是777(111 111 111),所以3种角色都有可执行权限;
接下来让我们了解一下Linux中的默认权限掩码,我的Linux的默认权限掩码是0002,如果你们的不是0002也是正常的
创建文件的时候,要从起始权限中,过滤掉 (不是简单的减法) 在umask中出现的权限
Umask不管最前面的0,就是002(000 000 010)
最终权限=起始权限&(~umask)
(e)为什么普通用户能删掉别人的文件(包括root)?这合理吗?
前提1:拥有者为zy,3种角色都有3种权限的目录222
前提2:普通用户zkj在zy创建的文件222中新建一个文件zkj.txt。此时zy属于other,只有读权限
前提3:超级管理员root在zy创建的文件222中新建一个文件root.txt。此时zy属于other,只有读权限
那普通用户zy能否删掉zkj.txt和root.txt文件呢?想要删除需要w,zy都没有写权限,那应该是不能删除的,事实真是这样吗?
咦?zy怎么能删除呢?它不是没有写权限吗?
原来,删除一个文件和目标文件没有关系!!!和想要删除的文件所在的目录有关
我们上面有说过:
目录的w权限:决定用户是否能够在指定目录下新建/修改/删除文件
所以,只要普通用户zy在想要删除的文件所在的目录222有w和x权限,就可以删除掉目录222里的所有文件
(f)如果我们想在Linux下,建立一个有多个用户可以操作的共享文件,来被大家共同访问,怎么办?
- 能否将该共享文件建立在某一个用户的家za目录下?
不行,因为用户不能访问其他用户的目录(su 用户可以,但是需要知道对方的密码)
所以只能在系统的非用户目录下创建(最好让root创建)。为了让多个用户都可以操作这个文件,所以root要将other对文件的权限设置为rwx
普通用户zy想在111_shared创建文件zy.txt,并想让普通用户zkj能读
Zkj此时能读了,但是另一个普通用户mm看见了这个文件,并想把zy.txt删除,它能删除吗?可以的,因为zy.txt所在的目录111_shared对other的权限是rwx。那有什么方式能够阻止mm删除zy建立的文件呢?
为了解决这个问题, Linux引入了 粘滞位 的概念
当111_shared被设置为"粘滞位" (用chmod +t) 后,mm还能不能删掉zy建立的文件?不能
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
- 超级管理员删除
- 该目录的所有者删除
- 该文件的所有者删除
好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️