【Linux】-Linux的权限

💖作者:小树苗渴望变成参天大树
❤️‍🩹作者宣言:认真写好每一篇博客
💨作者gitee:gitee
💞作者专栏:C语言,数据结构初阶,Linux,C++

在这里插入图片描述如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!


前言

这篇我们来将Linux的权限问题,没有权限,哪Linux就都乱了,就好比社会,有的人能干这些事,有的人就被约束,这样才不会乱,而且很安全,所以再我们Linux再也有不同的身份,再将身份之前,我要先讲解一下shell命令以及运行原理,让打击更好的理解指令的作用,话不多说,我们开始进入正文讲解


一、shell命令以及运行原理

在这里插入图片描述
我们再输入指令的时候,本质是输入字符串,但是指令的本质,就是编译好的可执行程序或者脚本,存放再指定的目录下。我们所输入的一行指令,都叫命名行指令,也可以叫shell指令。

我们为什么要有指令??
我们的Linux严格意义来说和一个操作系统,和Windows操作系统一样,我们称之为“核心(kernel)”,我们用户不能直接去访问,就好比我们不能直接去访问Windows操作系统一样,因为操作难度比较大,我们通过图形化界面或者命令行解释器来访问操作系统,再Linux上,我们输入的指令最终都是需要再kernel上运行的,所以我们通过命令行解释器来和kernel进行对话。

就好比,你是你们村的张三,喜欢隔壁村的如花,但是你不善于交流,这时候叫来了王婆,让王婆来帮你们说亲,这时候张三就相当于用户,王婆相当于命令行解释器,如花相当于操作系统,但是有一天一个有才有钱的李四过来找如花,张三呢,就看不下去了,非得找王婆再帮忙说亲,当王婆刚过去如花家,看到他们正开心着吃着饭,也不好意思去打扰他们,就直接回头告诉张三你放弃吧,张三就廷王婆说放弃吧,通过这个例子,我们的王婆的任务就是,将张三的想法告诉给如花,但又不想打扰如花的美好生活

所以对于命令行解释器:

  1. 将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者。
  2. 对于用户的非法指令,命令行解释器直接拦截,变相的保护核心

在这里插入图片描述
当我们输入非法指令的时候,bash命令行直接拦截,直接找不到
再我们Linux中,我们的命令行叫 bash ,又叫shell,还叫sh
在这里插入图片描述
shell是一个总称,其余是他的其中一部分

我们有了上面的理解,我们来看看专业介绍
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过**kernel的“外壳”**程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

将使用者的命令翻译给核心(kernel)处理。
同时,将核心的处理结果翻译给使用者。

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

帮助理解:如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。

二、Linux权限的概念

对于我们的张三就相当于我们的用户,喜欢如花的肯定不止一个人,那么就一位着有不同的用户,但是用户不可能都是一样的,人也不可能是一样,再现实中,每个人都不一样,但在Linux,就有两种人,一个是超级用户(root),一个是普通用户
超级用户家里管的松,想出来减如花就出来,不收任何限制的,但是普通用户就不一样了,家教严,被家里人管着,想见如花总是被限制,所以这个家长就是Linux系统

超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

在这里插入图片描述
我们看到我使用su之后命令行提示符就变了,权限变成了root用户

我们想要切换权限,就需要通过下面的指令去实现
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。

再前几篇博客,我都是以root账户登录的,现在使用普通用户登录的,使用su,只是身份权限变了,但还是普通用户登录的,对于Windows就好比下面的方式
在这里插入图片描述
我们的登录方式没有改变,对于su,从普通权限切换root权限需要输入密码,但是樊过来就不需要输入密码,所以大家最好把普通用户的密码和root密码设置不一样,方便理解。

如果想换登录方式,我们需要使用下面的指令

su -

在这里插入图片描述
大家看到执行命名之后出现了Last login:就用登录的方式切换到root账户了
退回来和上面用法一样:
在这里插入图片描述

对于退回到普通用户: 使用热键Ctrl+d或者exit。

对于权限的概念我想应该把大家将明白了,那我们来看看这些权限具体是怎么管理的吧


有的时候想要对一条指令进行提权,我们不需要直接切换到root权限.直接这样就行了:

sudo command

在这里插入图片描述
大家看到这种方法没有办法完成这件事,原因是我们的普通用户都是add user出来了,没有颁发执行sudo,因为系统不信任你,除非你将普通用户加到系统的白名单里面就行了,现在不做介绍,后面再介绍,他也怕你把每条指令都加sudo,那样普通用户就和root使用一样的效果了.

三、Linux权限的管理

3.1文件访问者的分类(人)

Linux用户分为两种:超级用户和普通用户,但是不管是那个用户,都可以再细分成三个(拥有者,所属组,其他者)

文件和文件目录的所有者:u—User(中国平民 法律问题)
文件和文件目录的所有者所在的组的用户:g—Group(不多说)
其它用户:o—Others (外国人)

在这里插入图片描述
我们来具体介绍一下这三者有什么关系吧

以普通用户为例:我们有一个xdh用户,还有一个bly用户,他们都是普通用户,xdh用户写了一个项目代码,xdh就是xdh这个用户的拥有者,bly作为普通用户也是其他用户来说,肯定看不到xdh用户写的项目,有一天你的主管想要看一下你写的项目,你的主管可不是超级用户哦,超级用户肯定是公司董事长负责,而且有许多不同的主管,他们都是普通用户,那主管怎么访问到xdh用户写的项目呢??但不被bly用户所访问到呢??这时候就需要将主管拉到xdh用户的所属组里面,相当于开了一个群聊,两个单独对话,外面的人不知道。

在这里插入图片描述

对于root账户也有这三个角色,但区别于普通用户,普通用户可以有很多个,root用户只能有一个,root用户的任何角色都能访问普通用户的任何角色,樊过来就不行

有了这个概念,我们再来介绍下一个知识点

3.2文件类型和访问权限

我们再第一节Linux指令就说到 ll是查看文件的具体属性
在这里插入图片描述

当时我们只看懂后面的内容,今天我就带大家理解前面的内容,再最前面的第一列我框出来的,这是文件的类型,文件有很多类型:

d:目录文件
-:普通文件
b:块设备文件
c:字符设备文件
p:管道文件

对于后面三种文件不止是什么文件不重要,后期我会介绍的,大家知道有这些类型的文件就行了,我将再Linux展示一下例子给大家看看:
在这里插入图片描述


细心的同学应该发现普通文件的后缀好像好i想有没有都无所谓,再Linux种文件的后缀对于操作系统没有实际的意义,但这不代表写不写都行,我们来看一个例子:

在这里插入图片描述
在这里插入图片描述
对于上面两个例子,上面那个可以运行,下面的不可以,gcc是一款编译器,是装在Linux上一款软件,第二个运行不了原因是他不是.c文件,对于gcc他是认后缀名的,所以后缀名还是有作用的.

讲完文件的类型,我们再讲解后面的内容

在这里插入图片描述
在这里插入图片描述

r:可读
w:可写
x:可执行
-对应权限的位置,无权限

在这里插入图片描述
都是再普通用户xdh下修改权限,本质还是xdh用户登录的.

都在同一个目录下进行权限的修改才可以,这样才能操作同一个目录,后面也会将这就是共享目录,我们只需要再test1再su切换成root权限,su bly切换其他用户权限,前提你有两个普通用户,还有一个所属组不展示也是一样的,通过root来反映

对于这个test.txt文件:我们对于所有者和所有组来说可读可写但不能执行,对于其他用户只能读,我们来看测试:
在这里插入图片描述
结果:
在这里插入图片描述
和我们看到的结果是一样的

对于权限,我们可不可以进行修改呢??
只有拥有者和root账户才能对文件的权限进行修改,以拥有者为例:
chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
删除权限:
在这里插入图片描述
在这里插入图片描述

我们去掉所有权限,拥有者都没法访问了。对于root权限,还是可以继续访问的和写入的,但是执行也会受限制。,想要把权限再加回来,再拥有者上操作和再root上操作都可以
添加权限:
在这里插入图片描述

只能认证一个身份权限:

我们现在看一个案例,我们把拥有者的权限改成可读不可写,把所属组改成可读可写,这样看上去是有点冲突,我们来看看是否可以进行写入:
在这里插入图片描述
我的xdh权限既是拥有者也是再所属组里面,我在所属组里面有写的权限,为什么不行呢?? 原因是我们在进行权限认证的时候只会认证一个身份,只看一组,对于上面的例子,先看第一组,发现你是拥有者就按照拥有者的权限匹配给你,后面就不看,大家可以联系逻辑或的规则简单来理解这个

在这里插入图片描述
root作为所属组就可以写入,但是不可以执行,大家对于这种匹配机制理解了吧

补充:想要使每个角色的权限一样,使用chmod a+rwx test.txt 表示给所有角色加上相同权限

权限的另一种方式表示:

我们不管那种身份,都有对应的三个权限,读,写,可执行,而且每个位置的含义是固定的,第一个位置:r/-,第二个位置:w/-,第三个位置:x/-,每个位置只有是或者不是两种选择,是的话就是对应的权限,不是就对应-,所以每个位置可以1/0来代替

例如:

在这里插入图片描述
所以上面的权限也可以使用664代替,这样大大就很减小使用chmod的难度,我们来看案例:
将test.txt的权限改成r-xrw—x,对应的数字应该为561:
在这里插入图片描述
我们一种有三位,所以是八进制的表示方法,每个角色有0-7种选择,所以大家应该理解了这种权限的表示方法了吧

将拥有者和所属组改变:

# chown user1 f1

有点时候我想将自己写的文件给给别人,但是别人要同意才行啊,不是想给就给的,但是root权限可以强制给,我们来看案例:
在这里插入图片描述

# chown -R user1 filegroup1//递归式的将此目录文件修改子目录的拥有者。

不加的情况:

在这里插入图片描述
加的情况:
在这里插入图片描述

他的子目录的拥有者权限也被修改了

修改所属组也是相同的道理,我就不做具体的案例展示了,大家可以自己去试试:

chgrp
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组

为什么默认的文件式我们看到的样子:
细心的同学就会发现,我们创建的目录文件和普通文件,看到的权限都是775和664
在这里插入图片描述

其实我们默认的普通文件起始是666,目录文件是777,为什么不是我们看到的样子呢??原因是有掩码的存在

umask:

在这里插入图片描述
我的机器掩码是0002,不同机器可能不一样,最前面的一个0不要管,我们关注后面的三位就好了

大家看到这里,最终的权限=起始权限-掩码,那我们来修改一下掩码为0001,看看结果是不是776和665
修改umask:
在这里插入图片描述

在这里插入图片描述
我新创建一个目录文件M1和一个普通文件tmp.txt,大家看到M1的权限是776,而tmp.txt是666.显然不是减法,776那个只是巧合,起始他遵循的规则是这样的:起始权限&(~umask)=最终权限,大家可以自己下来计算,这里博主就不做具体的计算了

大家看到这有没有发现我们讲的都是普通文件的权限,对于普通文件我们的rwx代表的含义,但是我们的目录文件也是这三个权限,难道也是相同的含义吗,接下来我就开始讲解目录的权限

3.3目录的权限

我们都以拥有者的身份来进行测试,其余的权限都给去掉
在这里插入图片描述
我们一个一个加权限看看是什么效果:

加不加r
在这里插入图片描述

可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.

黄色框里为什么会出现这样的提示,原因是我没有使用-R递归式的修改权限,B2的权限还是000

加不加x
在这里插入图片描述

可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.

加不加w
在这里插入图片描述

可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件

在共享目录下,三个角色都可以在这个目录下进行写文件,也可以互相看文件,但是如果拥有者写了文件,这个目录其他者具有可写权限,,那么按照这个特性,其他者是不是就可以删除掉拥有者写的文件了

在这里插入图片描述
在这里插入图片描述
这样显然不合理,我们也不能把其他者的可写权限给去掉,那样他不久不能再这个目录下创建文件了,我们必须想办法保证他可以查看拥有者的文件,自己写可以再当前目录下创建文件,并且不能删除拥有者写的文件,这时候就引入我们的粘滞位,我们把共享目录的其他者权限加上粘滞位就可以了,看操作:
在这里插入图片描述

我们看到最后一位由x变成t,具有特殊含义,我们再来执行最初的操作,看看其他者能不能删除拥有者写的文件
在这里插入图片描述
大家应该看到了删除不了

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由:

一、超级管理员删除
二、该目录的拥有者删除
三、该文件的拥有者删除

这个只是还是非常关键的。

关于权限的总结
目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有-r 读权限(这
个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档

四、总结

Linux当中的权限再管理开发中非常的有用,对文件的安全性进行了保障,所以大家一定要学好这个章节,里面的细节很多,有的只有再平时的使用中才能体会出来。希望大家下来多尝试尝试。我们今天的内容就讲到这里了,我们下篇再见

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘柚!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值