一、Linux下用户的分类
Linux下有两种用户:超级用户(root)和普通用户。
1、超级用户:几乎可以在Linux系统下做任何的事情,不受权限的控制。
2、普通用户(我们自己新建的用户):在Linux下做有限的事情。
3、超级用户的命令提示符是#,普通用户的命令提示符是$。
命令:su [用户名]
功能:切换用户。
例如:想要从root用户切换到普通用户,则使用 su 普通用户名。 要从普通用户切换到root用户则使用 su/su -,此时系统会提示输入root用户的口令。
二、Linux权限
2.1 什么叫做权限?
简单来说,权限就是说一件事是否允许被你做。
1、权限验证的是你的身份。比如说你用腾讯视频看电影,你的身份是普通用户,但是你想看的电影需要VIP身份才能观看,系统验证你的身份是普通用户,就禁止你看这部电影。如果你是VIP,那么就允许你看这部电影。
2、权限也跟事物的属性(文件的属性:是否可读,是否可写,是否可执行)有关,即事物的属性也能决定这件事是否允许被你做。例如:一个本子,它是你的,那么你可以用它来写东西,这个是验证的是你的身份,本子属于你,所以你能写,但是尽管这个本子是你的,但是你说你要拿这个本子咬两口,把它像面包一样吃掉,这样显然是不对的,因为这个本子本身不具有被吃掉的属性,所以它的属性也决定你是否能够做这件事。
2.2 Linux下的用户身份
Linux系统下用户具有三种身份,分别是拥有者(user),所属组(group),其他人(other)。
那么这三个身份和前面所说的超级用户(root)和普通用户有什么关系呢?简单来说就是root可以扮演拥有者,可以扮演所属组,也可以扮演其他人这三个角色的任意一个,普通用户同样如此,换句话说前面三个是一种广义的身份,而root或者普通用户是具体的一个用户。
2.3 文件类型和访问权限
1、文件的类型:
d:文件夹
-:普通文件(源文件,可执行文件)
s:套接口文件
l:软链接(类似Windows的快捷方式)
p:管道文件(用来进行通信)
c:字符设备文件(例如屏幕,键盘等串口设备)
b:块设备文件(例如硬盘、光驱、磁盘等)
2、基本权限:
(1)、读(read):对于普通文件来说,r代表具有读取文件内容的权限。对于目录来说,r代表具有浏览给目录信息的权限。
(2)、写(write):对于普通文件来说,w代表具有写入(修改,删除)该文件内容的权限;对于目录来说,w代表具有在给目录下创建文件,删除文件,移动文件的权限。
(3)、可执行(execute):对于普通文件来说,x代表具有执行该文件的权限;对于目录来说,x代表具有进入该目录的权限。
(4)、“-”代表不具有该项权限。
2.4 如何修改权限?
方法一:
chmod u/g/o±某某权限 文件名。
比如要给test.txt文件的拥有者加上可执行权限:
指令:chmod u+x test.txt
(u是user拥有者,g是group所属组,o是other其他人)
再比如要给test.txt文件其他人去掉写权限:
指令:chmod o-w test.txt
给test.txt的所有身份的用户都加上写(w)权限:
指令:chmod a+w test.txt
其他的情况也以此类推即可。
方法二:
除了上面这种方法能够修改权限之外还有另外一种方法,通过观察可以知道,无论是读®,写®,还是可执行(x)权限,都是要么就有该权限,要么就没有该权限,没有就用“-”表示,这样的情况在计算机领域我们很容易就能想到二进制序列,要么是1,要么是0,所以另一种修改权限的方法就是以八进制的形式设置权限,因为每一个用户都有三种权限,读写可执行,三个比特位就是八进制,所以毫无疑问三个八进制数字就能准确表述拥有者,所属组,还有其他人的权限。
例如要给test.txt设置所有人都是可读可写,但是不可执行,可读可写那对于拥有者而言第一个比特位是1代表可读,第二个比特位是1代表可写,第三个比特位是0代表不可执行,那就是110,转换成八进制数就是6,因为所属组和其他人也是一样的权限,所以我们应该设置成666.
即指令为:chmod 666 test.txt
下面我们来看看当一个用户做某件事是没有权限会出现什么现象:
我现在是cmj这个用户。
下面有一个问题:假如现在有一个目录文件,我要进去这个目录文件需要拥有什么权限呢?是读权限,是写权限,还是可执行权限呢?
读®权限?
写(w)权限?
可执行权限?
由上述的验证可知,可执行权限才是决定用户能否进入该目录的因素,而不是读权限和写权限。
当用户同时是拥有者和所属组时,拥有者没有读权限,所属组有读权限,那么该用户是否具有读权限?
2.5 起始权限问题
因为有权限掩码umask,所以我们可以按照需求修改umask,从而控制文件的起始权限了。
最终权限=起始权限 & (~umask)
2.6 目录文件的权限+粘滞位
可执行权限: 如果用户没有该目录的可执行权限, 则无法cd到目录中。
可读权限: 如果用户没有该目录的可读权限, 则无法用ls等命令查看目录中的文件内容。
可写权限: 如果用户没有该目录的可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件,移动文件。
普通用户自己的家目录权限是700,即除了拥有者自己,其他用户(root除外)一律不能进入这个目录。
那有时候我们需要进行多用户的文件数据共享该怎么办?这好说,创建一个共享目录,然后不同的用户就可以在该目录下创建自己的文件,可以写入各种数据,与别人共享。想要给别人看的就设置一下其他用户的权限就行了。
但是我们知道,在这个共享目录下能否创建文件,删除文件并不是由文件本身的权限决定的,而是由这个共享目录的权限决定的。
为了避免上述这种“得不到就毁掉”的行为,有人提出的方案一是既然目录的写(w)权限决定他是否能够删除目录下的文件,那么我们把共享目录的写权限去掉不就好了吗?但是你别忘了,你创建文件也是需要写权限的,如果把写权限去掉,那么用户也就无法在这个目录下创建文件了,那么这个共享目录的共享体现在哪里?所以去掉写权限显然是不能够很好地解决这个互删的问题的。后来就出现了粘滞位这个东西。
粘滞位是一种特殊的可执行权限,就是你可以进入该共享目录下创建文件并写入内容,和别人达到共享的目的,但是用户不能删除别人的文件,这个粘滞位就能很好地解决了用户互删文件的问题。
用法:chmod o+t tmp
一般都是给other加上t权限,因为共享目录的拥有者一般都是root。
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由超级用户root或者文件的拥有者可以删除。
2.7 如何更改文件的拥有者或者所属组?
想要更改文件的拥有者和所属组只能是root执行,因为普通用户把文件给别人需要别人的同意,但是root并不受权限的控制,root是超级用户,root说给你就给你,你不想要也要拿着。
修改文件的拥有者:
指令:chown 新拥有者 文件名
修改文件的所属组:
指令:chgrp 新所属组 文件名
三、关于权限的总结
再一次说明:
目录的可执行权限是决定你能否进入该目录的因素。
如果没有可执行权限(x),则无法对目录执行任何命令,甚至无法用cd进入这个目录,千万记得不是拥有可读权限就能进去这个目录的(很容易出错)。
而如果目录具有x权限,但没有r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,所以在该目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。