Linux·权限与工具(上)

news2024/9/19 10:42:24

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://www.coloradmin.cn/o/1933754.html

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

相关文章

某安居客滑块验证码

⚠️前言⚠️ 本文仅用于学术交流。 学习探讨逆向知识,欢迎私信共享学习心得。 如有侵权,联系博主删除。 请勿商用,否则后果自负。 网址 aHR0cHM6Ly93d3cuYW5qdWtlLmNvbS9jYXB0Y2hhLXZlcmlmeS8/Y2FsbGJhY2s9c2hpZWxkJmZyb209YW50aXNwYW0 …

数据包的跨层封装

首先,我们先简单地分析一下数据包的组成结构: 如图 数据包简略地分为以下几层: 二层:封装MAC地址(数据链路层) 三层:封装IP地址 — 表明源IP和目标IP,主要用于路由器之间的信息转发…

SAPUI5基础知识15 - 理解控件的本质

1. 背景 经过一系列的练习,通过不同的SAPUI5控件,我们完成了对应用程序界面的初步设计,在本篇博客中,让我们一起总结下SAPUI5控件的相关知识点,更深入地理解SAPUI5控件的本质。 通常而言,一个典型UI5应用…

FastAPI 学习之路(五十七)校验是否登陆

在之前的分享的中,产生了token,用于做登录的认证,那么产生了token后,登陆携带了token,我们如何校验呢? 先来梳理下逻辑: 1. 调用登录接口,产生token 2.调用依赖登录的接口&#xff…

1.CATIA:CAA调用Excel接口

生成调用Excel的头文件 参考如下进行excel头文件的生成: 如何使用vs2022通过excel.exe生成VC、C++能够使用的头文件 添加如下的接口: #include "CApplication.h" #include "CWorkbook.h" #include "CWorkbooks.h" #include "CWorkshee…

Linux——文件目录指令、时间日期指令、搜索查找指令、压缩解压指令

目录 文件目录指令 pwd & ls 查看当前工作目录&显示当前目录所有文件及目录 cd 切换目录 mkdir & rmdir 创建&删除目录 touch 创建空文件 cp 拷贝文件/文件夹指令 rm 删除文件或文件夹 mv 移动或重命名文件 cat 查看文件 more指令 less 查看文件内容…

驱动LSM6DS3TR-C实现高效运动检测与数据采集(8)----中断获取FIFO数据并应用MotionFX库解析空间坐标

驱动LSM6DS3TR-C实现高效运动检测与数据采集.8--中断获取FIFO数据并应用MotionFX库解析空间坐标 概述视频教学样品申请源码下载开启LED开启INT中断参考驱动程序中断读取传感器数据主程序演示 概述 本文将探讨如何使用中断机制获取FIFO数据并应用MotionFX库解析空间坐标。Motio…

CIS光生电荷

文章目录 CIS基础光电效应光的吸收最大光敏度的计算 CIS基础 CIS光信号转电信号:CIS图像传感器主要用来把直接发射或物体反射的光子组成的图像转换成电信号。在积分时间内,图像传感器吸收光子并记录电信号,确定积分时间内每一个像素接收到的…

昇思25天学习打卡营第15天|munger85

K近邻算法实现红酒聚类 现在数据集这个就是红酒的分类的数据集红酒每一个都会有很多的属性有三个属性下载数据集,这个是红酒的分类的数据集,红酒每一个都会有很多的属性,有三个属性。这十三个属性就可以用来分辨它是哪一个13个属性就可以用来…

【机器学习】Grid Search: 一种系统性的超参数优化方法

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Grid Search: 一种系统性的超参数优化方法引言什么是Grid Search?Gr…

【机器学习】机器学习与图像分类的融合应用与性能优化新探索

文章目录 引言第一章:机器学习在图像分类中的应用1.1 数据预处理1.1.1 数据清洗1.1.2 数据归一化1.1.3 数据增强 1.2 模型选择1.2.1 卷积神经网络1.2.2 迁移学习1.2.3 混合模型 1.3 模型训练1.3.1 梯度下降1.3.2 随机梯度下降1.3.3 Adam优化器 1.4 模型评估与性能优…

超高性价比降压型DC-DC / YB2419 电源解决方案行业多领域适用

一上车,手机电量告急,这可是出行的大忌! 别急,要知道,在这个快节奏的时代,时间就是金钱,谁也不想在充电这件事上浪费时间。这个时候需要车载充电器来拯救你的电池焦虑症! 还能智能匹配不同手机品牌&#xf…

gltf模型加载 与3d背景贴图

Poly Haveny 用于3d模型跟贴图下载资源 Sketchfab 里面有免费的模型 模型放到public里面 const loader new GLTFLoader()// 加载GLTF模型loader.load(/scene.gltf,(gltf) > {// 将加载的模型添加到场景中scene.add(gltf.scene)// 现在你可以开始渲染循环了let angle …

基于Java的疫情防控期间某村外出务工人员信息管理系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:Java MySQL 工具:Eclipse、MySQL环境配置工具 系统展示 首页 用户管理界面 行程分析…

学懂C语言(四):C语言数据类型

目录 一、数据类型分类 二、存储大小和值范围 三、类型转换 在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。 一、数据类型分类 C 中的类型可分为以下几…

记录些MySQL题集(7)

1. 什么是SQL? SQL 的全称是 Structured Query Language,即结构化查询语言,它是用来与关系型数据库管理系统(RDBMS)交互的语言,包括从表中获取、更新、插入和删除数据,也就是我们常说的增删改查…

11 网络编程、反射

文章目录 网络编程1、网络的相关概念2、InetAddress 类3、Socket4、TCP 网络通信编程5、UDP 网络通信编程 反射1、反射机制2、Class 类3、类加载4、通过反射获取类的结构信息5、通过反射创建对象6、通过反射访问类中的成员 网络编程 1、网络的相关概念 网络通信 网络 ip 地…

Qt-事件与信号

事件和信号的区别在于,事件通常是由窗口系统或应用程序产生的,信号则是Qt定义或用户自定义的。Qt为界面组件定义的信号往往通常是对事件的封装,如QPushButton的clicked()信号可以看做对QEvent::MouseButtonRelease类事件的封装。 在使用界面组…

vue、js截取视频任意一帧图片

html有本地上传替换部分&#xff0c;可以不看 原理&#xff1a;通过video标签对视频进行加载&#xff0c;随后使用canvas对截取的视频帧生成需要的图片 <template> <el-row :gutter"18" class"preview-video"><h4>视频预览<span&…

灵雀云AML:赋能金融AI,构建数智时代核心竞争力

在人工智能&#xff08;AI&#xff09;技术的迅猛发展中&#xff0c;金融行业正迈入变革的新时代。AI不仅在优化投资决策、信用评估、实时监控和欺诈识别方面展现出强大功能&#xff0c;还极大地提升了客户体验、降低了运营成本&#xff0c;并推动了产品创新。面对智能时代的挑…