Linux·权限与工具(上)

1. shell命令以及运行原理

        Linux严格意义上来说是一个操作系统,我们称之为 "核心(kernel)" ,但我们一般的用户不呢个直接使用到核心,因为不会用。所以开发者在核心外面封装了一层 "外壳(shell)" 程序,来与核心沟通。

                                

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

                1. 将使用者的命令翻译给核心处理

                2. 将核心的处理结果翻译给使用者

        就比如在windows操作系统中,我们的点击操作并不是直接作用在内核上,而是将命令交给shell,shell再翻译给内核,内核处理完之后将结果返回给shell,shell再翻译给用户,比如完成了一个窗口的关闭。

        外壳程序在翻译命令的时候为了保证稳定性,操作系统不会崩掉。并不是自己上手翻译,而是创建子进程,让子进程进行命令行解释。因为如果外壳程序出问题了,即便内核操作系统还活着也用不了。

        广义上我们经常说的操作系统是操作系统内核+外壳,狭义上的操作系统就单只内核。

        在Linux中的外壳程序叫bash,它是一个可执行程序

                

2. Linux权限的概念

2.1 用户设置

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

                超级用户:可以在Linux系统下做任何事情,不受限制

                普通用户:在权限允许中做事情

                超级用户的命令提示符是 "#" ,普通用户命令提示符是 "$"

        下面我们使用 adduser 新建一个普通用户,passed 用来设置用户密码

        在设置密码的时候它是没有显示的,但是我们是敲进去东西了,敲就好了。我这个密码设置的有点简单,所以报了一下,不用管他。

        删除用户的时候 userdel -r 用户名 这里不展示删除了

        切换用户

        语法:su 用户名

        例如要是从root用户切换成普通用户张三,可以直接 su zhangsan 。如果想从普通用户切换到root用户,要 su root(root可以省略) ,再输入root的密码。

        切换用户就是让另一个用户过来继续操作,而不是进入另一个用户的家目录中。

        退出用户的话就是用 ctrl+d

        暂时提权

        语法:sudo 命令

        sudo命令可以暂时提升普通用户的权限至root执行命令,sudo命令后面直接加指令就行,系统会让用户输入目前账户的密码。

        不过这个操作要求该用户在系统的信任名单 /etc/sudoers 中,如果没有在可以跟着我设置一下。如果看不懂可以先不设置,我会在 权限与工具(下) 中详细讲解vim工具的用法,看完下再回来配置这个白名单也行。

        先进入root账号,输入指令 vim /etc/sudoers ,此时会进入到如下页面

        此时按 shift + g 也就是大写的 G

        来到这里之后按方向键,使光标移动到root的位置

        然后按 yy(连按两次y) p(按一次p) ,可能会报警告不用管,这个文件的权限很高,即使是root操作也会报警告,不过root可以操作这个文件就行

        可以看到root那一行被复制出来了一行,接下来按 i ,然后用方向键和backspace键将第二行的 root 单词删掉,换成我们信任的用户名

        接下来按 ESC键 然后按 shif+; 也就是按出来一个 : 最后敲 wq! 回车

        此时该用户就可以使用sudo指令了

2.2 Linux权限管理

        一个文件的权限访问者文件自身属性的结合体

        1. 文件访问者的分类

                文件的所有者 (有权访问文件) user

                文件的所属组 (有权访问文件) group

                其他用户 (无权访问文件) other

        如果煤油刻意设定组,则每个用户自成一组,组内的成员都可以访问这个文件,但是其他用户不能访问,这种设定是为了更细粒度的权限管理。

        2. 文件类型和访问权限

        头10个字符是文件的权限属性,那个数字之后再说,后面内容所对应的属性我都用不同颜色标注出来了。

        权限属性中第一个字符是文件类型,d 是目录,- 是普通文件。之后3个字符为一组,分别表示拥有者、所属组、其他人的权限属性。

        基本全权限:

        r 可读        w 可写        x 可执行        - 没有该权限

        文件类型:

                d:文件夹
                -:普通文件
                l:软链接(类似Windows的快捷方式)
                b:块设备文件(例如硬盘、光驱等)
                p:管道文件
                c:字符设备文件(例如屏幕等串口设备)
                s:套接口文件

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

2.3.1 chmod 访问权限

        语法:chmod [选项] 权限 文件名

        功能:设置文件的访问权限

        说明:只有文件的拥有者和root才可以改变文件的权限,这个参数选项我们一般用不到,除非可能用到 R 递归修改目录文件的权限

2.3.1.1 chmod 命令权限值的格式:

                用户表示符 +/- 权限字符

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

                用户符号:
                u:拥有者
                g:拥有者同组用
                o:其它用户
                a:所有用户

                        

        上面这段代码中我们给拥有者添加了可执行的权限,让这个文件看起来好像可以执行了,但是因为文件的内容就是不可执行的,因此我们即使 ./file.txt 尝试执行也无法成功。        

                        

        我们还可以通过用 , 逗号隔开的方式一次操作几个权限。

        这里要注意身份认证只会执行一次,就是说现在拥有者和组都是atlanteep,我只取消了拥有者的写权限,但是组的我加入了写权限,可是我们还是无法向文件中写入了。就是因为身份认证只会执行一次,检查到我的身份是atlanteep那么就直接看权限,禁止写入,那我的组即使能写,我也不能写了。

        ​​​​​​​        ​​​​​​​        

        但这里有个例外,就是超级用户可以无视文件权限限制进行操作,这也是我这里换了个账号展示的原因。

        ​​​​​​​                

        上面这段代码红框中展示了 a 可以进行三个人同时操作,但是因为这个是root账号,所以即便没有写权限了,root也能往文件中写内容。

2.3.1.2 chmod 三位8进制数字修改权限

        如果我们只看一组权限,分别是rwx,关闭或打开用二进制0、1表示,那么都打开就是 111 用8进制表示就是7,只关闭x就是 110 用八进制表示就是6,也就是说一个八进制数字就可以表示一个身份的权限组,三个八进制数字就可以完成一个文件权限属性的修改。

        ​​​​​​​        ​​​​​​​        

2.3.2 chown 修改拥有者

        语法:chown [-选项] 用户名 文件名

        这个选项一般也是 -R 递归更改目录用的

        

2.3.3 chgrp 修改所属组

        语法:chgrp [-选项] 组名 文件名

        同理,这个选项一般也是 -R 递归更改目录用的

        

        这里要说一下普通用户不可随意将文件的拥有者和所属组进行更改,必须要sudo到root账号进行提权更改。

2.4 目录的权限

        到这里我们对于权限以及身份有了较为清晰的认知,因此后面我们基本上都使用普通用户进行操作。

        可读权限:

                

        我们关闭拥有者的可读权限之后就不能看这个目录底下都有什么,但是可以进入目录,也可以在目录中写东西,创建文件或者目录,这个目录中的目录是可以正常查看的。

        可写权限:

        ​​​​​​​        

        我们关闭拥有者的可写权限之后就不能在目录下写入新的文件或者目录,但是可以正常进入和查看目录。

        可执行权限

        ​​​​​​​        

        我们关闭拥有者的可执行权限之后就不能进入这个文件了。

2.5 umask 权限掩码

        我们把刚才在lesson4中建的东西都删除,限制重新创建一个目录和一个文件

        我们观察刚新建出来的默认目录权限码值是775,文件权限码值是664。这个默认的码是怎么来的,下面我们不卖关子直接开讲。

        一个目录的起始权限码其实是777,因为目录需要可读可写可执行;一个文件的起始权限码其实是666,因为文件不可执行但可读可写。那么在用户使用的时候可能不希望自己的东西被other读取,所以每次在创建好文件或目录之后都要修改一下权限属性,那么Linux系统为了避免这种繁琐的事情出现就搞了一个权限掩码。

        ​​​​​​​        

        可以看到我的权限掩码是0002,这个玩意我们只看后三位。

        权限码 = 权限掩码按位取反 & 起始权限码

        

        这样就得到了775 664,如果你对这个权限码不满意我们还可以更改,比如:

        

        我们将权限掩码修改成077后就只有我们自己可以对文件有可执行和读写权限啦。

2.6 粘滞位

        在正式进入粘滞位之前我们先设置一个小情景。比如说现在我和张三向搞一个共享目录,这个目录我们两个都能进去进行设置文件等操作。但是这个共享目录肯定不能建在我们中任何一个人的家目录下:

        ​​​​​​​        

        可以看到家目录是不允许除自己意外的任何人访问的,root除外。因此我们决定把这个共享目录设置在根目录下

        ​​​​​​​        ​​​​​​​        

        普通用户是禁止配置根目录的,因此我们只能把root叫来帮忙建一下共享目录,此时还要把目录对于其他用户的w权限放开,这样我们才能在目录中设置文件。

        ​​​​​​​        

        设置好之后我们叫张三上号

        ​​​​​​​        

        现在张三也可以对这个文件进行查看和更改,但是其他人不行,比如现在又来了个李四

        ​​​​​​​        

        他看见我和张三共享文件不带他,于是他很生气就把这个文件删除了。

        ​​​​​​​        

        可以看到李四作为other虽然没有权限更改文件内容,但他可以直接删除文件,这个删除文件或添加文件的权限与文件本身无关,而是在于文件所在目录的权限情况

        到这里我和张三就傻眼了,于是为了避免这种情况的再发生Linux给出了一个解决方案:粘滞位

        就是在目录中加上 t 选项就可以保护目录里的文件,使得有粘滞位保护的目录中的文件,只能由:超级管理员、目录所有者、文件所有者删除 。

        我们用root账号给这个目录加上粘滞位:

        ​​​​​​​        

        此时李四再想删出文件就没有权限了:

        ​​​​​​​        

        也就是说目录给了other w 权限后还可以再加上粘滞位 t 防止有人乱搞。

        到此Linux中的权限全部讲解完了,下节我们将讲解Linux中的工具好让我们把代码写起来。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

24暑假算法刷题 | Day15 | LeetCode 110. 平衡二叉树,257. 二叉树的所有路径,404. 左叶子之和,222. 完全二叉树的节点个数

目录 110. 平衡二叉树题目描述题解 257. 二叉树的所有路径题目描述题解 404. 左叶子之和题目描述题解 222. 完全二叉树的节点个数题目描述题解 110. 平衡二叉树 点此跳转题目链接 题目描述 给定一个二叉树,判断它是否是平衡二叉树 平衡二叉树 是指该树所有节点的…

VMware Vsphere创建虚拟机

作者:红米 一、上传系统镜像 1、打开数据中心 2、新建文件夹,存放镜像 3、点击上传文件按钮 4、找到本地镜像上传 二、安装虚拟机 1、创建虚拟机 2、选择创建类型 3、为虚拟机命名并选择虚拟机安装的所在位置 4、选择计算资源 5、选择存储 6、选择兼容…

Linux系统部署MySQL数据库

1.Linux插入光盘,使用df-h获取光盘信息,默认/dev/sr0文件为光盘文件 使用命令 mount -o ro /dev/sr0 /media进行手动挂载 mount -o ro /dev/sr0 /media 2.进入cd /etc/yum.repos.d目录 编辑配置yum库,编辑vim yum.repos [BaseOS] nameba…

什么是IoC控制反转思想?

目录 一.什么是IoC? IoC核心思想 一.什么是IoC? IoC(Inversion of Control)即控制反转,这里的控制是代表控制权的意思,IoC是一种编程思想,旨在降低代码之间的耦合度、降低代码的维护成本。…

算法力扣刷题记录 五十二【617.合并二叉树】

前言 二叉树篇,继续。 记录 五十二【617.合并二叉树】 一、题目阅读 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要…

算法day04 位运算 插入排序 二分法 对数器

位运算: 1)有一个数组只包含这样的数,有几个数出现偶数次,有1个数出现奇数次,要求时间复杂度不超过o(n),怎么求出现奇数次的数。 使用 ^ 异或运算整个数组,偶数次运算结果为0,只留下最后一个奇数次的数。 …

【元器件】二极管、三极管、MOS管

二极管 D 二极管是一种具有两个电极(即正极和负极)的电子器件。它是一种非线性元件,具有许多重要的功能和应用 三极管 Q 概述 一种控制电流的半导体器件,其作用是把微弱信号放大成幅度值较大的电信号,也用作无触点开…

鸿蒙语言基础类库:【@system.prompt (弹窗)】

弹窗 说明: 从API Version 8 开始,该接口不再维护,推荐使用新接口[ohos.prompt]。本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import prompt from system.prompt;…

6个高效再利用的UI作品集设计模板

UI 作品集是指用户界面设计师的个人作品集。它展示了设计师的设计能力、技巧和风格,也是充分展示他们设计能力的证明。优秀的UI 作品集应具有简洁明了、美观大方、良好的互动体验和明确的目标。本文将从两个方面的介绍 Ui 作品集模板的全部内容:UI 作品集…

JMX 反序列化漏洞

前言 前段时间看到普元 EOS Platform 爆了这个洞,Apache James,Kafka-UI 都爆了这几个洞,所以决定系统来学习一下这个漏洞点。 JMX 基础 JMX 前置知识 JMX(Java Management Extensions,即 Java 管理扩展&#xff0…

叉车指纹一键启动/熄火车辆,“锁”住叉车安全

在现代工业领域,叉车作为重要的物流搬运工具,其安全性和便捷性一直是人们关注的焦点。为此,我们引入了一项技术——叉车指纹一键启动/熄火系统,真正实现了叉车安全的“锁定”。 这项技术不仅仅是简单的启动或关闭车辆的手段&#…

前端:Vue学习-2

前端:Vue学习-2 1. vue的生命周期2. 工程化开发和脚手架Vue CLI2.1 组件化开发2.2 scoped解决样式冲突2.3 data是一个函数2.4 组件通信2.5 非父子通信- event bus事件,provide&inject 3.v-model原理->实现父子组件双向绑定4. sync 修饰符->实现…

centos7 中tcp连接问题

centos对telnet过来的包没有响应 通过tcpdump查看到的TCP连接的不正常的报文,如下 通过tcpdump查看到的TCP连接的正常的报文 ,如下 解决方法: cat /proc/sys/net/ipv4/tcp_tw_recycle cat /proc/sys/net/ipv4/tcp_timestamps 如果两个参数…

【Java算法】前缀和 下

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【算法工作坊】算法实战揭秘 一.连续数组 题目链接&#xff1a;525.连续数组 代码 public int findMaxLength(int[] nums) {HashMap<Integer,Integer> mapnew HashMap<>();map.put(0,-1);…

【系统架构设计师】十三、软件可靠性(基本概念|软件可靠性建模)

目录 一、基本概念 1.1 定义 1.2 软件可靠性的定量描述 1.3 可靠性测试的意义 1.4 广义的软件可靠性测试和狭义的软件可靠性测试 二、软件可靠性建模 2.1 可靠性模型的组成 2.2 可靠性模型的共同假设 2.3 可靠性模型的重要特性 2.4 可靠性建模方法 往期推荐 历年真…

SD-WAN组网搭建5G备份方案实现方式

SD-WAN&#xff08;Software-Defined Wide Area Network&#xff0c;软件定义广域网&#xff09;结合5G作为备份链路是现代企业网络弹性策略的一部分&#xff0c;尤其是在需要高可用性和快速故障切换的场景下。以下是实现SD-WAN组网并集成5G备份方案的一般步骤&#xff1a; 1. …

‍我想我大抵是疯了,我喜欢上了写单元测试

前言 大家好我是聪。相信有不少的小伙伴喜欢写代码&#xff0c;但是对于单元测试这些反而觉得多此一举&#xff0c;想着我都在接口文档测过了&#xff01;还要写什么单元测试&#xff01;写不了一点&#xff01;&#xff01; 由于本人也是一个小小程序猿&#x1f649;&#xf…

Python | 分享8个Excel自动化脚本,一定有你用得上的!

本文将介绍8个常用的Python脚本&#xff0c;帮助你轻松应对Excel的日常操作。那话不多说&#xff0c;开始吧&#xff01; 1. 安装所需的Python库 在开始之前&#xff0c;我们需要安装一些Python库来操作Excel文件。以下是需要安装的库&#xff1a; pandas&#xff1a;用于数据…

Java 实验七:集合的使用

一、实验目的 1、理解Java集合框架的特点、接口与类之间的关系&#xff1b; 2、掌握Java集合框架的List接口&#xff0c;以及List接口的重要实现类LinkedList、ArrayList&#xff1b; 3、掌握Java集合框架的Set、SortedSet接口&#xff0c;以及重要实现类HashSet 与 TreeSet…

活动回顾 | AutoMQ 联合 GreptimeDB 共同探讨新能源汽车数据基础设施

7 月 13 日&#xff0c;AutoMQ 携手 GreptimeDB“新能源汽车数据基础设施” 主题 meetup 在上海圆满落幕。本次论坛多角度探讨如何通过创新的数据管理和存储架构&#xff0c;提升汽车系统的性能、安全性和可靠性&#xff0c;从而驱动行业的持续发展和创新&#xff0c;涵盖 Auto…