【Linux笔记】Linux基础权限
【Linux笔记】Linux基础权限
- 一、Linux权限的概念
- 1.1、Linux中一切皆文件
- 1.2、文件访问者的分类
- 1.3、、Linux中的“用户白名单”
- 二、文件访问权限的修改
- 2.1、权限的增加和减少的基础方法
- 2.2、以八进制数修改权限
- 三、用户身份的修改
- 3.1、修改文件的拥有者
- 3.2、修改文件的所属组
- 3.3、文件的默认权限与权限掩码
一、Linux权限的概念
就像我们现实生活中的各种单位一样,不同的管理层有着不同的权限,管理的层级越高权限就越大。
就好比一个公司的老板自然就拥有最高权限,可以任意开除或录用某个人。在我们的Linux系统中也是有这样的层级分类的。
在Linux中的用户主要分为两类:超级管理员用户(root)和普通用户,但普通用户也可以细分为在“白名单”内的用户和不在“白名单”之内的用户。
超级管理员用户也就是root用户几乎不受任何权限用户,他可以执行任何指令,也可以不受任何权限限制的查看修改和删除任意文件即用户。
总结来说,Linux中的权限主要是针对各种用户的。
Linux中的权限分为三类:
r --可读权限
w --写(修改)权限
x --可执行权限
1.1、Linux中一切皆文件
想要很好的理解Linux中的权限管理,就要先来理解一个概念——Linux中一切皆文件。
简单来说就是Linux中统一以文件的方式来管理各和访问种指令和设备。
反过来理解,就是任何东西只要在Linux操作系统中,不管它是不是文件,Linux都以文件的方式对它们进行管理和访问。
例如我们可以使用which指令和whereis指令来搜索各种指令:

我们最终会看显示了一堆目录和路径,也就是说Linux中是以文件的形式来存储这些指令的。
1.2、文件访问者的分类
Linux中的文件访问者分为三类:
文件的所有者:u(user)
文件的所有组用户:g(group)
其他人:o(other)
而Linux的文件权限主要就是针对这三中用户的。我们可以随便在一个目录下执行ll指令,就会发现每个文件的开头都跟着一长串的字符:

其中第一个字符表示的是文件类型,如果是d的话就是目录文件,如果是-的话就表示普通文件:

后面的这九个字符其实是要分成三组,每一组分别对应着上面的某个访问者所拥有的权限,其所对应的访问者如下:

如上图举例:该文件的拥有者对该文件有读写和执行权限,所属组有读和执行权限,其他人有读和执行的权限(‘-’ 就表示该用户没有对应的权限)。
1.3、、Linux中的“用户白名单”
Linux中有上千条指令,有些指令是什么用户都能执行的,但有些指令就只有root用户才能执行。
就例如安装软件或各种指令的指令:yum就只有root用户能执行。
那么普通用户就绝对不能执行yum只领了吗?
其实是可以的,我们可以使用sudo指令来对普通用户进行“提权”,这样就算是普通用户也能执行权限更大的指令了:

但是我们还会发现一个问题,就是当我们输完当前用户的密码之后会发现指令并没有被执行,而是给出了下面这条提示:

系统提示我们,当前用户并不在一个名为“sudoers”的文件中。
那这是怎么回事呢?
其实,虽然我们可以通过sudo来对我们的用户进行提权,但并不是所有的用户都可以被提权的。
想想如果每个普通用户都可以通过sudo来执行权限更高的指令,然后只需要输入自己的密码就能执行指令了,那Linux的权限设计岂不是有大bug?
所以普通用户想要提权成功就必须要经过root用户的同意,而同意的方式就是在sudoers文件中加入该普通用户的名字。
怎么操作呢,我们可以先打开这个文件,注意这个文件必须是root用户打开才是正确的。
该文件在root用户下的路径是 /etc/sudoers:

当我们打开这个文件之后,找到大于101行左右:

我们只需要像上图所示,将我们想要被提权的用户的名称加上去即可,然后在保存退出。
然后我们新加的这个用户就可以提权成功了:

这里我的系统,虽然已经安装了这条指令,但可以证明的是提权成功了。
二、文件访问权限的修改
2.1、权限的增加和减少的基础方法
如果我们想对某个文件的权限进行修改,我们可以使用chmod指令。
chomd指令的具体用法是:
chomd u/g/o+r/w/x 文件名
chomd u/g/o-r/w/x 文件名
意思就是针对某种用户对某文件的权限加上或是减去某个权限。
例如我们想去掉“其他人(o)”对某一文件的“读”权限,我们就可以这样做:

而如果我们又向把读权限加回来就可以这样做:

而如果在chomd后面没有指明何种用户的话,那就是默认对所有类型用户都修改权限:

2.2、以八进制数修改权限
除了上面的基础修改方法,其实我们还有一种更“便捷”的修改权限的方式,那就是使用三位八进制数来对文件的权限统一修改。
举一个例子:

我们会发现当执行完“chmod 777 test.t”指令后所有用户对应的权限都被更改了。
其实想要理解这3个数组并不难,我们只需要将对应有权限的位置用1来表示没有权限的位置用0来表示,例如目前ExerciseDir的权限是:
rwx rwx r-x
我们用数字对应就变成了:
111 111 101
我们可以把每种用户对应的权限看做是一个三位的二进制数,然后再转化成八进制就变成了:
775
我们将test.t的权限也设置成775,就可以看到这两个文件的权限变得一样了:

但是这种方法看起来是比较简便的,但是如果不常进行二进制转8进制的话可能还是需要一段计算时间的。
所以如果是想要快速修改所有用户的权限的话可以考虑使用这种方法,但如果只是想修改单种用户的单个权限的话,我感觉还是使用基础方法会比较直观一点。
三、用户身份的修改
3.1、修改文件的拥有者
如果我们想要修改某个文件的拥有者,我们可以使用chown指令,该指令的使用方法如下:
chown 新拥有者 文件名
但是需要注意的是,修改文件的拥有者是需要root的权限的,所以我们得加上sudo指令。
例如我们可以对test.t修改以下拥有者:

我们就会发现test.t的拥有者由原来的Mr_Lin1变成了Mr_Lin2了。
上面的第一个用户名表示的是拥有者,第二个用户名表示的是所属组的组长,而除了所属组和拥有者以外的用户就都属于其他人,所以其他人也就没必要在显示出来。
3.2、修改文件的所属组
而修改文件的所属组我们可以使用chgrp指令,该指令的用法如下:
chgrp 新所属组 文件名
同样这条指令也是需要root权限的:

3.3、文件的默认权限与权限掩码
其实我们在新建一个普通文件或者目录的时候是有对应的默认权限的,普通文件的默认权限是666,目录的默认权限是777。
但当我们真的创建一个文件和目录并查看其权限的时候却发现并不是这样:

我们会发现对应的权限分明是664和775。
新建一个文件的权限其实是默认权限减去该用户的权限掩码,也就是将权限掩码中有的权限减去。对于每个类型用户对应的三位二进制数来说其实计算的方法很简单,就是将权限掩码按位取反后再与默认权限按位与即可。
我们可以使用umask指令来查看权限掩码:

将权限掩码002转化成二进制为:000 000 010,按位取反后为:111 111 101,所以和普通文件的默认权限110 110 110 和目录文件的默认权限111 111 111 按位与后就得到了110 110 100和111 111 101,也就是664和775。
我们也可以使用**umask + “三位八进制数”**指令来修改权限掩码:

相关文章:
【Linux笔记】Linux基础权限
【Linux笔记】Linux基础权限 一、Linux权限的概念1.1、Linux中一切皆文件1.2、文件访问者的分类1.3、、Linux中的“用户白名单” 二、文件访问权限的修改2.1、权限的增加和减少的基础方法2.2、以八进制数修改权限 三、用户身份的修改3.1、修改文件的拥有者3.2、修改文件的所属组…...
汽车屏类产品(三):抬头显示Head-Up Display(HUD)
前言 你的下一台车,一定要考虑加装一个HUD。 汽车抬头显示器或汽车抬头显示器(也称为汽车HUD)是任何透明的显示器,它可以在汽车中显示数据,而不需要用户将视线从平时的视角移开。这个名字的由来源于飞行员能够在头部“向上”并向前看的情况下查看信息,而不是向下倾斜查…...
vue2技能树(1)
目录 Vue.js 是什么响应式数据绑定组件化开发简单的模板语法生态系统逐渐增强社区支持 安装、导入和使用 Vue.js步骤 1: 安装 Node.js步骤 2: 创建新项目或添加到现有项目创建新项目添加到现有项目 步骤 3: 导入 Vue.js步骤 4: 创建 Vue 实例步骤 5: 创建 HTML 模板步骤 6: 启动…...
Kotlin中的选择结构语句
在Kotlin中,选择结构语句有多种形式,包括条件分支、三元表达式、if-else if-else语句、when语句等。下面将逐个说明每种形式的使用。 条件分支: var max: Int 0 var a: Int 5 var b: Int 6if (a > b) {max a } else {max b }printl…...
【AIFEM案例操作】压力容器强度分析
AIFEM是由天洑自主研发的一款通用的智能结构仿真软件,助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题,软件提供高效的前后处理工具和高精度的有限元求解器,帮助用户快速、深入地评估结构的力学性能,加速产…...
Hadoop3教程(十八):MapReduce之MapJoin案例分析
文章目录 (118)MapJoin案例需求分析ReduceJoin的问题如何解决ReduceJoin的问题如何将一个文件主动缓存到集群的内存里 (119)MapJoin案例代码实现参考文献 (118)MapJoin案例需求分析 ReduceJoin的问题 在R…...
SOAR安全事件编排自动化响应-安全运营实战
SOAR是最近几年安全市场上最火热的词汇之一。各个安全产商都先后推出了相应的产品,但大部分都用得不是很理想。SOAR不同与传统的安全设备,买来后实施部署就完事,SOAR是一个安全运营系统,是实现安全运营过程中人、工具、流程的有效…...
连锁药店的自有品牌之争:老百姓大药房能否突围?
文丨新熔财经 作者丨楷楷 近年来,随着医保谈判药品的“双通道”(即消费者可在有资质的药店买到新进医保的创新药),以及“门诊统筹”将药店纳入医保报销等医改政策出台,药企开始重新重视起零售药店渠道,很…...
智能台灯语音控制丨解放双手
台灯是日常生活中一种常见的照明产品。以往的台灯大多都是采取手动控制,通过按键去对台灯的亮度进行调整。随着科技的发展,台灯也开始走向了智能化。人们已经能够对智能台灯进行语音控制,通过调节灯光开关、色温、灯光亮度等操作,…...
网络库OKHTTP(2)面试题
序、慢慢来才是最快的方法。 背景 OkHttp 是一套处理 HTTP 网络请求的依赖库,由 Square 公司设计研发并开源,目前可以在 Java 和 Kotlin 中使用。对于 Android App 来说,OkHttp 现在几乎已经占据了所有的网络请求操作。 OKHttp源码官网 问1…...
探索Java NIO:究竟在哪些领域能大显身手?揭秘原理、应用场景与官方示例代码
一、NIO简介 Java NIO(New IO)是Java SE 1.4引入的一个新的IO API,它提供了比传统IO更高效、更灵活的IO操作。与传统IO相比,Java NIO的优势在于它支持非阻塞IO和选择器(Selector)等特性,能够更…...
论文阅读 Memory Enhanced Global-Local Aggregation for Video Object Detection
Memory Enhanced Global-Local Aggregation for Video Object Detection Abstract 人类如何识别视频中的物体?由于单一帧的质量低下,仅仅利用一帧图像内的信息可能很难让人们在这一帧中识别被遮挡的物体。我们认为人们识别视频中的物体有两个重要线索&…...
Java 常用类(包装类)
目录 八大Wrapper类包装类的分类 装箱和拆箱包装类和基本数据类型之间的转换常见面试题 包装类方法包装类型和String类型的相互转换包装类常用方法(以Integer类和Character类为例)Integer类和Character类的常用方法 Integer创建机制(面试题&a…...
ES|QL:Elasticsearch的 新一代查询语言
作者:李捷 “学会选择很难。学会正确选择更难。而在一个充满无限可能的世界里学会正确选择则更难,也许是太难了。” 巴里-施瓦茨(Barry Schwartz)在《选择的悖论--多就是少》(The Paradox of Choice -More is Less&…...
C语言实现句子中的单词颠倒排序
一、运行结果 二、源代码 # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <assert.h>//实现逆转函数; void reverse(char* left, char* right) {//断言left和right都不能为空;assert(left);assert(right);//循环逆转字母…...
MySQL学习(八)——锁
文章目录 1. 锁概述2. 全局锁2.1 全局锁的必要性2.2 语法2.3 全局锁的特点 3. 表级锁3.1 表锁3.2 元数据锁3.3 意向锁3.4 自增锁 4. 行级锁4.1 介绍4.2 记录锁4.3 间隙锁4.4 临键锁 1. 锁概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传…...
让iPhone用电脑的网络上网
让iPhone用电脑的网络上网,可以按照以下步骤操作: 在iPhone上找到并点击“设置”选项,进入“蜂窝移动网络”。打开“个人热点”选项。此时下方的弹出对话框会显示“仅USB”。用数据线将你的iPhone与电脑相连,并在电脑上打开“控制…...
ThreeJS-3D教学十-有宽度的line
webgl中线是没有宽度的,现实的应用中一般做法都是将线拓宽成面来绘制。默认threejs的线宽是无法调节的,需要用有厚度的线 THREE.Line2。 先看效果图: 看下代码: <!DOCTYPE html> <html lang"en"> <he…...
安装Elasticsearch步骤(包含遇到的问题及解决方案)
注:笔者是在centos云服务器环境下安装的Elasticsearch 目录 1.安装前准备 2.下载Elasticsearch 3.启动Elasticsearch 非常容易出问题 第一次运行时,可能出现如下错误: 一、内存不足原因启动失败 二、使用root用户启动问题 三、启动ES自…...
网络编程面试笔试真题
网络编程笔试面试真题 1、关于Linux系统中多线程的信号处理,说法中不正确的是? A:在线程环境霞,产生的信号是传递给整个进程的 B:一般情况下,信号会随机给进程的一个线程 C:对某个信号处理函数…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
