在文章的开始,为大家介绍一下,我将Linux的芝士点融进了小说,设计了一个全新的世界观和故事线,在利用芝士点去设计情节的同时,也融合了Linux及其他操作系统的发展历史,希望可以帮助大家更好更形象理解Linux和他的发展逻辑,也希望大家多多支持
Linux权限章——密室杀人始末https://blog.csdn.net/qq_74260823/article/details/139064743?spm=1001.2014.3001.5502
权限
Linux下有两种用户:超级用户(root),普通用户
就像Windows下的管理员和user
我们先从更熟悉的Windows下讲起:
Windows的权限
- Windows进入系统的时候,会先让创建一个新用户user,然后你的C盘里会出现一个文件夹,对应的就是创建的用户名
- 创建了User后,会让你设置你的PIN,之后每一次开机,或者进行一些较为隐私的操作时,都会要输入你的PIN才可以进行操作
- 一些系统文件夹的文件,我们是不能直接修改和删除的,甚至连打开也不行,我们如果实在想对这个文件进行操作,只能右键文件->以管理员身份运行或者授权,然后才可以进行该操作。
不过,我们下一次进行类似的操作的时候,还是要以管理员身份进行运行,也就是说,我们并非进入了管理员模式,而是借着他的权限进行做了一些事。
而谈到这些,我们再来看Linux之中的权限:
Linux的权限
- 进入Linux的时候,先创建一个账号,一般先创建root账号,也就是管理员的账号,然后使用root账号的权限可以创建一些子账号,也就是user
每创建一个账号,都要必须设置该账号的password
之后,在/home的家目录下,就会多了一个/user - 创建了user之后,我们每次以该user登录,都要输入该user的password,才可以进入到该机器里,我们默认进入的第一个文件夹便是自己的user文件夹,也一般只能操作自己目录下的文件
- 而如果我们想在/root文件夹中进行操作,会显示没有权限
此时,必须用sudo进行操作,即以管理员身份进行运行。
对比一下一二三,Windows操作系统下的权限是不是和Linux下的一模一样?
所以,我们完全可以用Windows的权限来理解Linux的权限,将windows里的使用经验放在Linux中
但是,和Windows不同,Linux可以直接进入管理员模式
使用su(Substitude User),然后输入root的password,就可以把自己的身份设置为管理员,虽然大部分人都不知道root的password
权限的分类
用户的分类
对一个普通用户,在一个文件面前,他的身份分为三类:
- u-user 文件的所有者
- g-group 文件所属组
- o-other 其他人
啥意思?
我们在玩任何一个团队游戏,也会分为三类:
- 我自己
- 队友
- 其他人
而一个技能,也会有三种类似的分类:
- 对自己释放,给自己buff
- 对队友释放,给队友buff
- 对其他人释放,给其他人debuff
所以,这也对应上了:
- 所有者,就是这个技能的是施法人,拥有着这个文件的人。
- 所属组,就是施法人的队友,和所有者在一个队伍里的人。
- 其他人,就是除了所有者和所属组以外的所有人,也就是敌人。
但是,如果所属组里也包含了所有者,也就是所有者有着两种权限:owner的权限和group的权限,那就不太好了。为了区分开来,所属组的人要除开所有者,也就是这个技能只能对队友释放,不能对自己释放
不同用户拥有的权限
我们用ll列出一个文件的详细信息,会发现:
这都是啥?
我们只看其中的一部分:
后面两个好理解,一个文件有所有者,有所属组,这我知道,但是不是还有一个,那other去哪了?
other就是除了所有者和所属组以外的所有人,other有这么多人,那我还表示个集贸啊,所以文件的详细信息上只有两个对象:所有者和所属组。
然后就是前面的那三个,owner权限,group权限,other权限。这也好理解,既然分出了三种不同类别的用户,那不同的用户自然也会有不同的权限,不然我分他干嘛?
但是,rwx权限是什么鬼?r--又是什么鬼?还是教给大家的一个方法:看不懂就百度翻译:
豪德,所以我们至少可以知道,rwx不是一个单词。
我们来分别介绍一下,rwx和-是什么:
- r,read,可读权限
- w,write,写入权限
- x,execute,执行权限
我们现在有一个程序,
可读,就是能不能看这个程序的内容;
可写,就是能不能修改这个程序的内容;
可执行,就是能不能执行这个程序。
这很好理解,而一个文件,就只分为了这三大类权限:读,写和执行。
那-是啥?就是没有。任何权限默认的顺序都是rwx,r--,就表示原本在w和x的权限上,减去了应有字母的权限,此时就是有r权限,没有w和x权限。
至此,我们可以得出一个结论:有这个字母,就表示有这个权限;而在那个位置上有个-,就是没有那个字母对应的权限。
权限的修改
我们知道了,一个文件把人视为三个类别,而对不同类别的人,会有着三个不同的权限。那如果我们想修改一个文件的权限,那该咋整?
首先,我们必须先知道:只有文件的拥有者user,才可以更改权限。
修改权限的指令,为chmod,change mode。在Linux指令中,一个指令有着统一的格式:
chmod也一样,chmod的格式为:
chmod 人种 加或减 权限名 文件名
就比如:chmod u+r test.c,表示的是:在test.c文件上,为文件的所有者user加上read读的权限。
但是,这样不免有些过于麻烦。我们用1表示拥有对应的权限,用0表示没有对应的权限,按照顺序来表示rwx便是111,而r--便是100。
而这实际上,用一个八进制数就可以表示完全所有的情况。所以,对所有权限,我们都能用八进制的数0~7来表示,rwx就是7,r--就是4
于是,我们便可以一次性修改三种全部的权限:
chmod u=7 test.c
-> 表示把拥有者user的权限变为了7->111,也就是rwx
而且,我们还可以直接同时修改三种权限:
chmod 775 test.c
-> 表示把user,group,other的权限分别变为7,7,5,也就是user=rwx,group=rwx,other=r-x
所属组的修改
前面三个可以修改,后面两个自然也可以修改,我们仿照chmod,也可以使用chown和chgrp,分别代表修改文件的所属者和所属组
chown 用户名 文件名
chgrp 用户名 文件名
默认权限
我们创建一个目录或者文件,它的默认权限是怎么样的呢?
所以,我们明白了,在默认的情况下,我们创建一个文件,系统给这个文件的默认权限是664
rw- rw- r--
但是,我们非常又个性,我们不想用系统给的默认权限,我们只想用自己设置的默认权限,那该怎么办?
这时候又要涉及一个另外的概念:权限和权限掩码umask
权限掩码
一个文件就像一栋楼,有三个房间rwx,每个房间上都有一把锁
比如对owner,系统在分配钥匙的时候,会分配RWX三个钥匙,我们可以用钥匙打开和进入所有的房间
而对other,系统只会给他一把钥匙,R的钥匙,other只能用钥匙打开R的门,但是W和X因为没有钥匙,other没有办法进入W和X的门
这便是默认的权限
系统在分配钥匙的时候,对group也分配了RWX三个门锁的钥匙,正常情况下,group也能随意进出所有房间。但是,我们对group不太放心,房间是我们的,要是group在里面打胶,那还的了。我们为了防着group,于是除了系统自带的锁,我们再给房间专门上一层锁。
这样,就算系统给了第一把锁的钥匙,group也没有第二把锁的钥匙,只能解开第一个锁而不能解开第二个锁,这个房间还是打不开。
mask,就是系统默认分配钥匙的方法,是固定不变的,
文件的默认mask是666,也就是全为110,都只给r和w对应门的钥匙
目录的默认mask是777,也就是全为111,都给rwx三个门对应的钥匙而umask,就是自己再给门加上第二道锁。系统默认为002,也就是对owner和group不另外加锁,但是对other,要加上010的锁,封禁了other对write的权限。
但是如果,我连第一把锁的钥匙都没有,那加上第二把锁,我还是打不开门。
这里就要说道umask的计算,他不是简单的加减,而是对位的上锁!
目录的权限
文件的rwx很简单,那什么是目录的rwx呢?
- r:读,很简单,就是用ls看目录里的内容
- w:写,向该目录里新增或者删除文件
- x:执行,就是双击,双击是干啥的?进入目录。所以x就是进入目录。
但是,在Linux中,就算没有进入目录,也可以用ls看目录里的文件(用ls指定具体的路径),所以没有x权限不代表不能r!!
但是,此时就会产生一个问题:
故事time:
科比和奥尼尔同在一个目录下工作,对一个目录都有着rwx权限
但是,突然有一天,一句“沙克也干了”,将奥尼尔整红温了。至此之后,科比和奥尼尔闹掰了,两人决定关闭了互相的权限,两人也不再属于同一个group,就算两人在同一个目录下,其文件对相互都是---,不可见不可读也不可执行。
有天,科比不小心操作失误,创造了无数的zhouji.24,一个个删太麻烦了,那我干脆就把目录里所有我创造的文件都删了吧,想也没想,科比直接输入了rm ./*
此时注意:因为科比对这个目录,有着rwx的权限,该目录里的所有文件,包括奥尼尔的文件,虽然不能看不能写也不能执行,但是奥尼尔的文件也属于这个目录下,所以所有文件都可以删除。
而经过科比这一通操作,不仅把自己的文件删干净了,还把奥尼尔的文件也删干净了,而这一报复社会的操作,自然是不合理的:
不是你的文件,你凭什么可以删掉?
所以,Linux便有了一个新的东西,来弥补这一不合理的地方:
粘滞位
chmod +t 来给这个目录加上粘滞位
当一个目录被加上粘滞位以后,这个目录下的所有文件都只能由三种身份来删除:
- 上帝,root
- 房东,目录的owner
- 雇主,文件的owner
从此,便不会出现科比和奥尼尔互肘的故事,而科比的传奇一生,也在粘滞位中粘滞到了直升机上。