Linux权限

发布于:2024-05-24 ⋅ 阅读:(133) ⋅ 点赞:(0)


在文章的开始,为大家介绍一下,我将Linux的芝士点融进了小说,设计了一个全新的世界观和故事线,在利用芝士点去设计情节的同时,也融合了Linux及其他操作系统的发展历史,希望可以帮助大家更好更形象理解Linux和他的发展逻辑,也希望大家多多支持

Linux权限章——密室杀人始末icon-default.png?t=N7T8https://blog.csdn.net/qq_74260823/article/details/139064743?spm=1001.2014.3001.5502


权限

Linux下有两种用户:超级用户(root),普通用户
就像Windows下的管理员和user

我们先从更熟悉的Windows下讲起:

Windows的权限

  1. Windows进入系统的时候,会先让创建一个新用户user,然后你的C盘里会出现一个文件夹,对应的就是创建的用户名
  2. 创建了User后,会让你设置你的PIN,之后每一次开机,或者进行一些较为隐私的操作时,都会要输入你的PIN才可以进行操作
  3. 一些系统文件夹的文件,我们是不能直接修改和删除的,甚至连打开也不行,我们如果实在想对这个文件进行操作,只能右键文件->以管理员身份运行或者授权,然后才可以进行该操作。


不过,我们下一次进行类似的操作的时候,还是要以管理员身份进行运行,也就是说,我们并非进入了管理员模式,而是借着他的权限进行做了一些事。

而谈到这些,我们再来看Linux之中的权限:

Linux的权限

  1. 进入Linux的时候,先创建一个账号,一般先创建root账号,也就是管理员的账号,然后使用root账号的权限可以创建一些子账号,也就是user    
    每创建一个账号,都要必须设置该账号的password
    之后,在/home的家目录下,就会多了一个/user
  2. 创建了user之后,我们每次以该user登录,都要输入该user的password,才可以进入到该机器里,我们默认进入的第一个文件夹便是自己的user文件夹,也一般只能操作自己目录下的文件
  3. 而如果我们想在/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和-是什么:

  1. r,read,可读权限
  2. w,write,写入权限
  3. 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  来给这个目录加上粘滞位

当一个目录被加上粘滞位以后,这个目录下的所有文件都只能由三种身份来删除:

  1. 上帝,root
  2. 房东,目录的owner
  3. 雇主,文件的owner

从此,便不会出现科比和奥尼尔互肘的故事,而科比的传奇一生,也在粘滞位中粘滞到了直升机上。



网站公告

今日签到

点亮在社区的每一天
去签到