目录
一:用户权限:
★su命令
★sudo命令
二:文件权限
★文件的类型+权限
★文件夹的权限的使用
▲文件夹的可读权限:
▲文件夹的可写权限:
▲文件夹的可执行权限:
★权限的修改操作
▲chmod命令
★对于文件的用户分组的修改
▲chown命令
▲chgrp命令
★权限掩码以及umask指令
★粘滞位的使用场景及使用方法
在Linux当中我们经常会遇到命令执行不允许的情况,通常会产生如下的报错:
我们想要读取一个文件,但是却无法执行。会显示Permission denied。这就是因为权限所造成的影响。权限分为两大类:每个用户所具有的权限,以及事物所具有的权限(多指文件的权限)。只要弄清了这两部分我们以上的现象就会了然于胸。
一:用户权限:
当我们在使用Linux的时候经常会出现一种情况,权限不允许。如下:
无论是上面的无法删除文件还是下面的无法指定一定的操作都是权限不允许造成的。而下面的无法执行相应的操作就是我们用户权限不足造成的。
根据我们的生活经验都可以知道:一个集体要想发扬光大一定要有一个领导者,这个领导者有一定的权力,可以做到有的人无法做到的事情。比如说饭店的厨房里经常会提示非工作人员禁止入内。这就是一种权限的体现。(只有工作人员才允许进入)
而在Linux当中也是这样,为了操作系统以及其他用户的安全,系统会对于用户选择性的否决一些要求。因此就有了权限不允许的情况。
用户的身份可以分为两大类:
1.普通用户
2.超级管理员用户(root)
其中普通用户就是我们使用adduser指定在root用户当中添加的新的用户,而超级管理员用户就是那个权限超级大的领导者。root用户的权限很大,几乎可以做到所有普通用户无法执行的命令。
我们可以通过特定的指令使得这两种用户可以任意切换身份以达到我们想要的效果。
★su命令
因为正常情况下的普通用户权限很低,所以我们想要执行一些命令的时候需要切换到root用户的状态下执行。这个时候就用到了 su 命令。
我们在命令行输入了su命令之后会让我们输入root用户的密码,输入正确之后就成功切换到了我们的root用户了。当我们使用完root用户之后我们可以通过exit指令退出root用户,或者通过ctrl+D快捷键快速退出root用户返回之前的普通用户。
★sudo命令
当然我们还可以给我们的普通用户提升权限,以达到root用户的执行效果,这个时候就需要使用到了sudo命令。但是在执行sudo指令之前需要将用户信息配置进入我们新人的用户文件当中,如果没有配置就会产生我们这张图片的报错。
对于相关文件的配置我们将会在vim章节详细的进行讲解。
二:文件权限
上面我们说到了由于权限不足产生的报错分为两种:
1.用户权限不足无法执行指定命令而产生的报错
2.文件权限不允许无法执行相应的操作而产生的报错
在介绍完用户权限之后我们再来介绍一下由于文件权限。
我们先通过一张图片来大致认识一下文件的相关信息:
通过指令显示文件详细的相关信息的时候我们会发现未知的内容大致分为以上三部分。其中最后一部分容易理解:不就是文件创建的时间吗?那么前面的部分呢?我们一一进行讲解。
★文件的类型+权限
第一部分一共有10个奇奇怪怪的字符。其中第一个字符表示文件的类型。就像是我们之前介绍过的 - 表示的是一个文件,d表示一个文件夹。文件还分为很多种,如:
d:文件夹 -:普通文件 l:软链接(类似Windows的快捷方式) b:块设备文件(例如硬盘、光驱等) p:管道文件 c:字符设备文件(例如屏幕等串口设备) s:套接口文件
我们在本次博客需要详细进行讲解的就是文件夹和文件相关的权限。
知道了第一个字符表示的含义之后我们再来学习后面九个字符所表示的特定的含义。
根据生活尝试我们可以知道一个文件通常具有可读和可写的属性。具有可读属性的文件我们可以读取文件的内容,具有可写属性的文件我们可以向其中写入指定的内容。
我们上面出现的后面的九个字符每三个分为一组,其中的 r 和 w 就表示的是文件是否具备可读和可写的属性。- 表示的是不具备当前属性。
同样是我们之前所提到过的,在Linux当中一切事物皆文件,还记得我们之前使用gcc编写代码的时候系统会自动生成一个可执行程序吗?他其实也是一个文件。当我们的文件具有可执行的属性的时候就会有第三个字符 x 用来表是我们的文件可以作为一个可执行程序进行运行。效果如下:
我们这三种权限就是文件本身所具有的权限。这三个权限可以同时存在。
前面我们说到过后面九个字符需要分为三组,这又是什么原因呢?
其实这样的分组就和我们后面的第二大类相关了。
同样的权限分为的三部分其实是对应后面的用户分类的三部分的。对于一个文件,我们经常会有一些想要保密的东西在里面,这个时候我们可以使用权限分类。第一类表示文件的创建者,一般权限都很高,可以执行对文件的很多操作。第二类表示文件的所属组,通常情况下用于我们想要赋予特殊权限的一类用户。举一个简单的例子:当你工作的时候一定会有小组工作,每一个小组的合作都是可以互相看到的,这样可以帮助我们更好的完成工作。但是我们在工作的时候又会有竞争对手,我们不想让我们的创意被竞争对手抄袭所以就不想让他们看到。因此我们就有了所属组和其他用户。
其中所属组代表的就是可以合作的人员,其他用户代表的就是我们的竞争对手。我们可以通过对这两者可读可写操作权限的修改达到我们想要的目的。
★文件夹的权限的使用
文件夹的权限其实大致是和我们文件的权限是相同的都是分为可读,可写,以及可执行,这三部分。但是又会有人感到很好奇:可读可写容易理解,但是文件夹的可执行是什么东西呢?以及当我们的文件夹不具有可读和可写以及可执行会带来什么效果呢?
▲文件夹的可读权限:
文件夹的可读权限其实很容易理解,我们文件夹当中可以存放各种各样的内容。比如说一个新的文件夹以及文件等等。可读权限就是让我们可以读取这个文件夹当中到底存在哪些内容。如果没有可读权限,那么我们进入一个文件夹就无法使用 ls 命令查看其中的文件有哪些了。效果如下:
如上面的场景所展示的那样:当文件不具备可读权限的时候,我们可以通过cd进入文件夹当中,但是不能在文件夹当中使用 ls 命令查看都有哪些文件。
▲文件夹的可写权限:
顾名思义,当一个文件夹不具备可写权限的时候,我们不可以在其中创建新的文件以及新的文件夹,也不可以在其中删除任意的文件。如下:
在该文件夹当中无论是创建还是删除文件或者文件夹的操作都会被驳回,产生Permission denied的提示。
▲文件夹的可执行权限:
文件夹的可执行权限看似让人很疑惑,但是其实很好理解。对于一个文件夹我们最常使用的一个操作 cd 还没有解释。无论是可读权限还是可写权限都对是否能够进入文件夹没有任何影响。所以我们很容易联想到,我们的 x 可执行权限应该和是否可以正常进入文件夹有关。
通过测试也确实如此。当我们的文件夹不具有可执行权限的时候,我们就无法通过 cd 指令进入该文件夹。但是我们可以尝试是否可以向该文件夹写入一些文件或者读取文件夹当中的文件。
我们会发现,当我们的文件夹不具有可执行权限的时候虽然我们的系统提示我们不能读取文件,但是我们依旧读出了文件夹当中的文件有哪些(test)。但是我们如果想要创建文件在该文件夹当中的时候就必须进入到该文件夹当中,因为不具有可执行权限会被当场驳回。
我们可以通过手动调节权限的设置以达到我们想要的目标效果。
★权限的修改操作
在认识完文件权限的种类以及作用之后,我们再来学习一下怎么修改文件或者文件夹的权限。
▲chmod命令
想要修改一个文件的权限我们可以使用chmod命令执行我们的修改操作。使用方法如下:
我们可以通过加减的操作对权限执行修改。其中u表示user也就是我们文件的所有者拥有的权限,group也就表示我们所属组的权限,o也就是other表示的是其他分组所具有的权限。
上图中我们为user,group,other加上了所有的权限。同样的我们还可以减去指定的权限,让所有用户失去文件的可执行权限:
同样的我们还可以使用比较简单的方式修改权限。因为我们指定权限的位置永远是不变的,第一位永远表示的是可读权限,第二个位置永远表示的是可写权限,第三个位置永远表示的是可执行权限。所以我们就可以使用0或1表示是否具有该权限。可以通过一个十进制数字表示这三个二进制位的情况。例如:
就这样我们可以使用7个数字表示我们所有的权限的状态,所以我们权限的赋值操作也可以写成:
直接使用三个数字表示三组用户的权限信息即可。
★对于文件的用户分组的修改
▲chown命令
在上面我们提到了用户的分组情况,用户的分组一共分为三类,第一类表示的是文件的创建用户,第二类表示的是文件的所属组,第三类表示其他。在查看文件的属性的时候我们也可以观察得到:
但是怎样修改创建用户和所属组呢?
对于创建用户我们可以使用chown命令进行修改,ch代表change。own表示拥有者。但是我们需要注意的是在对文件的用户进行管理的时候我们需要具有一定的权限,否则将无法进行修改。(一般是root用户才可以进行修改,或者配置过后的执行sudo命令的普通用户)
▲chgrp命令
同样的想要修改文件的所属组用户也需要特定的指令,需要使用到chgrp指令进行调节,使用方法和注意事项和chown命令相同。
但是一个一个更改会有点麻烦,所以要想同时修改文件的所属用户和所属组应该怎么办呢?这个时候还是需要使用chown命令,我们只需要使用 :将我们创建用户和所属组的信息分隔开来就好了。
★权限掩码以及umask指令
在我们创建一个文件或者文件夹的时候我们都会发现,文件或者文件夹都会有一个默认的属性。一般文件的默认属性都是666,表示出了不具有可执行属性外具有任何可读或者可写的属性。文件夹的默认属性为777,因为我们通常会在文件夹当中进行一定的读写以及进入等操作。但是经过测试我们会发现,事实上并不是这样的。我们创建一个文件和文件夹的默认属性为:
这又是为什么呢?这是因为我们的系统为了用户的安全会自动设置一个权限掩码,一般的权限掩码都会对其他分组中的用户进行一定程度上的限制,以保证用户信息的安全。我们可以通过umask命令进行观察系统当中的权限掩码:
如上图所示:我们系统当中的权限掩码就为0002,一般的权限掩码都是三位,每一个数字表示的都是一个八进制数字。我们可以将第一个0想象成为八进制数字的前导数。所以实质上我们的权限掩码也可以写成:000 000 010 的形式。我们需要将原本文件的默认属性和我们的权限掩码进行一定的操作才可以得到我们想要的默认的文件的权限。
我们需要先将权限掩码按位取反,之后在和原本的权限进行按位与的操作。执行操作如下:
同理我们可以根据相同的操作得到我们文件夹最终所应具有的权限775。
同样的为了更好的使用权限掩码,我们还可以手动对权限掩码进行修改。我们只需要在umask命令后面加上我们想要修改的权限掩码即可。
虽然我们可以手动修改权限掩码,但是我们最好使用系统中给出的权限掩码,否则会产生很多不必要的麻烦,等到我们需要的时候再对其进行修改即可。
★粘滞位的使用场景及使用方法
当我们在工作的时候肯定会需要很多人都共同进行一个项目的编写,也会需要多人对同一个文件进行读取或者修改的操作。但是服务器上面的每一个用户都是相对独立的,不允许相互访问。
在服务器上的所有的用户,对于其他的用户没有可读可写和可执行的权限,其他用户无法进行访问。因此,我们想要完成合作就需要创建一个用于共享的文件夹,可以在这个文件夹当中写入指定的内容或者修改相关的文件。
但是我们阅读权限会发现,我们这个文件夹对于所属组以及其他用户的权限都不可写,这样怎么才可以实现共享呢?我好不容易有了一个项目的思路,但是却写不尽文件当中!这个时候我们就需要调整权限,将 w 权限放开。
当我们放开文件夹的写权限的时候我们就可以向文件夹当中写入数据了。但是这样真的安全吗?会不会有人恶意删除我们好不容易写好的文件呢?我们可以尝试一下:
我们会发现一个很奇怪的现象:其他用户不需要经过我们的允许就可以任意的删除我们创建的文件,这就带来了很大的安全隐患。但是我们不想让人家删除的话就只能将文件夹的 w 权限删除,一旦删除又没办法进行文件的修改了。所以为了解决这个问题在Linux当中又引入了一个粘滞位的概念。
通常情况下粘滞位是作用于文件夹当中的,我们可以将文件夹的x权限修改成为 t 。当我们文件夹的x权限修改成为 t 之后,在该文件夹当中的文件就只可以被我们文件的所有者删除,其他用户都不可以进行删除,这样就解决了我们上面所出现的问题了。
就像上面图片中所展示的那样,我们将文件夹的权限设置为粘滞位之后重新创建文件,其他用户则无法将我们创建的用户删除。很大程度上保证了我们信息的安全。
此上就是我们权限的所有的内容了,但是需要提一点:所有的权限限制对于root用户都不管用,假如一个用户是root用户就可以无视文件或者系统的其他权限,直接进行任意的修改操作。