【linux基础(四)】对Linux权限的理解

💓博主CSDN主页:杭电码农-NEO💓

⏩专栏分类:Linux从入门到开通⏪

🚚代码仓库:NEO的学习日记🚚

🌹关注我🫵带你学更多操作系统知识
  🔝🔝


在这里插入图片描述

Linux权限

  • 1. 前言
  • 2. shell命令以及运行原理
  • 3. 普通用户与超级用户
    • 3.1 对指令提权
  • 4. 文件的权限以及角色属性
    • 4.1 角色属性
    • 4.2 文件的类型
    • 4.3 文件的读写权限
    • 4.4 读写权限的二进制表示
  • 5. 文件的权限的修改方式
    • 5.1 文件权限的八进制修改方式
  • 6. 修改文件的拥有者/所属组
  • 7. 对文件夹的权限理解
  • 8. 默认权限以及权限掩码
    • 8.1 权限掩码相关的计算
    • 8.2 修改权限掩码
  • 9. 总结以及拓展

1. 前言

Linux的内容是错综复杂的,是学不完的
专栏Linux从入门到开通只讲解
比较重要的知识以及面试常考的内容

本章重点:

  1. 对shell外壳和Linux内核的理解
  2. 普通用户和超级用户的区别
  3. 文件对应的三个权限
  4. 修改文件权限或拥有者/所属组
  5. 目录文件和普通文件的区别
  6. 默认权限以及权限掩码

在这里插入图片描述


2. shell命令以及运行原理

Linux操作系统严格来说是:
Linux内核+Linux外壳+配套程序

在这里插入图片描述
外壳也就是shell
那么为什么要存在外壳呢?
有两个原因:

  1. 命令行解释(充当媒婆)

内核的设计非常复杂,使用者无法
直接向Linux内核进行沟通,也无法
直接读懂内核执行完命令的结果
所以shell外壳充当"媒婆"这一角色
来往于操作者和内核之间

  • 外壳程序将用户输入的指令解释后
    传递给内核
  • 内核执行命令后得到的结果经外壳
    处理后传递给用户
  1. 保护内核(充当保安)

有时用户想要内核执行的命令过于离谱
或者使用的指令内核根本做不到
那么此指令根本不会"打扰"内核
它会在shell外壳进行翻译时就被驳回!

  • 就像你暗恋的女生有男朋友了
    你还要媒婆帮你说媒

  • 这个请求会在媒婆这一阶段就驳回!

在这里插入图片描述

注:shell是对所有命令行解释器的统称

Linux下的shell外壳是bash
而windows下的shell外壳是
图形化界面


3. 普通用户与超级用户

一个Linux账号只有一个超级用户:
root
创建的其余用户都叫做普通用户
比如我的Linux下有几个普通用户:

在这里插入图片描述
假如你想要切换用户

使用指令: su 用户名

在这里插入图片描述

注:超级用户切换为普通用户不用输密码
普通用户切换为root或其他普通用户需要密码


3.1 对指令提权

假如我现在是普通用户
但我只想用root账号执行一条命令
如果切换为root那么太麻烦了

使用指令: sudo 提权的指令

这样就可以进行提取了
使用sudo命令的前提是:
此用户被添加到了sudoers白名单
(作为了解,后期会讲)


4. 文件的权限以及角色属性

当我们使用ll指令查看文件信息时
会打印出这样的信息:

在这里插入图片描述

红色框中有十列
蓝色框中有两个名字

用以下的图来理解:

在这里插入图片描述


4.1 角色属性

先看用蓝色和紫色框起来的地方
前者是代表文件的拥有者
后者是代表文件的所属组
所属组的名字是此组组长的名字!

对于文件来说,除了拥有者和所属组
还有other这个概念
other代表除了拥有者和所属组的其他人

比如现在我使用用户kwy创建一个文件:

在这里插入图片描述

拥有者就变成了kwy


4.2 文件的类型

再看最左边十列,第一列代表文件类型
可以发现,普通文件的第一列是:-
而目录文件的第一列是: d

在这里插入图片描述

对于现阶段而言,只需要掌握
文件夹和普通文件即可!


4.3 文件的读写权限

前十列的后九行代表了文件的读写权限
它们三个三个为一组

在这里插入图片描述

比如kwy.txt文件:
拥有者可读可写不可执行
所属组可读可写不可执行
other可读不可写不可执行

在这里插入图片描述

下面这张表格可以总结:

在这里插入图片描述
注:读对应指令:cat等等
写对应指令:nano等等

然而可执行暂时不用管


4.4 读写权限的二进制表示

有权限代表1,没有权限代表0
上面的表格可以总结出以下二进制形式:

在这里插入图片描述

这里使用八进制来表示是因为
某用户的最大权限是111
111的十进制是7,没有超过8!

kwy.txt文件的二进制形式可以写做:

在这里插入图片描述
6 6 4

5. 文件的权限的修改方式

想要修改用户的读写权限:

使用指令: chmod [参数] 权限 文件名

在这里插入图片描述

比如我把kwy.txt文件加上wx权限:

在这里插入图片描述

注:只有文件的拥有者或root可修改文件权限

若你没有读权限去访问文件时会报错:

在这里插入图片描述

root是超级管理员,权限不能限制root的访问!


5.1 文件权限的八进制修改方式

修改文件权限时,除了使用±号
还可以用八进制进行修改:

将kwy.txt文件改成所有人可读可写:

在这里插入图片描述

这里的666的二进制形式是:
110 110 110
所有人的读写权限都存在,而执行权限无

将kwy.txt文件的other所有权限去掉:

在这里插入图片描述


6. 修改文件的拥有者/所属组

修改拥有者:

使用指令: chown 用户名 文件名

将kwy.txt文件的拥有者改成root:

在这里插入图片描述

修改所属组

使用指令: chgrp 所属组 文件名

需要注意的点:

很明显一个普通用户是无法把自己的文件
给另外一个用户的,因为这十分不安全!
只有root账号或者使用sudo提权
才能将文件的拥有者/所属组修改!


7. 对文件夹的权限理解

和普通文件不同,文件夹的读写
和可执行权限对应的功能十分不同

  • 读权限( r ):用户能否查看文件夹下文件的信息
  • 写权限( w ):用户能否在此文件夹下创建/删除文件
  • 可执行权限( x ): 用户能否进入此文件夹

比如在我的目录下有一个source文件夹:

在这里插入图片描述

拥有者可以进入文件夹,并且可以创建/删除文件
也可以使用ls相关指令查看文件的信息
但是所属组和other不能创建或删除文件

现在切换为用户kwy并且进入此文件夹:

在这里插入图片描述

当我创建文件时,权限就被限制了!


8. 默认权限以及权限掩码

我们先创建一个目录和一个普通文件:

在这里插入图片描述

我们会发现以下规律:

  • 目录的默认权限为:7 7 5
  • 普通文件默认权限: 6 6 4

这是为什么呢?

其实文件的默认权限有两个因素决定:

  1. 文件的起始权限
  2. 文件的权限掩码

文件的起始权限:

  • 目录的起始权限为:7 7 7
  • 普通文件的起始权限为: 6 6 6

文件的权限掩码:
查看文件的权限掩码:

使用指令: umask

我的机器上默认为002
用起始权限777-002=775
刚好就等于目录的默认权限
而起始权限666-002=664
刚好也等于普通文件的默认权限


8.1 权限掩码相关的计算

其实文件的默认权限并不是简单的等于:

起始权限 - 权限掩码

它的公式是:

最终权限=起始权限&(~权限掩码)

公式不好记,但是说起来简单易懂

  1. 将权限掩码和起始权限变成二进制
  2. 将这两个二进制对一一对应
  3. 权限掩码为1,起始权限为1时,起始权限改为0
  4. 权限掩码为0,起始权限也为0时,起始权限不变

可以用下面这张图来理解:

在这里插入图片描述


8.2 修改权限掩码

Linux系统的功能做的很全
即使有些功能不经常用

修改权限掩码:

使用指令: umask 期望的权限掩码的八进制

比如现在将权限掩码修改为777:

在这里插入图片描述

此时,新创建的文件或文件夹什么权限都没了!


9. 总结以及拓展

Linux中的权限十分分明,一个用户
能干什么不能干什么都已经规定好了
不会出现你的某位同事删掉你的代码这种事情

拓展: 粘滞位

假设你和你的同事在同一个目录下工作
你要创建文件就必须有目录的w权限
而拥有w权限也不一定完全安全.
可能你的小组某个"间谍"
会删除你们小组所有文件

在这里插入图片描述

然而想要正常工作又必须将w权限放开

为了解决可以创建文件而不能删除他人文件
这个问题,引申出了粘滞位

详情请看:粘滞位讲解


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

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

相关文章

2023 最新 小丫软件库app开源源码 PHP后端

上传了源码解压之后,在admin/public/config.php修改后台登录账号和密码 后台地址:域名或者ip/admin 然后自己修改配置即可 后端搭建完成,现在导入iapp源码 导入iapp源码之后,修改mian.iyu载入事件的对接api和url就可以打包了 sss …

哈工大开源“活字”对话大模型

一、介绍 大规模语言模型(LLM)在自然语言处理的通用领域已取得了令人瞩目的成功。对于广泛的应用场景,这种技术展示了强大的潜力,学术界和工业界的兴趣也持续升温。哈工大自然语言处理研究所30余位老师和学生参与开发了通用对话大…

小米分享 | 解密面试题:网易面试如何回答“创建线程有哪几种方式?”

大家好,我是你们的小米!今天要和大家一起探讨一个在技术面试中常见的问题:创建线程有哪几种方式?这可是个经典面试题哦!不过别担心,小米在这里为你详细解析,帮你轻松应对,让你在面试…

stm32控制蜂鸣器源代码(附带proteus线路图)

说明: 1 PB0输出0时,蜂鸣器发生; 2 蜂鸣器电阻值如果太大会导致电流太小,发不出声音; 3蜂鸣器额定电压需要设置得低一点,可以是2V,但不能高于3V,这更右上角的电阻值有关系&#x…

【Linux】make/makefile自动化构建工具

文章目录 前言一、什么是make/makefile?二、依赖关系和依赖方法2.1 makefile中创建文件2.2 makefile中删除文件2.3 stat指令查看文件的三种时间(ACM)2.4 伪目标文件(.PHONY) 三、Makefile中的一些特殊符号3.1 $ 和 $^3…

【深入理解ES6】字符串和正则表达式

概念 字符串(String)是JavaScript6大原始数据类型。其他几个分别是Boolean、Null、Undefined、Number、Symbol(es6新增)。 更好的Unicode支持 1. UTF-16码位 字符串里的字符有两种: 前 个码位均以16位的编码单元…

尚硅谷大数据项目《在线教育之离线数仓》笔记002

视频地址:尚硅谷大数据项目《在线教育之离线数仓》_哔哩哔哩_bilibili 目录 P025 P026 P027 P028 P029 P030 P031 P032 P033 P034 P035 P036 P037 P038 P025 在Hive所在节点部署Spark P026 3)Hive on Spark测试 (1)…

深度剖析数据在内存中的存储

目录 一、数据类型介绍 类型的基本归类 1.整形家族 2.浮点数家族 3.构造类型 (自定义类型) 4.指针类型 5.空类型 二、整形在内存中的存储 1.原码、反码、补码 1.1原码 1.2反码 1.3补码 1.4计算规则 2 .大小端介绍 三、浮点型在内存中的存…

C++函数模板和类模板

C另一种编程思想称为泛型编程,主要利用的技术是模板 C提供两种模板机制:函数模板和类模板 C提供了模板(template)编程的概念。所谓模板,实际上是建立一个通用函数或类, 其类内部的类型和函数的形参类型不具体指定, 用…

算法与数据结构(七)--堆

一.堆 1.堆的定义 堆是计算机科学中一类特殊的数据结构的通常,堆通常可以被看做是一颗完全二叉树的数组对象。 堆的特性 1.它是完全二叉树,除了树的最后一层结点不需要是满的,其他的每一层从左到右都是满的,如果最后一层结点不…

WordPress更换域名后-后台无法进入,网站模版错乱,css失效,网页中图片不显示。完整解决方案(含宝塔设置)

我在实际解决问题时用到了 【简单暴力解决方案】的《方法一:修改wp-config.php》 和 【简单暴力-且特别粗暴-的解决方案】 更换域名时经常遇到的几个问题: 1、更换域名后,后台无法进入 2、更换域名后,网站模版错乱,c…

基于物理场的动态模式分解(piDMD)研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

stm32红绿灯源代码示例(附带Proteus电路图)

本代码不能直接用于红路灯,只是提供一个思路 #include "main.h" #include "gpio.h" void SystemClock_Config(void); void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOB_CLK_ENAB…

九耶丨阁瑞钛伦特-在项目中找到的经典BUG是什么?

在项目中找到的经典BUG有很多种,以下是其中一些常见的例子: 空指针异常(NullPointerException):当程序试图访问一个空对象或未初始化的变量时,会抛出空指针异常。这通常是由于缺少对变量的正确初始化或检查…

RabbitMq-发布确认高级(避坑指南版)

在初学rabbitMq的时候,伙伴们肯定已经接触到了“发布确认”的概念,但是到了后期学习中,会接触到“springboot”中使用“发布确认”高级的概念。后者主要是解决什么问题呢?或者是什么样的场景引出这样的概念呢? 在生产环…

第1天----验证一个字符串是否是另一个字符串的子串

本文我们将学习如何去验证一个字符串是否是另一个字符串的子串。 一、小试牛刀: 题目描述 输入两个字符串,验证其中一个串是否为另一个串的子串。 输入格式 两行,每行一个字符串。 输出格式 若第一个串 s 1 是第二个串 s 2 的子串&#xff0c…

[Machine Learning] decision tree 决策树

(为了节约时间,后面关于机器学习和有关内容哦就是用中文进行书写了,如果有需要的话,我在目前手头项目交工以后,用英文重写一遍) (祝,本文同时用于比赛学习笔记和机器学习基础课程&a…

【java安全】Log4j反序列化漏洞

文章目录 【java安全】Log4j反序列化漏洞关于Apache Log4j漏洞成因CVE-2017-5645漏洞版本复现环境漏洞复现漏洞分析 CVE-2019-17571漏洞版本漏洞复现漏洞分析 参考 【java安全】Log4j反序列化漏洞 关于Apache Log4j Log4j是Apache的开源项目,可以实现对System.out…

SQL Server2019安装后使用SQL Server身份验证登录失败

错误情况 今天在电脑安装SQL Server2019和SMMS,安装过程一切顺利,但是在使用SMMS连接数据库时出现了异常。使用"Window 身份验证"登录时正常,但是如果改为使用"SQL Server 身份验证"登录时却连接失败! 解决方…

VS2022远程Linux使用cmake开发c++工程配置方法

文章目录 远程连接CMakePresets.json的配置Task.vs.json配置launch.vs.json配置最近使用别人在VS2015上使用visualgdb搭建的linux开发环境,各种不顺手,一会代码不能调转了,一会行号没了,调试的时候断不到正确的位置,取消的断点仍然会进。因此重新摸索了一套使用vs的远程开…