【Linux】Shell 与权限:Linux 系统的双重保障

欢迎来到 CILMY23 的博客

🏆本篇主题为:Shell 与权限:Linux 系统的双重保障

🏆个人主页:CILMY23-CSDN博客

🏆系列专栏:Python | C++ | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算法专题 | 代码训练营

🏆感谢观看,支持的可以给个一键三连,点赞收藏+评论。如果你觉得有帮助,还可以点点关注


前言:

Hello,大家好,这里是 CILMY23 的频道,上期我们接触了压缩,搜索等等指令,也是结束了指令篇的学习,今天我们就来深入探究一下shell的运行原理以及Linux中的权限。

个人分享:每个人的内心都是一片海洋,每一路人都如此。每个人都是思想、见解和情感的宇宙。


目录

shell运行原理

外壳程序是什么?

为什么有外壳程序?

[shell 外壳一般做什么?](#shell 外壳一般做什么?)

权限的概念

什么是权限?

权限的本质

Linux中的用户

如何互相身份互换?

sudo


shell运行原理

我们之前学到的大部分命令,其实本质就是在磁盘当中/系统当中,特定目录下的一个可执行文件 。说白了,我们平时学到的,pwd,或者top,或者mkdir,或者是我们用过的touch,又或者是whoami......我们所得出的结论就是:大部分指令就是文件。删了就无法使用了。

在Linux中,绿色表示是可执行文件

但是我们发现,每次在输入命令前,总是弹出这个东西

这是个啥?

其实这个东西叫做命令行提示符 ,它其实是字符串 ,它是由对应的[],用户名,主机名,路径构成的一个字符串。它是printf打出来的。

我们在屏幕中输入ls 相当于 => 输入一条指令, 相当于打入ls字符串,被对应的程序读取了,在系统中,存在这样一个文件,会打印出命令提示符。然后从我们的命令行中获取指令

而操作系统实际上是分为广义上的操作系统和狭义上的操作系统,广义上的操作系统包括内核和命令行,甚至包括平时用的指令,狭义上的操作系统只包括内核,内核----顾名思义,就是比较重要的东西,很多东西都是它管理的,比如键盘输入,显示器输出等等

Linux严格意义上说的是一个操作系统,我们称之为"核心(kernel)",而用户执行某种功能的时候,不是直接让操作系统执行对应的指令的,而是先交给外壳程序。

用户没有办法直接访问内核,而为了让我们更好访问,在任何操作系统上,都会包裹一层软件层,也是shell层。外壳层是GUI(图形化界面)和命令行。

而在最外面的一层,通常是用户层。

当你要执行某种指令的时候,你通常是和外壳程序交谈, 然后外壳程序再转交给内核,如果内核无法执行,那就会报错,通过外壳程序告诉你,执行失败。

外壳程序是什么?

从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

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

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。

shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

为什么有外壳程序?

这个原因有很多,但是最主要的还是以下两点:

  1. 用户不善于和内核打交道
  2. shell 外壳的存在,可以对请求进行合法性检查,变相的保护OS

shell 外壳一般做什么?

在Linux中,一般会通过bash创建子进程,( bash 是具体的外壳程序,shell 是统称)这个子进程会帮助用户进行命令行解释,bash 只要进行等待用户输入即可。

在Linux中,如果你是管理员账户,命令提示符的最后一个通常是 "#",如果你是普通用户,这里则会显示"$"。

权限的概念

什么是权限?

其实不妨从生活中想想,哪些事情是有权限的事情,哪些事情是没权限的事情?

最典型的,莫过于各大视频平台的视频vip,无论是爱奇艺,优酷,腾讯视频。有vip就有权限看对应的资源,没有vip就没法看对应的资源。

除此之外,还有门禁,进入宿舍的时候,要刷脸啊,不是这栋楼的就没有权限进入。

所以什么是权限呢?

权限就是通过一定的条件,拦住一部分人,给另一部分人权利,来访问某种资源

这个世界上大家都能做的工作,可能就不会有权限的概念。我们从来没有听过说,你不能呼吸,你没有呼吸的权力,权限一定是一部分人有,一部分人没有,所以才会产生权限这种概念。

权限决定的是有无,能还是不能的问题。

权限的本质

要想探究清楚,权限的本质,还得从例子上入手

例子:我能看vip,你看不了,所以权限一定和人有关。

例子:我是爱奇艺的svip,但是为什么不能让我刷题?

我是leetcode会员,但是为什么不让我看视频?

说明,权限的本质不仅和 有关,还和事物的属性有关。

我们还可以通过下述例子还探讨本质:

例子:你叫张三,你能看爱奇艺vip会员视频,是因为你叫张三吗?还是因为你是会员身份?你能进到A公司,是因为你叫张三,还是因为你是A公司员工?你能进学校,是因为你叫张三,还是因为你是该学校的学生?

实际上,这个人是一个角色。权限是用来限定某种角色的,不是限制某个人的。

Linux中的用户

Linux下有两种用户:超级用户(root)、普通用户。

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

我们在前几篇的学习中,最经常用的还是 root 用户 。

root 是超级管理员,它的特点是不受权限约束。

用户分为root账户和普通用户,root账户是不受权限约束的,也就是说,换句话说,它几乎对任何事情都有权限,下一篇我们会证明它,以及我们还会证明有权限和没权限什么概念。以及它在Linux中的表现是什么?甚至还要再去理解,为什么Linux要设计权限?

如何互相身份互换?

这里为了演示,我特地添加了一个用户

adduser 用户名

这是我新建的用户

💫💫指令:su

💫💫功能:su转换成root 账户。ctrl + d 转换成普通用户。

如果你是直接以普通用户登录,那么普通用户变成root,这里要输root的密码。在登Linux的时候,root账户要有密码,普通账户也要输密码。

建议:

设置一样的,用久了,不知道谁是谁的密码了。

我们可以在/home下查看,我们的用户。

你想变成普通用户,直接 su + 用户名即可。

💫💫指令:su -

💫💫功能:su 和 su - 都可以进行root的登陆,他们两个之间是有区别的,前面的su 是直接转变身份为root,后面一个则是变成root身份

我们可以通过命令提示符,看出来su - 的最直接标识还是 "$"。

权限是限制普通人的,而root 有很多权限,是制定规则的人。、

sudo

我不想直接变成root,但是我就是想以root的身份执行一个工作?

这时候就可以使用sudo来进行了,在前面我使用虚拟机的时候经常用到这一条指令。

接下来我们看,第一个root 是文件创建者,也就是谁创建的。输入的是谁的密码?

我们如果想创建文件,就必须获得权限,那这里我们使用sudo来获取权限,密码是输自己的密码。

5-10分钟内,不会过期,不同的系统有不同的时间限制。我们以超级管理员的身份执行了一条命令,我们把它称为指令提权,也就是把指令的权限往上提一提。

1.我要用root权限,为什么输入的是我的密码?我是普通用户,为什么输的是我的密码?

:一般普通用户是没有权限执行sudo的,只不过有的系统配置过了,默认会报错

首先默认云服务器是不行的,虚拟机是可以的 ,默认不让你sudo,那有的为什么能执行呢?根本原因就在于我们系统里会存在一种类似于白名单这样的功能,白名单是什么意思呢?在现实生活中呢,如果你是一名保安,你在处理任何人能不能进学校这件事情上,那么所有的保安都有三件事情要处理,

第一种,他必须得在自己的小本本上记录下来,就是不能查的人,比如校长,领导,我保安随便去把人家拦住。这些人一看我就不该拦他。这就叫做我们的白名单,也就是这批人我们是默认相信他的

作为一个合格的保安,我除了做这个事情,我还要选择哪些人绝对不能进来,这些人一看就是不好的社会青年,这种人我一看到就立马把他拦住了,那么这叫做黑名单

所以我们在作为保安来讲,必要的一个基本工作素养,就是黑名单和白名单,白名单就是这人我绝对相信他,可以让他过,黑名单就是不想让他过,直接拦住他。

当然,大部分情况下,保安不知道是相信你还是不相信你,所以会询问你,所以为什么在执行我们的sudo,允许我输入我的密码呢?

那么很简单,配置过用户,允许我直接执行。Linux是支持这种简单的白名单的策略的。

2.如何配置?

主要是因为要改配置文件。前期有很多文本编辑器权限不熟,容易导致系统挂掉。所以我们就暂时不做。


结尾:

本期就讲解到这,下一期我们会继续本篇内容,讲解Linux中的另一种用户,以及组的概念和Linux的文件权限。


🛎️感谢各位同伴的支持,本期权限专题就讲解到这啦,下期我们将讲解文件中的权限,如果你觉得写的不错的话,可以给个一键三连,点赞,收藏+评论,可以的话还希望点点关注,若有不足,欢迎各位在评论区讨论。

相关推荐
码农小韩1 小时前
基于Linux的C++学习——指针
linux·开发语言·c++·学习·算法
wdfk_prog1 小时前
[Linux]学习笔记系列 -- [fs]seq_file
linux·笔记·学习
Jay Chou why did2 小时前
wsl安装完无法进入wsl
linux
石头5303 小时前
Rocky Linux 9.6 docker k8s v1.23.17 kubeadm 高可用部署文档
linux
松涛和鸣3 小时前
49、智能电源箱项目技术栈解析
服务器·c语言·开发语言·http·html·php
凉、介3 小时前
SylixOS 中的 Unix Socket
服务器·c语言·笔记·学习·嵌入式·sylixos
RisunJan3 小时前
Linux命令-ipcs命令(报告进程间通信(IPC)设施状态的实用工具)
linux·运维·服务器
春日见4 小时前
控制算法:PP(纯跟踪)算法
linux·人工智能·驱动开发·算法·机器学习
HABuo4 小时前
【Linux进程(四)】进程切换&环境变量深入剖析
linux·运维·服务器·c语言·c++·ubuntu·centos