本文旨在讲解Linux中权限相关的知识,希望读完本文,能使读者对linux中权限有更深一步的认识!
在讲解权限之前,我要先给大家介绍一波Linux中用户有哪些?
1.Linux中的用户
Linux中的用户分为两大类,一类是root用户,一类是普通用户,对于root用户而言,其就是超级管理员,没有权限的限制,基本上所有的指令都可以执行。而对于普通用户而言,其权限就受到了一定的限制,部分的指令是无法执行的,比如要执行yum安装一些软件的时候,我们的普通用户就无法执行!那么这时我们可以进行(sudo)提权的操作,让普通用户可以这些指令,在对用户进行提权的时候,我们需要将普通用户加入到sudoers文件中,才能让我们的用户进行提权操作!
2.Linux权限
在讲解了Linux中的用户之后,我们再来进行讲解一下权限的知识。
在讲解权限的时候,我们就不能将人和某件事分开而谈,因为一旦谈及到权限的话,一定要涉及到某个人以及某个事物。例如教师可以在教师餐厅中用餐,校长在校长办公室办公,而学生则没有权限在教师餐厅中用餐,以及教师不能在校长办公室办公!
在谈及权限的时候,我们发现,我们针对的不是某一个人,而是针对的一种角色,以及对一种事物的权限。在linux中的事物一般都指的是我们要操作的文件!所以谈及到权限的时候,我们需要紧紧关注角色,以及文件的属性两大点!
用户担任的角色:
对于linux中的用户担任的角色有:拥有者,所属组,以及other!
1.拥有者:
拥有者,顾名思义,就是一个文件的拥有者,即这个文件时是谁创建的。
2.所属组:
所属组,指的是一个文件包含于那个组,该组可以有一个用户,也可以有多个用户!
3.other
对于other而言,其很容易理解,只要不是一个组的,或者一个文件的拥有者的就是other!
看到了用户担任的角色之后,可能有许多小伙伴会有许多疑惑,为什么要存在所属组呢?其存在的意义又是什么呢?下面我来简单的给大家分析一下为什么会有所属组的存在!
我举一个简单的例子,例如某家it公司,要让多个小组做同一项目,最终从这些小组中挑选一个最好的然后进行上市,假设存在a,b两个小组,那么此时就出现了一些小问题,如果领导想看a小组的进度如何,想看看其代码进展如何,假设没有所属组的话,对于a组而言,领导就是other,如果想要让领导观察进度,那么就不得不把other的权限放开,那么此时的问题就来了,如果other的权限放开了,那么不仅领导可以看见a组的代码,就连b组也能查看了a组的代码,那么如果此时b组查看并抄袭了a组的代码,那么.....,很显然,如果没有所属组的话,会带来一些不必要的麻烦!
文件的属性:
在Linux中,文件的属性分为'r' 'w' 'x',三个权限,下面我们来看一下ls指令来看一下某个文件的属性!
对于上图,我简单的介绍一下,对于第一个zhj,其代表的拥有者,第二个zhj,其代表的是所属组,那么就会有小伙伴问,既然有了拥有者和所属组,那么为什么没有other呢,其实仔细思考一下就可以想出来,other我们可以进行推导得出,对于不是拥有者以及所属组的那剩下的就是other了!
对面前面的10个字符来言,
第一个字符代表的是文件的类型!对于我们的test.c文件,其开头是一个'-',其代表的就是一个普通文件!
Linux中常见的文件类型
下面对于第一个字符的种类,我简单介绍以下几种,这几种就是Linux中常见的文件类型!
1.‘-’
对于‘-’开头的,其一般代表的都是普通文件,源代码,可执行程序,库等!
2.‘d’
对于‘d’开头的,代表的就是一个目录文件!
下面来一个目录文件的例子:
3.'c'
对于‘c’开头的,代表的是一个字符设备文件!
我们可以使用ll /dev/pts*来看一下字符设备文件!
4.'b'
对于‘b’开头的,其代表的就是块设备文件!
我们使用ll/dev/vda查看块设备文件!
5.'l'
对于‘l’开头的,其代表的就是一种链接文件!
对于链接文件而言,我们可以返回到根目录,然后进行ll即可观察到链接文件!
那么如何创建一个链接文件的,我们可以使用ln -s "加上路径名" "新的文件名"即可完成链接文件的创建!
6.'p'
对于‘p’开头的,其代表的是一种管道文件!
既然讲完了Linux中文件的类型了,那么我们再来提一点特别要注意的点:就是,Linux系统区分文件类型不是按照文件后缀进行区分的,而是和我们一个文件具有的权限有关!即 r w x这三种属性!那么就有人讲了那是不是就可以随便写后缀了,当然可以,但是我们写的代码都是给人看的,所以我们要对文件后缀名有着良好的习惯!
既然讲到了Linux中 文件类型与后缀无关,那么有些小伙伴就会随意其后缀,然后对一个.txt的文档,进行了gcc,就会发现问题!就会提出问题,不是说Linux中文件和后缀没关系么,那么我的.txt文档为什么不能编译呢?
下面就要着重讲一点:Linux中文件类型与后缀无关,只针对的是Linux系统区分文件,与后缀无关,不代表我们的gcc等一些软件不区分后缀呀!
下面再来分析一波,剩下的9个字符代表的意义吧!
我们可以三三进行分组,那么这三组分别代表的是拥有者,所属组,以及other的权限! 从上图中可以看出,我们的拥有者和所属组具有rw权限,而other只有r权限,其中“r”代表的是可读权限,“w”代表的是可写权限,“x”代表的是可执行权限!既然了解了这九个字符的意义,那么我们再来进一步进行扩展一些知识吧!
对于上图,我们发现,一个字符位只对应于两种状态,要么是"rwx"中的一种,要么就是一个"-",所以我们可以将其表示为二进制位,用0表示没有这种权限,1代表的是拥有这个权限!所以上图的权限就可以这样进行表示:“110110100”!,又因为三三为一组,所以我们也可以将其改变成三个8进制的数字,用于表示该文件的权限!对于上述的权限也可以用664进行表示!
修改权限
那么既然介绍了这9个字符的意义之后,我们接下来再来介绍一下修改权限的命令吧!
在Linux中我们可以使用chmod进行对权限的修改,加上u/g/o+“rwx” +文件名,进行对一个文件权限的修改!
可以看出当我们执行命令之后我们的拥有者的x权限也加了上去!
当我们使用a +rwx的时候,我们可以将所有的权限都加上去! 同理的,如果我们不想要某个角色再拥有某些权限的时候,我们进行“-” + “w/r/x ” +文件名即可!
当然使用这种修改权限的方法也行,我们还有另外一种修改权限的方法,就是我们刚才说的,将一个文件的权限用3个八进制位进行表示即可,我们只需进行chmod +数字+文件即可完成对文件权限的修改!例如!
可以看出,当我们输入000时,我们的权限将被全部收回,因为000对应的二进制位九个0,即所有权限都不存在,因为在二进制中,1代表权限的存在!
修改文件的拥有者/所属组
既然我们可以对文件的权限进行修改,那么我们也可以将一个文件的拥有者以及所属组也进行修改!但是我们需要考虑一下这个问题,当我们将一个文件转交给另一个角色的时候,我们能直接将一个文件转交给人家么?答案是否定的,我们肯定不能未经人家同意将一个文件转交给人家,所以我们需要使用sudo提权的命令进行转交文件!
chown
下面来看一下例子!
可以看出,当我们没有进行提权的时候,我们的命令显然被拒绝了,那么我们使用sudo提权之后我们就可以将一个文件转交给要转交的人了!
可以看出,当我们进行sudo提权的时候能顺利的进行转交!
chgrp
既然文件的拥有者可以改变,那么所属组也一定能改变,同理,我们只需要将chown改为chgrp即可!!例:
可以看出,我们顺利的将文件的所属组顺利的进行了修改!
那么当我们想把拥有者和所属组同时进行修改呢?
我们只需要使用chmod +"用户名“ : “用户名” 文件名 即可!
例
此时我们顺利的进行了修改!
3.默认权限
在Linux中,我们每个文件/目录都对应有默认权限!
对于目录文件而言,其默认权限是777,而普通文件默认权限为666!
下面我们来新建一个目录看一下!
这时,有的小伙伴就会问,你不是说目录的默认的权限是777么,为什么这里的权限是775呢?
很简单,因为Linux中存在着权限掩码,正是有着权限掩码的存在,我们的实际权限才会和默认权限存在出入!下面我们可以通过umask查看一下权限掩码!
umask
对于权限掩码的第一位数字我们不需要关注,我们需要关注的就是其后面三位数字,这三位数字与我们的3位八进制位刚好一一对应!
那么我们的实际权限和权限掩码之间存在着什么关系呢?
我来把二者的关系给大家说一下,大家可以自行验证一下!
实际权限=默认权限&(~umask),
其实很好理解,对于权限掩码中存在的数字,我们最终的实际权限是不能存在的!
例如我们的默认权限是111 111 111
而权限掩码为 000 000 010
所以对于权限掩码中为1的,我们的最终权限都不能存在该权限,所以就得出了111111101,即775!
对于我们的默认权限掩码为什么要设置为 002呢?这是因为,一个文件是否能够删除,不取决于该文件,而取决于一个该文件的目录!就是为了防止其他和你在一个目录下的人,删除你的文件,所以给该目录的w权限进行关闭!这就是为什么默认权限掩码为002的原因!
对于一个目录而言,是否能进入一个目录,取决于我们的x权限是否拥有,如果x权限没有,那么就无法进入该目录!
粘滞位
下面再给大家介绍一下粘滞位,假设一个公司要分多组进行开发一个项目,他们存储于一个目录下,对于该目录,其必须用于w权限才能让大家进入目录进行创建写文件,那么如果各组之间又设置对other的权限什么都不开放,而other对此很不满意,于是一气之下将其的文件进行了删除,因为目录的权限w是放开的,所以可以进行删除,那么就会导致很不和谐的问题!那么针对于这种情况,Linux又提出了粘滞位的概念,即我们照常将目录的权限放开,只不过我们此时需要加上一个粘滞位,对于一个文件,如果想要删除他,那么必须是文件的拥有者才有该权限删除该文件!
下面就是粘滞位的表示方式!
这时,我们的文件就受到了保护!
但是在一般情况下,这种情况很少发生,因为一个用户一旦创建,其家目录只对自己的开放,对所属组以及other直接是没有任何权限的,他们根本进都进不来!
至此,关于权限的知识介绍完毕,希望读完本文,能对读者有一定的收获!