Linux权限的理解与操作


1.权限的概念理解

1.1 对人操作

站在权限的角度,对我们来讲,可分为两大用户:一个是 root 用户,每一个Linux系统下有且仅有一个,具有Linux下的最高权限,而在一般情况下,root用户是不受权限的约束的。另一个也就是普通用户了,我们都知道,类似windows平台下,用户可以有多个,那么Linux下也是一样的,可以同时存在多个普通用户。

那么既然Linux下可以同时存在多个用户,那我们是如何进行用户与用户之间的切换的呢?
![在这里插入图片描述](https://img-blog.csdnimg.cn/2e7f645539bd43c6b649bf3d3e85de17.png

我们可以看到,通过 su - 我们就可以从普通用户转换成 root 用户,而在 root 用户的情况下,我们无需输入普通用户的密码,就可以从 root 账户转换成普通用户。而在普通用户与普通用户之间的转换,则需要输入对应用户的密码。同时,这里建议,root 用户的密码不要与普通用户的密码一样,因为这样不方便我们区分此时登录的是 root 用户还是普通用户。

1.2. 对角色和文件操作

所以什么是权限呢?
你如果不是这个学校的学生,你没有这个学校的校卡,你无法进入该学校。换言之,你不具备进入该学校的权限!
你的邻居,在征得你家人的同意之前,他无法进入你家,这也是没有权限的体现之一。

所以什么是权限呢?我们现在可以总结得出,权限它是针对于人来讲的!

我想要在面包上面看电影,我想要在机械手表上面打游戏,上述这些事情有存在的可能性吗?
答案是:肯定不可能。因为面包本身就不具备看电影这个属性,机械手表也不具备打游戏的属性。
所以我们说,如果一个东西本身不具备这种属性,那么“人 也就肯定不具备对应的权限。而在Linux下,一切皆文件,而文件的属性无非就是读和写,除了读和写之外的文件不具备的其它属性,那么我们人,也不具备对应的权限。

所以我们可以对其高度总结为,事物的基本属性决定权限相关的概念的。对应文件权限中,也就是一件事是否允许被 “做”,文件 ,也就是一个文件允不允许被你读或者被你写,允许就是,你具备这个权限,不允许就是你不具备这个权限。

所以权限的核心 = 人 + 事物属性

2. 认识Linux下的文件权限

在这里插入图片描述
如图所示,目录的第一列的第一个字符,即表面该文件的类型,例如(本章重点为前两个):
d:目录
-: 普通文件
p:管道文件
b:块设备(可以认为磁盘就是块设备)
c:字符设备 (最典型的就是键盘、显示器等设备)
l:链接文件

我们需要了解的是,Linux 与 windows 不同,Linux 不像 windows 那样,以文件后缀名来区别文件类型,但是!!!并不代表文件后缀在 Linux 上不可以被使用。

· 或许有人会感到疑问:那 linux 中后缀名存在的意义是啥? ==》 在系统层面的角度看来可以说没意义,可以理解为,后缀名更多的是给自己(也就是用户)看的。

但是如果了解到这里,不妨有铁子或许有以下操作,然后对上述所言并感到疑惑
在这里插入图片描述
我们先是对后缀为 .cpp 的文件进行了编译,正常运行,而后又因为上述讲到,Linux不以后缀名区分文件类型这个概念,因此我们将 .cpp 改为其它后缀,并重新进行编译。但是我们发现,编译时报错“文件无法被识别” 。所以… 这真的与我们刚刚所说的相矛盾吗?

我们确实说了Linux不以后缀名区分文件类型,而 g++ 是 Linux 环境下的一个软件。但是!g++ 可以等价于 Linux 吗??换言之,软件 == 系统? ==》 所以如果某些软件对于文件后缀名有要求的话,系统是不管的,也就是说,后缀名有没有意义,具体得看软件的具体要求。


2.1 用户角度

在这里插入图片描述
对于用户来讲,文件的权限可以分为三类角色:
拥有者:文件所属的那个角色
所属组:文件所属的那个小组
other: 不属于以上两种角色的任何一种,即other

但是我们又看到,拥有者和所属组是同一个用户,这种情况是允许被存在的,当只有一个人的时候,这个人既可以是拥有者,也可以是所属者。可是或许还是有人不太理解 “所属组” 存在的意义,所以接下里做一个简单的理解:
在公司内部,或许会存在着一个项目多个团队开发这种情况。此时,我们假设 A 团队 和 B 团队进行竞争,A 团队的项目里有一个源文件,它是属于张三的。有一天,张三的领导,也就是A团队的领导,要了解一下张三的代码,那么他就需要拥有文件对于的权限,而如果没有所属组这种角色,那么张三的领导,也就只能是 other,与此同时,B团队的所有人也是other,如果此时张三对other权限进行放开,那么张三的领导了解张三的源文件的同时,A团队的竞争对手,B团队也能够看到其源文件,那么这是不合理的。所以所属组角色的到来,可以有效的避免该情况的发生,将 A 团队的成员添加至该文件的所属组成员,即可以让团队内部人员了解到自己的文件,又能够避免团队以外的人可以看到。

2.2 文件角度

drwxrwxr-x. 2 outlier outlier   6 Sep 21 23:52 permissions
-rw-rw-r--. 1 outlier outlier 101 Sep 22 00:00 test.txt

我们可以将上述第一列的权限,除去第一个字符(文件类似),将其剩下的三三分为一组
权限:	d       rwx       rwx       r-x
对应:  目录	   拥有者     所属组      other
其中,r表示读权限,w表示写权限,x表示文件的可执行权限
如果某文件不具备其中一种权限,我们用 - 表示无此权限,例如:
-rw-rw-r-- :	rw-       rw-		r--
此案例的权限可描述为,拥有者和所属组对该文件有读写权限,无可执行权限,other只有读权限,没有写和可执行权限

3.权限的修改

3.1 对文件属性进行操作

3.1.1 ugo+ - 法

-rw-rw-r--. 1 outlier outlier 101 Sep 22 00:00 test.txt
[outlier@localhost 111]$ chmod u+x test.txt
//其中的chmod为修改文件权限的指令,u表示拥有者,u+x表示给拥有者添加对该文件的可执行权限


-rwxrw-r--. 1 outlier outlier 101 Sep 22 00:00 test.txt
[outlier@localhost 111]$ chmod u-rw test.txt 
//与上边类似,u-rw表示去除拥有者对该文件的读写权限


---xrw-r--. 1 outlier outlier 101 Sep 22 00:00 test.txt
[outlier@localhost 111]$ chmod g-r test.txt 
//g表示所属组,g-r表示去除所属组对该文件的读权限


---x-w-r--. 1 outlier outlier 101 Sep 22 00:00 test.txt
[outlier@localhost 111]$ chmod o+wx test.txt 
//o表示other,o+wx表示增加other对该权限的写和可执行权限


---x-w-rwx. 1 outlier outlier 101 Sep 22 00:00 test.txt
[outlier@localhost 111]$ chmod u+rw,g+r,g-w,o-rwx test.txt 
//该指令的权限操作可描述为:将增加拥有者对该文件的读写权限,增加所属组对该文件的读权限,
  同时删除其对该文件的写权限,删除other的所有权限


-rwxr-----. 1 outlier outlier 101 Sep 22 00:00 test.txt
[outlier@localhost 111]$ chmod a+r test.txt 
//a表示对所有角色进行权限操作,a+r,增加所有角色对该文件的读权限

了解对文件的权限操作之后,我们需要清楚,如果没有权限,会是什么样子的。
首先我们将文件的全部权限去除,然后对其进行读写和访问操作

在这里插入图片描述

我们可以看到,当我们将该文件的所有角色的所有权限都去除之后,且建立在当前用户是该文件的拥有者和所属组,对该文件进行读写和执行操作,我们都看到了报错信息 “Permission denied – 权限拒绝”。

在这里插入图片描述

接着,我们又对该文件的拥有者添加了读写权限,然后 echo 数据 重定向输出到该文件中,此时写入数据成功(因为并没有出现上述的报错信息),我们再通过cat指令,读取该文件的信息,也能够成功的读取。

对于所属组 和 other的权限的体现,与上述案例相似,此处不做过多的演示。

回过头来,是否还记得我们在文章一开始讲述用户角色的时候,提及root用户不受权限的约束,假设该文件的拥有者和所属组均不是root,即root属于other,而other的权限均为 -, 那么此时root能不能对该文件进行读写执行呢??

在这里插入图片描述

实操后表面:在root用户下,的确不受权限的约束,即使root在该文件的角色中属于other,且没有任何权限,但依旧可以对该文件进行任何操作(如果文件本身具有对应属性的前提下)。不仅如此,对于root用户更加炸裂的事情是,它还可以任意的修改文件角色的任何权限(在该案例中,root用户能够将该文件的拥有者权限全部清楚,且将other权限全部放开)

结论:root用户不受权限的约束

3.1.2 八进制方案

-rw-rw-r--. 1 outlier outlier 0 Sep 22 02:10 myfile.txt
-rw-rw-r-- :			rw-		rw-		r--
对应权限八进制表示为:		6		4		0
对于一个文件的权限,我们可以以三种角色将其三三分为一组,有权限可以表示为1,没有表示为0
那么每一个角色的权限即三位二进制数,即可用八进制数来表示该读写执行权限的有无

演示案例:
-rw-rw-r--. 1 outlier outlier 0 Sep 22 02:10 myfile.txt
[outlier@localhost 11]$ chmod 440 myfile.txt 
//第一个4表示将拥有者的权限设置为只读,即r--
//第二个4表示修改的是所属组
//而0表示将other的权限清空,即---


-r--r-----. 1 outlier outlier 0 Sep 22 02:10 myfile.txt
[outlier@localhost 11]$ chmod 764 myfile.txt 
//7表示将拥有者的权限设置为读写执行,即rwx
//6表示将所属组的权限设置为读写,即rw
//4表示将other的权限设置为只读,即r--

3.2 对人物角色进行操作

上述操作都是基于对文件本身的属性做权限的修改,而接下来的操作是对文件的所属角色的权限进行操作。

chown 用户名 文件名 		//修改文件的所属者
chgrp 用户名 文件名		//修改文件的所属组

在这里插入图片描述

我们可以看到,在该系统中有两个用户,接着我们试图将 myfile 这个文件的拥有者以及所属组修改为其它用户,但是却出现报错信息 “Operation not permitted – 操作不被允许”。那这是为啥呢?是指令有问题吗?

首先,指令是没问题的。这里就涉及到一个问题:当我想要将一个物品给予他人是,我需不要经过他人的同意,或者说,我需不需要询问他人的意见?

肯定是需要的嘛!那么在 linux 中的文件所属角色的转移,也是同理。而普通用户与普通用户之间的权限是对等的,因此无法完成该操作,我们需要将用户提升至 root 用户。

在这里插入图片描述

我们可以看到,将普通用户提升为超级用户,经过上述两条指令,我们分别对文件的拥有者和所属组进行了修改,且修改成功。现在文件,我们给出去了,那我们如果想要把文件重新要回来,能不能用普通用户呢??

答案是:不能!依旧需要超级用户的权限。

那么,又有一个问题,我们能不能不提升为 root 用户对文件角色进行修改呢?
这里有一条指令可以达到该需求。

sudo chown/chgrp 用户名 文件名
//加上sudo,就能够达到以root用户的权限去执行该条指令(也仅限该条指令)

在这里插入图片描述

我们可以看到,在普通用户下,我们如果想将文件重新要回来时,也是不被允许的!但是加上sudo,就让我们在执行该条指令时,拥有了和 root 一样的权限,最终达到不切换 root 用户的情况下,将文件角色进行修改。

但是,如果用户想执行sudo,提升权限,需要当前用户已经存在于信任列表里面,才可以执行sudo指令,而添加用户到信任列表是需要root身份的!(至于如何添加,本章不做演示)


结语:

关于 Linux 下权限的理解以及如何对文件的权限进行操作,如果该文章能给你带来一定的帮助,或者是收获,我很开心。
同时,觉得对你有帮助的伙伴们,也可以 点赞👍 + 收藏⭐️ + 关注➕ 支持一下!
感谢各位观看!!

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值