目录
1.权限是什么
1.1生活实例理解权限
2.Linux下的权限
2.1Linux下的用户类别与事物属性
2.2介绍用户类别的具体意义
2.3具体实验
2.4文件类型简介
2.4.1 文件类型分类
2.4.2 文件类型依据
3.修改文件rwx权限
4.修改文件的owner,group
5.用户切换方式讲解
6.目录的权限
7.粘滞位
8. Linux中的起始权限
8.1 默认权限分配
8.2 原理剖析
9. 稍稍总结
要理解Linux操作系统中的权限,就必须要理解权限这个词。
我们首先从生活中的小例子上理解权限的定义,然后再理解Linux中的权限。
不过首先可以告诉大家 权限 == 事物(属性) + 人(可做权限)
带着这个对于权限的初印象,我们看下面生活中的例子。
Bilibili,俗称B站,是一个非常优秀的视频网站,里面有很多的视频,对于不同的视频,对于不同种类的用户(大会员以及非大会员),我们可以对该视频做的事情(如观看,下载,评论等)也是不同的。
这里就是权限在应用当中的具体体现。
比如你的名字叫张小明,你的身份是一个非大会员用户 ,
然后对这个"干物妹小埋"这部番剧有评论的权限,没有观看的权限,下载的权限。
比如你的名字叫郭小宇 , 你对于地大寝室文化节这个视频的角色身份是创作者 ,
所以你对"地大寝室文化节"这个视频 , 拥有观看权限,下载权限,评论权限。
回到头来我们再看这句话 权限 == 事物(属性) + 人(可做权限)
事物,其实就是B站上的视频
事物属性 , 就是视频可以被观看,被下载,被评论,被删除...
人,是一个具体的人(郭小宇),作为一个身份(创作者) ,
没有或拥有对于 该事物(视频) 的 各个事物属性的权限。
与其说Linux操作系统之下是对一个具体人的权限,倒不如说是对于一个人的所扮演的身份角色的权限。
(即判断你是否具有观看该部番剧的依据不是因为你叫张三,你叫李四,你叫陈睿.......
而是因为你不是超级大会员,你是普通用户的这一重身份,这一种用户类别)
在Linux下用户类别(三类):
1. 拥有者 owner
2. 所属组 group
3. 其他人 other
Linux下文件事物属性(三个):
1. r 可读权限 即可以读取该文件的内容
2. w 可写权限 即可以修改(删除)该文件的内容
3. x 可执行权限 即可以执行该文件
Linux之下一切皆文件,所以Linux下的事物(类比B站下是视频)其实就是一个一个文件。
所以我们可以讲 : Linux下的权限其实就是 , 不同种类的用户 对于一个文件的 不同权限。
拥有者owner即代表该文件的拥有者是谁,一般来说owner对该文件的权限是最大的,可以修改该文件对于每一个用户类别的权限,所以意味着拥有者操纵该文件一切的权限设置。
不过要注意的是文件的创造者可以是该文件的拥有者,但是也肯不是该文件的拥有者。
文件的所属组group的意义,不在我们这里个人使用的Linux机器里体现出来,因为这台云服务器中只有我们一个人,不存在哪些人是哪个组的这种情况。在不同小组即多个人共用一台服务器的时候group会体现出他的意义。
举个具体的例子:
话说在PenguinTX这个公司中,同一个游戏部门下辖很多个小组,这些小组共用同一台服务器。
而且这些小组之间可谓是生死竞争。例如我们知道的全军出击小组与刺激战场小组(同一种吃鸡游戏,却都是腾讯出品,体现了TX公司中不同小组之间的竞争性)。
现在这么两个生死之争的小组共同使用同一台服务器 , 这两个小组中的两拨人,一拨人肯定不能让另一个组的那拨人能够看到我们这一组写的代码文件内容。这时候group所属组的权限设置可以帮助我们达到这个目的。
具体大概的实现就是比如我们组的张三写了一个很牛逼的代码test.cc(可不能泄露给其他组) , (当然该文件的拥有者肯定就是张三啦)所以就可以设置该文件的所属组group为咱们组,则相对的其他人other就是别的组的人,这样我们设置other的对于该文件test.cc的权限为 --- , 那这个代码就不会被泄露到其他组了。
group的意义就是让文件能被同组的人读写操作,而对于其他组其他人则不设置权限,防止文件泄露给其他group的人。
设置了owner和group分别是谁 , 那自然其余的人就全部都是other其他人,
是owner和group类别的用户当然是属于"自己人"的范畴,文件所给予这两类用户的权限通常是高于赋予other的权限,(我们总不能把可修改权限和可执行权限都给other咱不认识的人吧)
- | 普通文件 |
d | 目录文件(文件夹) |
p | 管道文件(通信作用的文件) |
l | 链接文件(软连接,快速找到文件) |
b | 块设备文件(如磁盘,磁盘叫块设备,因为存储是以块为基本单位的) |
c | 字符设备文件(如键盘,显示器 , 按字节字符顺序显示,输入) |
s | 套接字文件 |
如图的booknote.txt就是普通文件,filetest是创建的管道文件,mydir是创建的目录文件,soft是建立的对../file.txt文件的软连接文件。
我们都知道Windows操作系统下是通过文件名的后缀扩展名 .ppt .txt .docx来判定文件类型的。然而在Linux下,文件类型和后缀并没有直接关系。
虽然Linux下文件类型和后缀并没有直接关系,不过这并不代表我们不需要在Linux中规范文件的后缀。因为我们使用的一些外部工具如gcc编译器,就是根据文件后缀扩展名来执行的。
即修改文件的三类用户(拥有者 所属组 其他人)分别对应的三大权限(rwx rwx r-x)。
修改文件权限的指令是chmod , 在此之前我们需要认识在chmod中三类用户是如何表示的。
u : 拥有者 g : 所属组 o : 其他人 a : 一次性代表u,g,o所有类用户
chmod用法举例 :
此外chmod还有如下的一种操作方式 ---- 二进制方式修改权限 :
我们知道一个文件设置的是三组权限 , 分别对应 owner group other 的 rwx权限分配情况。
所以我们可以用三组 三位二进制数来表示权限的分配情况,比如:
rwx rw- r-- 这就是 111 110 100 最终即 764 权限。
修改file.txt文件的权限分配设置为 rwx rw- r-- 就可以操作为 chmod 764 file.txt
下面我们通过实例认识这一修改方法 :
PS : 我们能够chmod修改该文件权限的前提 , 是建立在我zy是该文件的owner拥有者,所以我才可以修改该文件的权限(当然root作为超级管理员当然可以无视一切直接调整权限)。
如果你这个人既不是这个文件的owner , 你也不是root , 那你要chmod这个文件那自然是不允许的。
即修改该文件的拥有者 , 所属组 是谁。
other是相对于owner+group的其他人 , 所以只要修改文件的owner,group就相当于修改了文件的other。
改变文件的拥有者owner: chown new_owner filename
改变文件的所属组group: chgrp new_group filename
改变一个文件的拥有者owner和所属组group , 即把一个文件交给另一个人/另一个组 , 这其实是两方的事情 , 而不是一方的一厢情愿 。 所以 chown chgrp 需要我们sudo提升权限或者是su切换成root用户来强制完成这一操作。
当我们处于普通用户例如zy的时候 , 我们此时敲 su 指令在输入密码之后 , 会切换到root用户。当我们是root用户的时候 , 我们直接 su zy 就可以切换到普通用户zy了。
而我们都知道每一个用户的创建都会伴随自动创建一个bash(媒婆 bash进程),即一个命令行解释器来服务你 , 沟通你和Linux内核。
所以你一旦是像后面这个例子一样切换用户 zy -> su -> root -> su zy -> su -> su zy , 就会产生大量的无用的bash进程 , 占用系统资源。
解决方案:
在zy通过su指令切换到root的时候 , 我们直接输入 exit 指令 或者 Ctrl + D快捷键 退出root用户 , 就可以回到之前的zy用户了 , 可以直接利用之前的bash进程 到最后就只有一个bash进程 ; 而su zy则会新创一个bash , 加上之前的zy 和 root 总共就是三个bash进程。
我们知道文件的权限分为三种即 r w x , 对于普通文件来说 , r 权限代表可以查看读取该文件的内容 , w 权限代表可以修改该文件内容 , x 权限代表可以执行该文件。
不过目录文件的权限 , 即目录文件的 r w x 权限的意义实际上是不同于普通文件的 r w x的意义。下面我们通过一个表格对比两种文件对权限不同的意义。
普通文件的 r w x 权限
r |
读取文件内容的权限
|
w |
修改文件内容 , 删除文件的权限
|
x |
执行文件的权限
|
目录文件的 r w x 权限
r | 浏览该目录下的文件 (理解为 ls obj_dir 的作用) |
w |
删除,移动目录内文件 或 在目录中创建文件的权限
(理解为 rm obj_dir / file OR touch obj_dir / newfile 的作用)
|
x | 进入该目录的权限 (理解为 cd obj_dir 的作用) |
上面我们展示了 w 权限的意义 , 即被赋予 w 权限的用户可以在该文件夹下创建文件 , 同时可以删除该目录下的文件。
不过你想象一下 , 在具备创建文件权限的同时 , 居然还能删除我这个文件夹下根本就不属于你的文件 , 这实际上是非常可怕的。
有没有一种场景 : 即我希望你这个人可以在我目录下创建文件 , 但是又不希望你能删除我这个目录下别人的文件。
PS:有一个文件夹 , 这个文件夹对于 owner , group 拥有者自己和同组的人 , 我们不需要过度的防范 , 因为都是"自己人" , w 创建+删除权限可以开放 , 所以我们针对的主要是other 。
场景创设:
事实上是存在这样一个场景需求:
我们想让other可以在我这个文件夹下创建文件 , 但是other你不可以在我这个文件夹下做删除文件的操作。这实际上是对于other的w权限的一种限制 , 即将w权限限制为只能创建,不能删除。
如何做到:
使用粘滞位 , 粘滞位的设置可以起到限制w权限的效果。
如何设置粘滞位:
chmod o+t obj_dir
PS:这里的 t 权限是一种特殊的 x 权限 。一方面 , 这里 other 可以具备 x权限 进入该文件夹内部的权限 。另一方面 , t 权限作为粘滞位 , 限制了other的w权限 , 即现在other只能在文件夹下创建文件而不能删除别人的文件。
总之 , 粘滞位的作用就是 限制外人other对于目录文件的w权限 , 只允许other可以在该目录下创建自己的文件,而不允许other删除该文件夹中别人的文件。
不知道你是都有这样的疑问 : 为什么我们touch file , mkdir dir , 创建这些普通文件 , 目录文件的时候 , 系统都会自动分配一个默认权限呢?
普通文件默认分配权限是 664 rw- rw- r--
目录文件默认分配权限是 775 rwx rwx r-x
大体思路是这样的 , Linux中队不同文件都有一个起始权限 , 然后起始权限跟Linux机器中可设置的umask权限掩码进行逻辑运算 , 最后就得出我们给不同文件默认分配的权限了。
普通文件的起始权限是 666 可读 可写 不可执行
目录文件的起始权限是 777 可看 可创建删除 可被进入
Linux中umask权限掩码的初始值 0002
权限掩码的作用 : 凡是umask中取值为 1 的位 , 就要在起始权限中被去掉。
例如 0002 -> 000 000 010 就会将第三组第二位 , 即other的第二个权限即w权限去掉。
PS:不要自己擅自改变umask的初始值 , 这样会影响权限的基础配置 , 会影响正常使用以及文件的安全。
起始权限和权限掩码umask的逻辑运算方式 :
先把umask进行~运算 , 即将umask按位取反后 , 再将之与起始权限进行 & 逻辑与运算。
以上我们以目录文件为例。
读完此篇博客,想必你对 权限的定义 , Linux下的权限的基本介绍与修改方式 , 以及目录权限,粘滞位 有了自己的理解 , 实践是检验自己是否真正掌握的标准 , 希望大家练习起来 , 最后还是非常感谢大家的鼎立支持!
本博客所用文件已上传到Gitee码云中, 请君自取!
practice2 · onlookerzy123456qwq/Linuxtwo - 码云 - 开源中国 (gitee.com)https://gitee.com/onlookerzy123456qwq/linuxtwo/tree/master/practice2