Shell运行原理以及Linux中的权限问题

目录

一、shell的运行原理

二、Linux权限的概念

2.1 用户账号切换

2.2 仅提升当前指令的权限

2.3 将普通用户添加到信任列表

三、Linux权限管理

3.1 文件访问者的分类

3.2 文件类型和访问权限

3.3 字符权限值的表示方法

3.3.1 字符表示方法

3.3.2 八进制表示法

3.4 文件访问权限的相关设置方法

3.4.1 修改文件的访问权限

3.4.2 修改文件的所有者

3.4.3 修改文件的所属组

3.4.4 修改文件掩码

3.5 目录的权限

3.6 粘滞位


一、shell的运行原理

Windows以图形化界面为交互方式,而Linux以命令行界面为交互方式。Windows和Linux的交互方式虽然不同,但本质上是一样的,图形化界面和命令行界面都是为了让用户进行相关操作,而图形化界面和命令行界面即"外壳程序"

Linux严格意义上说是一个操作系统内核,被称为"核心(kernel)",但一般用户不能直接使用kernel,而是通过kernel的"外壳程序",即Shell,来与kernel沟通

Shell即"命令行解释器":

  • 将使用者的命令翻译给核心(kernel)处理
  • 将核心的处理结果翻译给使用者

对比Windows中的图形化界面(GUI),操作Windows并不是直接操作Windows内核,而是通过图形接口,点击,从而完成操作。Shell对于Linux具有相同的作用,主要是对用户指令进行解析,解析后交给Linux内核,反馈结果再通过内核运行出结果,通过Shell解析给用户

Shell运行原理:

  • 创建子进程,让子进程进行命令行解释
  • 子进程出现任何问题,都不影响父进程Shell

对比到Windows中就是,每运行一个程序就是创建一个子进程,如:微信、QQ。这些子进程中任何一个进程出现问题,都不会影响父进程

注意: Shell只是所有外壳程序的统称。如:在CentOS 7中的外壳程序名为bash

二、Linux权限的概念

在Linux下有两种用户,分别是超级用户(root)和普通用户。超级用户可以在Linux下做任何事情,几乎不受限制,而普通用户一般仅能在自己的工作目录下(/home/xxx)工作,以及在系统上做有限的工作。可以认为,权限的概念是用来限制普通用户的,超级用户几乎不受限制

超级用户的命令提示符为"#" 

普通用户的命令提示符为"$" 

2.1 用户账号切换

 当权限不足时,需从普通用户切换为root用户

su 用户名

从普通用户切换为root用户,输入su root后,输入root账户密码即可 

从root账号切换为普通账号,不需输入密码

注意:

  • 从普通账号切换为root账号时,指令中的root可省略,因为root账号只有一个
  • 该指令也可以从一个普通用户切换为另一个普通用户,输入待切换用户的账号密码即可
  • 切换用户后,若想切回上次的用户,可通过Ctrl+D实现

2.2 仅提升当前指令的权限

在公司中大概率是不会拥有root账户的,但有时执行某些操作时权限不足,就需要有临时提升权限的方式

以普通用户的身份,修改另一个普通用户的密码

但并不是所用用户都可以使用sudo指令的 

上图提示tmp用户不存在sudoers文件中,所以指令的权限得不到提升,只有被root用户添加到信任列表后,才拥有提升指令权限的能力

2.3 将普通用户添加到信任列表

必须处于root账户下,才能进行该操作

使用vim /etc/sudoers指令打开配置文件,找到%wheel ALL=(ALL) ALL处,在后续按图中案例添加即可

添加完毕后,该用户就可以使用sudo指令,即拥有提升权限的能力了

三、Linux权限管理

3.1 文件访问者的分类

  • 文件和文件目录的所有者(文件拥有者
  • 文件拥有者所在的组的用户(文件所属组
  • 其他用户(other

注意:

  • 对于某一文件而言,其拥有者、所属组和other由超级用户(root)和普通用户所扮演
  • 在Linux中,所有用户都隶属于某一个组,哪怕这个组只有一个用户(此时该组就以该用户的用户名为组名)

所属组

在某个公司中有两个小组团队(A组、B组)在同一个Linux服务器上进行着同一款项目的开发(赛马模式),而你就是A组中的一员

若没有所属组的概念,那么创建了一个文件后,要么就是只有拥有者能看到,要么就是其他人都能看到。而在实际情况中,希望的是拥有者和所在小组的小组成员都能看到,其他人看不到。于是就有了所属组这个概念,可以将文件设置为拥有者和所属组可见,而other不可见。所以所属组的存在是为了更灵活的进行权限配置,满足团队协作

可以通过指令ll来查看某一文件或文件目录的拥有者和所属组

3.2 文件类型和访问权限

使用指令ll,可以看到前面有一串字符,这串字符就代表着该文件的类型和属性

这串字符由10个字符组成的。其中第一个字符所代表的就是该文件的文件类型

  • -:普通文件
  • d:目录
  • l:链接文件(类似于Windows中的快捷方式)
  • b:块设备文件(如硬盘、光驱等)
  • p:管道文件
  • c:字符设备文件
  • s:套接字文件

注意: 在Linux中,文件类型与文件后缀无关

剩下的9个字符每三个为一组,分别代表该文件相对于其拥有者、所属组以及other是否拥有某种属性

每一组的三个字符的第一个字符代表该文件是否具有可读属性,第二个代表是否具有可写属性,第三个代表是否具有可执行属性。若是具有可读属性,则第一个位置的字符为r;若是具有可写属性,则第二个位置的字符为w;若是具有可执行属性,则第三个位置的字符为x。若某一位置为字符 - ,则说明不具有对应位置的属性

举例

data.txt文件是一个普通文件,该文件的拥有者和所属组对其都是可读可写的,但该文件的other对其只有读的权力 

3.3 字符权限值的表示方法

3.3.1 字符表示方法

ll指令打印文件权限值时的表示方法就是字符表示法

3.3.2 八进制表示法

字符表示法中的每一个字符所在位置所表示的结果只有两种可能(真或假),因此可将这三个字符换为三个二进制位,进而换为一个八进制数进行表示

3.4 文件访问权限的相关设置方法

3.4.1 修改文件的访问权限

符号设定法

chmod [who] [+-=] [mode] 文件名

常用选项: -R 递归修改目录文件的权限

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限

mode

  • u:拥有者
  • g:所属组
  • o:other
  • a:所有用户

向tmp.txt文件添加other可写

 数字设定法

chmod [numbers] filename

将对应的八进制数转换为二进制,进而设置对应权限值

  • 0:没有权限
  • 1:执行权限
  • 2:写权限
  • 4:读权限

给stat1.cpp文件设置权限为-rw-rw-r--

3.4.2 修改文件的所有者

chown 文件所有者 文件名

常用选项: -R 递归修改目录文件的拥有者 

修改stat1.cpp文件的所有者为gg-bruse

注意: 修改文件的拥有者需root用户进行操作,若是普通用户则需进行权限提升

3.4.3 修改文件的所属组

chown 文件所有者:文件所属组 文件名
chgrp 文件所属组 文件名

修改stat1.cpp文件的所有者和所属组为gg-bruse

修改文件stat1.cpp的文件所属组为gg-bruse

3.4.4 修改文件掩码

查看新建的文件和目录,都有各自默认的权限

新建文件的默认权限为0666,新建目录的默认权限为0777。其中第一位的0与特殊权限有关,这里不必深究,而后面三位就是权限的八进制数值表示方法,将其翻译为字符表示方法

但实际上创建出来的文件和目录的权限值与翻译出来的值并不相同,原因就是创建文件和目录的时候还受到umask的影响,假设默认权限是mask,则实际创建出来的文件权限是:mask&(~umask)

umask 权限值 #使用umask指令可以查看或修改文件掩码

实际创建出来的文件和目录的权限值还需进行进一步换算才能得出。首先将掩码的的后三位八进制换算为二进制,然后对其按位取反

然后将之前的新建文件的默认权限值和新建目录的默认权限值分别与其进行按位与操作,得到的就是我们创建出来的文件和目录的权限值

也可以理解为在umask中出现的权限位,在最终权限中都不会出现

注意: 超级用户的默认掩码为0022,普通用户的默认掩码为0002

3.5 目录的权限

  • 可读权限: 若用户没有该目录的可读权限,则无法通过ls指令查看目录中的文件内容
  • 可写权限: 若用户没有该目录的可写权限,则无法通过一系列指令在目录中创建文件或删除文件
  • 可执行权限: 若用户没有该目录的可执行权限,则无法通过cd指令进入到目录中

此时就出现了一个问题:只要用户拥有某目录的可写权限,就可以删除该目录中的文件,而不论该用户是否拥有该文件的可写权限,这显然是不合理的。如下图,拥有当前目录的写权限,并不拥有test.txt文件的写权限,却依然删除成功

为了解决这个不合理的问题,Linux引入了粘滞位的概念

3.6 粘滞位

chmod +t 目录名

将某一个目录加上粘滞位后,该目录的权限值的最后一位变为字符"t"

此时另一个用户就算有该目录的可写权限,也无法删除该目录下的文件

当一个目录被设置为粘滞位,则该目录下的文件只能由:

  • 超级用户删除
  • 该目录的拥有者删除
  • 该文件的拥有者删除。

注意: 虽然目录被加上了粘滞位,但若用户有该目录的可写权限,不影响其在该目录下创建文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/3625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XSS 攻击的检测和修复方法

XSS 攻击的检测和修复方法 XSS(Cross-Site Scripting)攻击是一种最为常见和危险的 Web 攻击,即攻击者通过在 Web 页面中注入恶意代码,使得用户在访问该页面时,恶意代码被执行,从而导致用户信息泄露、账户被…

BUFG/BUFGCE/BUFH/BUFHCE/BUFH/BUFGHCE/BUFMR/BUFMRCE/BUFR/IBUF/IBUFDS

本文对BUFG/BUFGCE/BUFH/BUFHCE简单介绍,便于后续查看。 原语的使用:在vivado中找到所要用的原语,直接将其实例化到设计中即可。 文章目录 BUFGBUFGCEBUFHBUFHCEBUFMRBUFRBUFMRCEIBUFIBUFDS 下图为 7 系列 FPGA 时钟架构图: BU…

Appium+python自动化(十二)- Android UIAutomator终极定位凶器(超详解)

简介 乍眼一看,小伙伴们觉得这部分其实在异性兄弟那里就做过介绍和分享了,其实不然,上次介绍和分享的大哥是uiautomatorviewer,是一款定位工具。今天介绍的是一个java库,提供执行自动化测试的各种API。 Android团队在4…

数据结构(王道)——数据结构之 二叉树

一、数据结构之 二叉树概念: 特殊的二叉树结构: 满二叉树完全二叉树 二叉排序树 平衡二叉树 二叉树基本概念总结: 二、二叉树的常用性质: 1、【二叉树】的叶子结点比二分支结点多一个 2、【m叉树】的第i层至多有m^(i-1)个结点 3、…

关于Qt For android第一次编译时出现的问题

搞了三四天,搞的快崩溃了,问题提示为 FAILURE: Build failed with an exception.* What went wrong: A problem occurred configuring root project android-build. > Could not resolve all artifacts for configuration :classpath.> Could not…

pytorch 2.0初探:和pytorch 1.13的速度对比

看到pytorch2.0出来了,而且宣传提速明显,一行代码即可提速43%左右: compiled_model torch.compile(model) We then measure speedups and validate accuracy across these models. Since speedups can be dependent on data-type, we measu…

真正的理解WPF中的TemplatedParent

童鞋们在WPF中经常看到 TemplatedParent ,或者经常看到下面的用法: {Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content} 是不是看的一脸蒙圈? 先看官方文档: 意思是 和这个控件的 模板上的 父亲,如果这个控件不是模板创建的,那么这个值就…

CSS 渐变边框及动画

转载请注明出处,点击此处 查看更多精彩内容 用 CSS 实现渐变边框及动画,下面对关键点进行解释说明,查看完整代码及预览效果请 点击这里。 简单说明原理:使用伪元素 ::before 绘制一个渐变色,然后使用伪元素 ::after 绘…

16. 存储过程和存储函数

文章目录 1.存储过程和存储函数2.创建和使用存储过程2.1 语法:2.2 第一个存储过程,打印hello world2.3 调用语法2.4 带参数的存储过程2.5 调试存储过程 3.创建和使用存储函数3.1 存储函数定义3.2 存储函数语法:3.3 存储函数案例: …

Mybatis操作数据库执行流程的先后顺序是怎样的?

MyBatis是一个支持普通SQL查询、存储及高级映射的持久层框架,它几乎消除了JDBC的冗余代码。使Java开发人员可以使用面向对象的编程思想来操作数据库。对于MyBatis的工作原理和操作流程的理解,我们先来看下面的工作流程图。 MaBatis的工作流程 在上图中…

为什么弹性内容交付网络是决定网站性能的关键

如今的用户对于所访问网站都对网站有自己的标准,他们期望访问的网站性能良好,具有快速的页面加载时间和易于访问、新鲜且动态的内容,同时他们还希望享受无缝且安全的体验,无需停机或内容访问受到限制。比如微博等平台每次在网络热…

布隆过滤器在海量数据去重验证中应用

布隆过滤器在海量数据去重验证中应用 文章目录 布隆过滤器在海量数据去重验证中应用引子面试结束级方案——从数据库中取新手级方案——利用redis的set数据结构专业级方案——利用布隆过滤器 布隆过滤器基本概念优点缺点布隆过滤器的数据结构布隆过滤器的工作流程布隆过滤器的优…

数据库应用:MySQL备份与恢复

目录 一、理论 1.数据备份 2.完全备份与恢复 3.完全备份与恢复应用 4.增量备份与恢复 5.增量备份与恢复应用 6.使用脚本备份 7.日志管理 二、实验 1.完全备份与恢复 2.增量备份与恢复 3.使用脚本备份 三、问题 1.mysqldump报错 四、总结 一、理论 1.数据备份 …

企业电子招标采购系统源码Spring Cloud + Spring Boot + MybatisPlus + 前后端分离 + 二次开发

项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审…

(ceph)CephFS 文件系统 MDS接口

创建 CephFS 文件系统 MDS 接口 //服务端操作 1)在管理节点创建 mds 服务 cd /etc/ceph ceph-deploy mds create node01 node02 node032)查看各个节点的 mds 服务 ssh rootnode01 systemctl status ceph-mdsnode01 ssh rootnode02 systemctl status cep…

浙大数据结构第三周之03-树3 Tree Traversals Again

题目详情: An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to 6) is traversed, the stack operations are: push(1); push(2)…

怎么对XMind思维导图加密?

在现代社会中,信息安全变得越来越重要。对于那些使用XMind思维导图来组织和管理重要信息的人来说,保护思维导图中的内容免受未经授权的访问变得至关重要。本文将介绍如何加密XMind思维导图,以确保您的信息安全。 什么是XMind思维导图&#x…

什么是从人类反馈中强化学习(RLHF)?

目录 一、什么是RLHF? 二、语言作为强化学习问题 三、用于语言模型的RLHF 四、ChatGPT如何使用RLHF 五、RLHF对语言模型的限制 自从OpenAI公司发布ChatGPT以来,人们对大型语言模型(LLM)的这一重大进步感到兴奋。虽然ChatGPT与其他最先进的大型语言模型大小相同…

数据可视化——根据提供的数据,将数据经过处理后以折线图的形式展现

文章目录 前言处理数据获取数据筛选数据将JSON数据转换为Python数据筛选出横坐标数据和纵坐标数据 根据处理后的数据绘制折线图整体代码展示 前言 前面我们学习了如何使用 pyecharts 模块绘制简单的折线图,那么今天我将为大家分享,如何根据提供的数据将…

【JavaScript 03】语句 变量 变量提升 标识符 注释 区块 作用域 条件语句 循环语句 break continue 标签

JS 语句变量变量提升标识符注释区块条件语句ifif...elseswitch三元运算符 ?: 循环语句whilefordo...whilebreak语句 and continue语句标签 语句 JS程序的执行单位是行(line) **语句(statement)**是为了完成特定任务而进行的操作…