[Linux]基本权限
文章目录
0. shell命令以及运行原理
我们使用Xshell连接服务器使用Linux,并用指令对其进行操作是我们呢对Linux操作系统直接进行操作吗?答案是不是的。
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
将使用者的命令翻译给核心(kernel)处理。
同时,将核心的处理结果翻译给使用者
shell是一个程序,可以称之为壳程序,用于用户与操作系统进行交互。用来区别与核,相当于是一个命令解析器,Shell有很多种类各个shell的功能都差不太多,在某些语法的下达下面有些区别,Linux预设就是bash。
**对比windows GUI,**我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的 操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运 行出结果,通过shell解析给用户。
Shell存在的意义:
- 帮助进行命令的传递和返回结果
- 保护操作系统
另外Shell还能在执行命令时,创建子进程来进行执行。
为了帮助理解,讲一个故事:小帅是一个内向的程序员,一生致力于写代码不善于和姑娘打交道,小帅又很喜欢小美,于是小帅只能找一个媒婆去帮其说媒,媒婆找到小美,小美向让媒婆拒绝了小帅,此时小帅就类比用户,小美就类似于操作系统,媒婆就类似于shell,shell软件层在用户和操作系统之间进行着交互。故事还没有结束,小帅被拒绝之后不甘心,花重金让媒婆再去小美那里说媒,媒婆受不了小帅的再三要求,有一次去找小美,这次媒婆去的时候小美正在和别人的父母一起吃饭,已经到了谈彩礼的地步了,媒婆一看形式不妙,自己再去找小美不合适,于是只能再三跟小三说小美不合适,此处媒婆就是在进行保护小美,就像shell在保护操作系统,对于用户的不合理操作,shell不会帮助执行,而是选择保护操作系统,故事的最后,媒婆发现如果老是有小帅这样的客户,这不是砸了自己的招牌吗,于是媒婆招了几个员工,让员工去做这些难处理的事,这样既不会砸了自己的招牌,也能把事办了,这个过程就像shell创建子进程来进行执行,shell如果是媒婆,bash就是王婆,shell是外壳软件的统称,而bash是Linux使用的shell。
1. 权限的概念
权限:(用来限制人的)一件事是否能被某人做。权限 = 人+事物属性。
事物属性包括:
- 事物固有的属性。[事物固有的属性就是事物能做什么,比如猴子会爬树但猴子不会飞]
- 事物向人提供的属性。[事物向人提供的属性就是一件事物允不允许某人做,比如普通员工是不允许管理其他员工的,而领导可以]
2. 用户分类
Linux下用户被分为两种:
- 超级用户(root):可以再linux系统下做任何事情,不受限制。
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。




3. 文件访问者的分类(人)
每个人在不同环境下的扮演的角色是不同的,比如小帅在家中的角色是儿子,在班级中是班长,但是无论是什么身份,小帅还是小帅,Linux中用户就别分成了三种角色:
- 文件拥有者
- 文件所属组
- other(除了文件拥有者和文件所属组用户以外的所有用户)
Linux下划分文件访问者的类型是为了限定不同的人对于文件能够进行的操作。
文件拥有者:创建文件的用户。
文件所属组:创建一个组将需要的用户设置进入组内。(文件所属组的价值就像朋友圈分组,设定一个分组限定组内用户的操作),由于我们是独立使用服务器所以所属组是自己。
ohter:除了文件拥有者和文件所属组用户以外的所有用户。
4. 文件类型和访问权限(事物属性)
在Linux中事物属性就是文件属性,而一个文件可能有的属性就是读、写、执行。
在Linux下输入ls-l( ll ) 指令会显示当前目录下文件的很多信息:

实际上Linux下是不用文件名的后缀区分文件类型而是用文件属性中第一列第一个字符来区分:

- -普通文件,包括文本文件,可执行文件,归档文件等。
- d目录。
- b块设备比如磁盘。
- c字符设备,比如键盘和显示器。
- p管道文件。
- s网络文件。
- l链接文件。
尽管在学习的初期只见过普通文件和目录文件,但是可以看看别的类型的文件:、




既然Linux不以文件后缀名区分文件类型,那应该如何看待文件后缀名呢?文件后缀名的作用只能是给用户看的,让用户了解文件的作用。
Linux下不以文件后缀名区分文件类型,但是我们来看一个场景:

怎么回事?不是说Linux不以文件后缀名区分文件类型吗?为什么将test.c改名为test.txt就无法编译了。关于这个问题,我们必须搞清楚Linux不以文件后缀名区分文件类型是指操作系统不以文件后缀名区分文件类型,但是上图中使用gcc编译,gcc是一个软件,软件自身会区分文件后缀名。在Windows下文件都是区分后缀名的。

了解了文件属性中第一列的字符的含义,再来看后面9个字符的含义。前面提到文件可能有的属性是读、写、可执行,实际上图中的r、w、x分别对应这读、写、可执行属性,-表示操作不被允许,并且每三个字符对应的一种角色:

拿图中cmd.txt举例该文件提供给文件拥有者的操作是可读可写不可以执行,对于文件所属组可读可写不可以执行,对于other只读。
至此再来理解权限的概念:人+事物属性。
人在其中的含义就是角色,事物属性在其中的含义就是文件对于不同角色提供的读写执行操作是否可行。
完整描述权限的过程是文件拥有者(不)可读(不)可写(不)可执行,文件所属组(不)可读(不)可写(不)可执行,other(不)可读(不)可写(不)可执行。
5. 文件访问权限的相关设置方法
chmod 指令(文件拥有者才可以进行操作)
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
- R -> 递归修改目录文件的权限
- 说明:只有文件的拥有者和root才可以改变文件的权限
使用方式① 用户表示符+/-=权限字符
-
+:向权限范围增加权限代号所表示的权限
-
-:向权限范围取消权限代号所表示的权限
-
=:向权限范围赋予权限代号所表示的权限
用户符号:
-
u:拥有者
-
g:拥有者同组用
-
o:其它用户
-
a:所有用户



使用方式②三位8进制数字
将三种角色的分成三组,每组有三个权限,把可读、可写、可执行当作1,不可以当作0,比如rwx为(111)7,—为(000)0,r-x为(101)5。

在文件不提供权限时,即使是文件拥有者也无法操作:

但是超级用户是不受限制的即使others中也没有提供操作权限:

6. 文件角色归属修改
chown 指令(超级用户才可以进行操作)
功能:设置文件的拥有者
格式:chown [用户名] [文件名]
chgrp 指令(超级用户才可以进行操作)
功能:设置文件的所属组
格式:chown [用户名] [文件名]




除了上图中的切换root用户实行修改操作,还可以使用提权操作(使用超级用户的权限进行操作)。
在后续学习了修改sudor的名单再学习:

7. file指令
功能说明:辨识文件类型。
语法:file [选项] 文件或目录…
常用选项:
- -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
- -z 尝试去解读压缩文件的内容。
尽管Linux操作系统不以后缀名区分文件类型,但是file指令能够很详细的显示文件类型。

8. 目录的权限
对于一个普通文件来说,读权限就是能够读取文件内的数据,写权限就是能够将数据写入文件,可执行权限就是能够将文件当作程序执行。对于目录来说读写可执行权限分别代表什么?
我们经常用cd指令进入一个目录,那么进入一个目录靠的是有什么权限呢?、

通过测试发现读写权限都有的情况下,可执行权限没有时,是无法进入目录的,因此进入目录需要的是可执行权限。
接下来再来看在没有读权限时会发生什么事情:

通过测试发现在写和可执行权限都有,读权限没有的情况下,可以进入目录,但是不能查看目录内的文件名和文件属性,但不影响在目录内创建文件,因此读权限能让用户读取目录内文件名和文件属性。
接下来再看在没有写权限时会发生什么:

通过测试发现在读和可执行权限都有,写权限都有的情况下,可以进入目录,可以查看文件名和文件属性,但是不能在文件内创建文件,但是不影响对目录内的文件的权限。
目录权限总结
- 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中。
- 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容。
- 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件。
关于权限还需要探究的是创建文件或目录时默认权限是如何设定的:

将三种角色的三个权限有权限为1没有权限为0,转化成八进制数,创建一个普通文件的默认权限是664,创建一目录的默认权限是775,那么这个664和775是如何得来的?实际上文件和目录都有一个起始权限,普通文件的起始权限是666而目录的起始权限是777,那是怎么变成664和7775的呢?这就得提到umask了:

Linux下输入umask指令显示umask值,默认权限是由起始权限按位与umask按位取反得来的。
得到默认权限的过程:

实际上起始权限按位与umask按位取反的过程是将起始权限去掉umask中出现的权限去除,但不会影响其他权限。
可以修改umask将默认权限改变:

9. 粘滞位
为了更好的理解粘滞位的意义,我们来看一个场景:在使用Linux时,可能不止有一个用户在使用,多个用户为了共享数据,可能创建了一些共享目录,用来保存用户存储的数据。在根目录下创建一个public目录来模拟这个场景:

public目录是由超级用户创建,提供other的权限是rwx,可以作为一个共享目录。共享目录创建成功了,但是如果出现下面的场景该怎么办呢:

zhb用户在自己创建的zhb文件内写入一些数据,qxm用户想读取该文件数据是被允许的,但是qxm用户想写入数据到该文件内是不被允许的,于是qxm用户很生气将zhb用户拥有的zhb文件删除了并且还成功了,这对于zhb用户是不合理的,为了解决这样的问题,就需要使用粘滞位。

上图是作为超级用户给所有用户在public目录增加了粘滞位。
添加了粘滞位后qxm用户不能在删除zhb用户的文件了:

了解了粘滞位的作用后,探究一下为什么qxm用户可以删除zhb用户拥有的文件,别的用户可不可以删除,能不能删除别的用户的文件取决于什么?

尝试去目录的除粘滞位然后将目录的写权限也去除,发现qxm用户不能删除zhb用户的文件了,不仅如此连自己的文件也无法删除,实际上是因为用户能否删除目录下的文件取决于用户是否有目录的写权限,只要有目录的写权限就能删除目录下的文件,但是如果为了避免用户乱删别的用户的文件去除共享文件所有其他用户的写权限,这样会使得用户无法写入文件,因此需要粘滞位。
本文介绍了Linux的基本权限概念,包括shell的作用、用户分类、文件访问者类型、文件权限的设置(如chmod、chown、chgrp命令),以及目录权限和粘滞位在多用户环境中的重要性。通过权限设置,确保了系统安全和用户间协作的有序性。
378

被折叠的 条评论
为什么被折叠?



