加入收藏 | 设为首页 | 会员中心 | 我要投稿 好传媒网 (https://www.haochuanmei.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

【Linux学习】权限

发布时间:2022-11-02 15:01:30 所属栏目:Linux 来源:未知
导读: 专栏:《Linux学习》
格言:你只管努力,剩下的交给时间!

Linux权限
?♂?Linxu权限的概念
首先我们要知道权限是什么?拿生活中常见的例子来说明,比如腾讯视频的VIP,有很多的电视剧或者

专栏:《Linux学习》

格言:你只管努力,剩下的交给时间!

图

Linux权限

?♂?Linxu权限的概念

首先我们要知道权限是什么?拿生活中常见的例子来说明,比如腾讯视频的VIP,有很多的电视剧或者电影,只有VIP用户才能观看,而非VIP用户是无法观看的。

换言之,对于那些需要VIP才能看的电视剧和电影,VIP用户就有观看它的权力,而非VIP用户就没有。

所以我们说,权限就是限制某些人去做某些事情。

root用户就相当于是VIP用户,只是root用户在Linux中的权限更大,可以称为上帝,因为什么都可以干。普通用户就相当于是非VIP用户,它在Linux中同样受到很多限制。

图

这是本喵Linux系统下的root用户输入命令的界面,命令行提示符是‘#’。

图

这是普通用户的输入命令界面,该用户名为‘wxf’,命令行提示符是‘$’。

上面我们说到,权限是在限制某些人做某些事情,在Linux中,限制的人就是普通用户和root用户,而做的事情呢一般就是对文件进行操作,操作文件操作的是文件的属性。

所以说,在Linu下,权限=用户+文件属性

在Linux中,root用户和普通用户之前是可以随意切换的,此时需要用到指令su。

图

上图中,输入指令su后,再输入root用户的密码,此时就从普通用户wxf切换到了root用户。

图

上图中,输入指令su wxf后,不用输入密码,此时就从root用户切换到了普通用户wxf,从root用户可以切换到任意一个普通用户,而且不需要输入普通用户的密码,从这里也可以看出,root用户的权限是多么的大。

使用指令su会从普通用户切换到root用户,但是如果我就是不像切换用户,但是像做root用户才有权利做的事情呢?

此时可以用sudo命令来进行短暂的提权,就是给普通用户短暂的赋予root用户的权力。

图

如上图中,当进行一个普通用户没有权限的操作时,可以在这条指令的前面加上sudo,此时就会给普通用户短暂的提权,赋予他root用户有的权力,从而成功执行这条语句。在执行这条指令的时候,需要输入普通用的密码。

你是不是觉得,如果可以进行短暂提权的话,那么普通用户岂不是也可以像root用户那样为所欲为了?只要在没有权限的时候提权就行了啊。

是这样的,但是有一个前提,就是这个普通用户必须在白名单里,因为他不会进行非法的操作,所以才会把他加入白名单,也就是系统是因为他不会非常操作才信任的他。

将用户加到白名单中,需要使用到VIM,怎么加入等后面讲解VIM的时候再讲解。

?♂?Linxu权限管理

我们知道权限就是限制某些人做某些事情,事实上是限制的这个人吗?比如,你叫张三,是某某大学的学生,你之所以能够进入该大学上课,学习,生活,是因为你叫张三吗?并不是,是因为你的角色,你的角色是这个学校的学生。

当然,人和角色是共存的,只有先有了这个人才会有他所扮演的角色。

同样的,Linux中给普通用户赋予了三个角色,分别是:

这其中,所有者和其他人都很容易理解,但是所属组怎么理解呢?

比如有俩个团队,一个是A,另一个是B,在这俩个团队中都有很多的人,其中张三是团队A的,李四是团队B的,这俩个团队在竞争开发一个项目,先开发出的团队加薪留下。这个团队的拥有者,也就是领导,为了方便安排任务,需要随时能够有权限看到组内成员写的代码,包括组内成员也可以互相参考,此时张三就需要将它的代码授权,但是不能让团队B看到,所以就给他所在的组授权,也就是所属组。

弄清楚Linux下的用户以后,权限还涉及到另一个方面,就是文件的属性。

文件属性有三个:

所以说,Linux下的权限也可以理解为,用户所扮演的角色是否有对文件的三个属性进行操作的权力。

图

创建俩个文件,一个是目录file,另一个是普通文件test.c。

我们知道,在Windows下,是通过文件的后缀,就像上面test文件的后缀.c来区分文件的类型的,但是在Linux下并不是这样,文件后面可以加任意的后缀,因为Linux系统对文件类型的判定并不是根据它的后缀,后缀只是为了让用户方便区分。

那Linux系统是怎么区分文件类型的呢?我们看到,Linux下的每文件在文件名之前都会有很长的一段字符,这里面就包含着文件的类型。

文件类型

图

上图中是命令行指令之前那些字符所代表的意义。下面本喵来进行解释。

图

刚刚创建的俩个文件,在使用ll指令查看他们的文件属性时,文件名的前面会有很长的字符串,最前面的一个字符,表示的是文件类型,如图中的红色框。

其中,文件夹和普通文件是我们最常见的文件类型,对应着上图中,file那一行的第一个字符的是d,表示file是一个文件夹,test.c那一行的第一个字符是‘-’,表示test.c是一个普通文件。

再比如:

图

上图中的tty文件,这一行的第一个字符就是c,红色框所示,表示这是一个字符设备文件。

这些文件类型在后面本喵都会讲解到,这里我们只需要知道,文件夹和普通文件的第一个字符是什么就可以。

file指令

面对一个文件,我们也可以使用file指令来直接查看它的文件类型:

图

可以看到,使用file指令后,系统就会告诉我们这是一个什么文件,上图中,dircetory表示这是一个目录,empty表示这是一个普通文件。

访问权限

图

文件名前面的字符不仅能表示文件类型,还能表示它的访问权限。上图中的绿色框一共框住了10个字符,除了第一个字符还剩下9个字符,这9个字符就是用来表示访问权限的。

为什么剩下的是9个呢?上面我们说过,每个用户都有三个角色,所有者(owner),所属组(grouper),其他(other),所以这9个字符,给每个角色分3个,正好分配完。

图

如上图中,最前面的3个字符是分配给owner的,中间的3个是分配给grouper的,后面的3个是分配给other的。

每个角色的三个字符所代表的意思都是一样的,表示着不同角色下所拥有的权限。这三个字符表示的意思是什么呢?

我们知道,文件的属性有三种,r,w,x,所以这里的三个字符表示的就是不同角色下对文件进行读,写,执行的权限。

图

图

以上图中的俩个例子来说明:

这样一来,文件的类型和访问权限我们就都描述清楚了,描述一个文件的权限时,必须从用户的角色以及文件的属性俩个角度出发。

现在文件所在那一行的前10个字符我们已经知道是什么意思了,那么剩下的是什么呢?

图

此时,一个文件名前面的所有字符表示的意思我们就都清楚了,可以看到,这些字符是在描述这个文件的访问权限和属性。

?♂?Linxu权限操作

在知道了权限是什么以后,我们就可以使用权限了,也就是对权限进行操作,在Linux下我们通过指令来设置文件的访问权限。

chmod指令

chmod命令权限值的格式:

用户符号+/-=权限字符 用户符号意义

u

拥有者

g

拥有者所属组

o

其它用户

a

所有用户

上表中是用户符号的。

符号意义

+

向权限范围增加权限代号所表示的权限

-

向权限范围取消权限代号所表示的权限

=

向权限范围赋予权限代号所表示的权限

上表是设置权限是+,-,=的意义

权限字符意义

r

只读

w

只写

x

只执行

wrx

读写可执行

下面本喵就给大家演示一下如何使用:

图

如果还是要进行读会发生什么呢?

图

此时对这俩个文件进行读操作时就失败了,权限被拒绝。

不仅可以删除一个权限,还可以删除多个权限:

图

此时就无法对这俩个文件进行写和执行操作了。

还可以同时将所有者,所属组,其他人的全部访问权限都取消:

图

当然我们也可以让三个角色对这俩个文件都能进行读,写,执行操作:

图

这些权限的设置都是针对普通用户的,对于root用户是限制不住的。

图

上面例子中又一次体现出了root用户是可以在Linux中为所欲为的。

三位8进制数字

在前面本喵讲过,普通用户的每个角色对一个文件的访问权限都有3个字符,修改权限时,除了使用上诉方法外,还可以将将这3个字符写成8进制数,一个8进制数表示一个角色的访问权限,如:

图

上图中,每个角色下的三个字符中:

只读被允许,也就是r,该位写1,不允许时,也就是‘-’,该位写0。按照这个逻辑将三个字符写成一个8进制数。

我们也可以通过这种方式修改文件的权限,如:

图

这里就是使用的3个八进制数来修改文件权限的。

再尝试一个,现在将文件对三个角色的写访问权限都开放:

图

因为指令使用的3个八进制数是444,写成二进制后是100 100 100,代表着的权限是r-- r-- r–,所以就全部修改位仅读。

修改权限的操作只有root用户和文件的所有者才能修改,其他普通用户是无法修改权限的。

chown指令

图

我们之前所有的例子中,文件的拥有者都是用户wxf,那么能不能修改文件的拥有者呢?答案是可以的,这就需要用到指令chown来修改文件的拥有者。

图

当前本喵使用的机器,存在着多个用户,上面的演示都是用的普通用户wxf。

图

这是因为,修改文件的拥有者只能由root用户来做,普通用户是没有权限的。

图

使用root用户执行红色框中的指令后,俩个文件的拥有者都从普通用户root变成了普通用户yx,如上图中的绿色框。

此时这俩个文件的访问权限就只能由普通用户yx来修改,或者是root用户。

图

如上图,普通用户wxf想要修改文件的访问权限是不被允许的,因为此时文件的拥有者是普通用户yx,而用户wxf是文件的所属组,只能操作,不能修改权限。

chgrp指令

图

这俩个文件的所属组都是用户wxf,和拥有者一样,所属组也是可以改变的,这需要用到指令chgrp。

图

切记,改变所属组和改变拥有者一样,必须使用root用户,因为只有root用户才有这么大的权限。

此时,原本属于普通用户wxf的俩个文件就完全属于普通用户yx了,而且是没有商量的余地,root用户直接改变他们的所属关系,又一次证明了root用户的为所欲为。

文件的拥有者,所属组都有改变的指令,那么有没有指令来改变文件的其他人呢?答案是没有的,因为改变了文件的拥有者和所属组,其他人的关系也就改变了,就像上面例子中,将文本拥有者和所属组都是我普通用户wxf的文件改成拥有者和所属组都是普通用户yx,那么此时用户wxf就成了other了。

umask指令

一个文件在被创建的时候会有默认的访问权限,也就是那个9个字符,那么默认的访问权限是什么呢?为什么是这个呢?

图

这里用普通用户创建了一个目录dir和一个普通文件txt.c

这是为什么呢?

那为什么现在我们看到的权限分别是775和664呢?

这是因为存在权限掩码,也就是umask。

图

仅输入umask我们就能看到umak的值,如上方图中,此时的umask的值是0002,

在创建文件的时候,文件的权限 = 文件的起始权限 - 权限掩码(umask).

所以,目录文件的起始权限777去掉权限掩码,也就相当于777-002=005,普通文件的起始权限666去掉权限掩码,也就相当于666-002=664.

此时我们就清楚为什么文件在创建后它的起始权限为什么是那个样子了。

准确的来讲,文件创建后的权限并不是等于文件的起始权限减去默认掩码,比如:

图

在创建文件的时候,文件的权限 = 文件的起始权限 & (~(权限掩码) )。

也就是,文件的权限等于起始权限和权限掩码按位取反后再按位与。

再看上面的例子,

我们可以这样认为,权限掩码中出现的权限,都要在起始权限中去掉,并不是减。上面例子中,权限掩码中出现的权限是x,由于起始权限中就没有x,所以不需要去掉,所以文件最后的权限就是起始权限。

?♂?Linux的shell

在我们使用的Linux中有一个命令行解释器,这个东西就是本喵在输入各种指令的那个界面,具体表现为我们可以看到的命令行提示符,以及可以输入指令并且执行。

而命令行解释器也被叫做shell,也就是外壳程序。

图

可以看到,shell就是包裹在Linux内核外面的一个壳子。

那么shell到底起什么作用呢?

shell是人和Linux内核交流的一个中介:

如

如上图,我们输入一个错误的指令,然后系统返回一个指令没有找到,这就是shell做出的回应,包括我们写的指令也是相当于直接写到shell上。

所以说,shell的存在的意义不仅让我们和Linux内核的交流更加方便,而且对Linux也起一定的保护作用。

Windows系统的操作界面也是一个shell,只是将它图形化了,击桌面上的各种图标就相当于在Linux上输入命令行,然后将点击的信息经过处理后交给Windows内核去处理。

shell是一种统称,所有的系统都会有shell,只是shell的具体程序不一样,像Windows的shell就是图形化的,而大多数Linux的shell的程序都是使用的bash,这是shell程序的具体名字。

以上就是我们第一次对shell进行的感性认识linux权限,再后面还会对shell有更深一步的认识。

权限存在的意义:

结合我们前面讲的权限问题,为什么要存在权限,它的作用是什么?

所以我们说,权限的存在是便于我们的系统进行安全管理。

权限也必须借助shell才能够体现出来。

?♂?目录的权限

在Windows上,我们点击一个文件夹进入的时候,这个操作对应着文件的什么属性?是读还是写亦或者是执行?

下面我们来看看Linux上使用指令cd进入一个目录时,这个操作对应着目录的什么属性?

图

图

图

图

没想到吧,进入文件操作的是文件的执行属性而不是读属性。

?♂?粘滞位

在讲解粘滞位之前,本喵必须先来铺垫一些知识。

在Linux操作系统中,有很多的文件,有句话叫Linux下,一切皆文件。

本喵前面一直都在讲文件的权限,我们知道,文件或者目录只有特定的人才能进行特定的操作,但是有没有这样一个文件?这个文件中,一个Linux系统中的所有用户都可以对这个文件进行操作?答案是有的。

在Linux系统中,root用户创建了一tmp文件,在这个文件中,该系统中的所有用户都可以进行操作,也可以进行相互的交流。

图

在Linux的根目录下存在一个tmp文件,如上图中的红色框,这个文件就是一个公共文件,所有用户都可以在这个文件中进行操作。

这个文件的拥有者和所属组都是root,而且对拥有者和所属者的操作权限是满的,毕竟是root用户嘛,可以理解。但是对其他人的权限就是rwt了,这里的rw我们知道是读权限和写权限,但是t是什么呢?t其实就是粘滞位。

图

现在本喵在根目录下创建一个公共文件,如上图中的红色框。

图片描述

将文件的权限全部打开,如上图中的红色框。

图

以普通用户wxf的身份在本喵创建的公共文件中创建三个文件,如上图中的绿色框。

图

再以普通用户zbj的身份在这个公共目录中创建三个文件,如上图中的绿色框。

图

在公共目的中的文件,因为普通文件wxf1.txt对其他人的权限是允许读写的,所以在上图中,用户zbj可以查看文件wxf1.txt中的内容,结果如绿色框中所示。

图

此时用户wxf觉得,既然zbj可以看我的文件,那么我就可以和他交流一下,就想向zbj的文件zbj1.txt中写一些内容,结果shell反馈操作被拒绝,也就是说wxf没有权限向zbj1.txt中写内容。

图

此时用户wxf有点不爽,居然不让我写东西,那我给你删了,于是就将属于用户zbj的文件zbj1.txt删除了,如上图。

图

当用户zbj发现自己的文件本删了,气不过,就把用户wxf的文件都给他删了,如上图中的绿色框。

此时,恶心互删事件就发生了。

但是此时有个疑问,用户可以对自己的文件设置权限,不让其他人进行操作,但是其他人可以删除我的文件,这个怎么理解?

前面本喵讲过,进入目录的操作是属于操作属性的,同时,删除也是目录的操作属性。

为了避免用户直接在公共目录中互删文件,所以对这个公共文件加一个粘滞位。

图

使用红色框中的语句给共有文件加一个粘滞位,此时共有文件对其他人的访问权限就有了一个粘滞位,如上图中的绿色小框。

为什么粘滞位要加到其他人权限上呢?因为这个共有文件的拥有者和所属组是root用户,其他全部普通用户都是其他人,限制的就是普通用户之间的互相删除。

图

当用户wxf发现自己的文件都被删除了,就要去删除用户zbj的文件,但是发现此时删除不了了,因为这个公共目录加上了粘滞位。

注意:

粘滞位是在多个用户共同使用一个目录时,防止用户之间互删文件才使用的。当一个目录被设置位粘滞位时,则该目录下的文件只能由root用户,目录的拥有者,文件的拥有者删除。 ?♂?总结

权限是非常重要的,只有搞明白了权限,才能进行正确的访问和操作,只有设置对了权限,才能保证文件的安全性和可用性。

(编辑:好传媒网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!