目录
一、Linux用户分类
1.用户分类
2.用户切换
二、Linux权限管理
1.什么是权限:一件事是否允许你做
2.文件类型和访问权限
(1)文件的类型
(2)文件权限属性
(3)文件属性的修改
(4)几个问题
(5)粘滞位
(6) 再看文件属性
3.root不受权限限制
Linux下有两类用户:超级用户和普通用户。
超级用户(root):可以在Linux下做任何事情,不受权限束缚。
普通用户:可以在Linux下做有限的事,受权限束缚。我们自己新建的用户,adduser
注:超级用户的命令提示符是"#",普通用户提示符是“$”
既然有超级用户和普通用户,那这两个用户如何切换呢?需要用到下面的命令。
命令1:su
功能:切换用户
例如“:普通用户切换root用户,只需要输入命令su就可以,然后输入root密码,就可以切换成root
root用户切换普通用户只需要输入命令su +用户名即可,不需要输入密码,因为是超级用户
命令2:exit/ctrl+d
功能:切换用户
例如:如果我们刚刚从root切换成普通用户,我们只需要执行一下这个命令就可以直接切换回root,反之亦然
(1)权限和人的身份相关
权限就是说我们能不能做一件事,比如说我作为一名大学生,我能不能随意进入我们校长的办公室呢?是不能的,因为我不具有这个权限。那校长能进入校长办公室是因为它这个人还是因为它是校长呢?因为它是校长它才能进去,因此权限是和人的身份有关的。
(2)权限和事物属性相关
我要把腾讯视频当面包吃了可以吗?不可以呀,因为腾讯视频是看视频的,你怎么能吃它呢?它不具有吃的属性呀,就好比我要去足球场上晚自习,可以吗?当然不可以,因为它不具备这个属性。比如果我在磁盘文件上只能写文件或者读文件,我不可能说我要把磁盘文件当面包一样咬一口。所以我们可以发现一个特点,权限也和事物的属性有关。
也就是说权限是分两方面的,一方面是和人有关的,第二方面它一定是和事物属性有关的,我们也不扯其它的了,接下来谈谈文件的权限。
在上面的命令中,创建了两个文件,我们现在来分析一下dir1和test.c前面的一大堆都是什么意思。
第一个字母代表的是文件的类型。
d:目录文件
-:普通文件:文本、可执行程序、库基本都属于普通文件
b:块设备文件:磁盘
c:字符设备文件:键盘、显示器文件等
p:管道文件:用来进行通信
在Linux系统中,文件后缀是没有什么意义的(当然,不代表不用)。
注意:Linux系统中的其它软件是需要后缀的。
现在我们知道第一个字母的含义了,那么我们接下来看看后面9个字符是什么含义
r:可读
w:可写
x:可执行
-:对应的权限位置没有权限
说明:
1.每个位置的权限都是固定的rwx,每个位置的权限要么有要么没有。
比如上述test.c这个文件。它对于拥有者和所属组拥有读写权限,其他人只有读权限。
2.有的同学可能会好奇,这里为什么会出现三组读写执行呢?
第一组代表的是文件拥有者所具有的权限。
第二组代表的是所属组所具有的权限。
第三组代表的是其它人所具有的权限。
3.那么上述角色和用户分类有什么关系呢?它们关系如下:
文件的权限只能由文件的拥有者或者是root修改。
那么如何修改呢?我们需要用到的命令:chmod
1)第一种修改方式:
在上述test.c文件中:
a.我想让拥有者(user)具备可执行的程序我们需要输入命令:chmod u+x test.c
b.如果我想让所属组(group)不具备任何权限则输入:chmod g-rwx test.c
c.如果我想让其它人(other)拥有所有权限则输入:chmod o+rwx test.c
d.如果我想给拥有者去掉可执行权限,所属组加上所有权限,其它人去掉所有权限则输入: chmod:u-x,g+rwx,o-rwx test.c
e.如果我想让所有人去掉写权限则输入:chmod a-w dir1
rwx代表的就是对应的权限,u表示的就是user拥有者,g表示的就是group所属组,o表示的就是other其它人。多个用户时用逗号隔开,非常见名知意。
2)第二种修改方式
我们还可以用二进制的方式来修改,什么意思呢?我们知道,要么是有这个权限要么是没有这个权限,因此我们用1来表示有,0表示没有。
因此,如果我们想要给所有人去掉所有权限只需要:chmod 000 test.c
如果我们想要给所有人加上所有权限只需要:chmod 777 test.c
如果我们想要让其它人去掉写和可执行只需要:chmod 774 test.c
3)文件拥有者/所属组的修改
修改拥有者:chown+用户名+文件名
如果我们想要修改文件的拥有者我们如何修改呢?比如说现在share文件的拥有者是mrl,我想要把拥有者变成xs,我怎么改变呢?可以使用命令:chown xs share
哎,为什么给不了呢?文件的拥有者是mrl呀,为啥不行呢?我们把一个东西给别人要不要征求一下别的同意呢?是要的。还有一种不管你要不要我强行要给你,我建议用后者,也就是说我们可以直接用root操作。此时文件的拥有者就变成了xs
此时我们在用mrl用户修改文件权限,我们发现此时它就不让我们改了,因为我们不是拥有者了
修改所属组:chgrp+用户名+文件名
我们想要把所属组也给给xs用户,同样的也要用root用户操作,因为你把所属组给别人,也要征得别人的同意。
一次性修改拥有者所属组: chown 用户名:用户名+文件名
有时候我一次就想把拥有者和所属组都改了可以吗?当然可以
问题1:我们可以看到在下面的文件test.c中,拥有者只有读的权限,所属组有读和写的权限,此时拥有者和所属组是同一个人,那么请问各位,现在拥有者能不能往test.c里面写内容?
答案是不可以,为什么呢?因为系统在权限认证的时候只能选择一个身份,你现在是谁?是mrl,mrl是拥有者吗?是的,是就直接去看拥有者权限,后面的权限看都不看。
问题2:为什么我们创建文件之后它的默认文件是下面的样子?
为什么普通文件的默认权限是:664
为什么目录文件的默认权限是:775
想要解决这个问题我们先要知道一个知识:在Linux当中默认给普通文件的起始权限是666,默认 给目录文件的起始权限是777
但是那为什么我们看到的是664和775呢?那是因为有一个权限掩码(umask)的东西,Linux下默认权限掩码是0002,第一个0先别管,我们只用关心后面三位,后面三位其实就是8进制。
a.权限掩码:
凡是在umask中出现的权限,不会在最终的文件中出现。它就像一个漏斗一样,经过某种运算之后,得出来最终的权限作为文件的权限。
那么它是怎么运算的呢?我们先看普通文件,普通文件666转成二进制是110110110,权限掩码002转成二进制是000000010。它的运算方式是:最终权限=起始权限&(~umask)
b.修改umaks
是不是凡是在umask中出现的权限,不会在最终的文件中出现呢?事实证明是的,如果我想让我们默认创建的文件只具有写的权限那应该怎么做呢?只需要输入命令:umask 555 即可
问题3:
对于普通文件我们知道读写可执行是什么意思?可是读写可执行对于目录文件来说意味着什么呢.
a.读权限
我们可以看到在下面dir1目录中,我去掉了读的权限,我可以进去吗?可以,我可以查看目录下的文件吗?不可以,我可以创建文件吗?可以。因此我们可以得出一个结论:读权限影响是否可以查看目录下的文件。
b.写权限
我们可以看到,我们可以进去吗?可以,我们可以读吗?不可以,不可以很正常,因为我们把读权限关掉了 ,我们可以创建文件吗?不可以,并且我们也不能进行文件删除。因此我们得出一个结论:读权限影响是否可以创建文件删除和更改。
c.可执行
我们可以看到,去掉可执行后,我们连进都进不去了,因此我们可以得出一个结论:可执行影响是否可以进入目录。
最后我们做一个总结:
我下面展示出了家目录里面的所有用户,我们在新建一个用户之后,家目录里就会自动生成一个目录文件,并且它的拥有者和所属组都是它自己,并且我们仔细看不难看出,对于所属组和其它人什么权限都没有,就意味这别人想要看到或者访问到你目录里面的内容是不可能的。比如下面我想进入xs目录里,可能吗?根本不可能,因为人家根本不让你进。当然,超级用户除外。
那么接下来就有一个问题,如果多个用户要进行文件数据共享,那应该怎么办呢?我们肯定是不能在家目录里建文件的,因为上述的原因。所以我们只能在根目录下建文件(cd /)。比如我在根目录下建立一个文件shared,为了访问,我们把权限改成777。shared的拥有者和所属组是root
好,接下来如果mrl用户在shared里面创建了一个test文件,然后往里面输入了点信息。那么xs用户可以看到吗?是可以的,因为它作为 其它人具有读的权限。test文件的拥有者和所属组是mrl
哪有一天我不想让别看这个文件了,我把权限改成700,好了,xs用户一看,哎,我怎么看不了了,这个小子不让我看了是吧?好那你也别看了,xs用户把文件删了。那问题来了,在共享的文件下,你不让我读不让我写是吧,那我把你删了,各位觉得合理吗?
问题来了,为什么xs能把文件删除呢?因为一个文件能否被删由文件所处的目录属性有关系,因为shared目录对于其它人有w(写)的权限,那我们把w权限去掉不就行了吗?的确可以,现在我们删不了了,但是我们如果要创建更多的文件共享呢?那也创建不了了,那共享的属性体现在哪里呢?我们为了防止文件被删,因此失去了共享的属性,那这样做的意义在哪里呢?所以这样做是不行的。
那么为了保证共享并且防止互删的情况我们该怎么办呢?我们需要引入一个新的权限位,叫粘滞位。我们对其它人加上粘滞位即可(chmod o+t),此时我们可以看到其它人的可执行权限权限变成了个小t,它其实就是一种特殊的可执行权限,就是其它人可建他的文件,你可以建你的文件,但是不能互删。
好,此时mrl用户创建了一个文件,里面输入了hellow,少年,xs用户一看,你又创建了一个文件,我可以看一下,挺好。
然后有一天mrl用户又把其它人所以权限去掉了,这时候xs一看,哎怎么又看不了了?说好的你写我看呢?说好的爱情呢?你不让我看是吧,好,我要开始疯狂的互删。询问我是否要删除,yes,哎怎么删不了了?
这就叫做粘滞位。
注意:粘滞位一般是给共享目录设置的,大家可以在目录用进行各自文件的增删改查,但是一般而言,如果设置了粘滞位,只允许文件拥有者和root可以删除,其它人不允许,t是一种特殊的x权限
至于21那一列先别管。有的同学可能有疑问other呢?因为没有必要,不是所属组和拥有者就是other。
我们说过root用户是不受权限限制的,具体体现在哪里呢?比如说下面的share文件,我们把它的所有权限都去掉,此时mrl作为拥有者什么都做不了。
但是对于root来说,听说你不让我看?听说你不让我写?不好意思,我是root用户,对我没用,没办法因为人家是root。