当前位置: 首页 > news >正文

linux权限深度解析——探索原理

        前言:本节内容主要讲述的是linux权限相关的内容, linux的权限如果使用root账号是感受不到的, 所以我们要使用普通账号对本节相关内容进行学习,以及一些实验的测试。 然后, 通过linux权限的学习我们可以知道为什么有时候我们对一个文件进行操作的时候总是permission dinied, 以及让我们知道根目录下的文件权限和我们普通用户家目录下的文件的权限的区别。

        ps:本节内容适合正在学习linux并且懂得一些linux指令的友友们观看。

用户分类

//首先认识一下linux下用户的分类:

  • root:超级用户, 管理员
  • 普通用户:也就是我们创建出来的一些用户。 (addusr出来的普通用户)

这两个用户的根本区别就是root用户不受权限的约束, 而普通用户会受到权限的限制。

//su

普通用户能够切换成为root用户, root用户也能够切换为普通用户。

普通用户切换成root用户:

        第一种——su + root密码。 就可以切换成为root用户了。 这个时候如果切换,那么切换后用户所处的位置不变。 

        第二种——su-  + root密码。 同样是切换成root用户。 这个时候如果切换, 那么切换后用户的位置变成root自己的家目录

以上两种情况切换后都可以使用cral + d切换回来。 

root用户切换成普通用户——root用户切换成为普通用户不需要密码, 直接就可以切换。 

普通用户切换成位普通用户

普通用户切换成为普通用户一般一般有两种方式:

        第一种——拥有该普通用户的密码, 那么就可以使用su + 用户 + 用户的密码进行切换身份

        第二种——先切换成root用户(切换方式参考上面), 然后再通过root身份直接切换成指定用户。

注意, 意识身份切换都可以使用cral + d切换回来。 

指令提权:我们在执行指令的时候, 可以不切换成为root用户, 而是只对其中一条指令进行提权, 这个时候就用到了sudu + 指令 + 当前用户的密码。这里可能友友们会有疑问, 为什么对某一条指令进行提权要输入的是自己的密码, 而不是root的密码。 那是因为这个指令提权是有条件的, 那就是只有某个用户被添加到系统的白名单中, 才能够进行指令提权。 而如果没有被添加到白名单中, 提权指令是没有用的 。

什么叫做权限

权限大白话就是一件事情是否允许被你做, 这就是权限。

一个用户的身份分为:拥有者, 所属组, 其他人。

我们看下面这几串命令行:

        这里面, 第一个_mian_yang起始就是代表文件的拥有者, 第二个_mian_yang代表文件的所属组。 就是说, 这些文件的拥有者是_mian_yang, _mian_yang就是拥有者身份;这些文件的所属组是_mian_yang, 如果一个用户所属于_mian_yang这一个小组, 那么他就是所属组身份;而如果一个用户既不是_mian_yang, 也不在_mian_yang这个所属组里面。 那么这个用户就是其他人的身份。 

        那么假如有一个校长叫做张三, 张三要去他自己的校长办公室。 那么请问, 张三能够去校长办公室是因为它是张三呢, 还是因为它是校长呢。 这里显然是因为他是校长, 所以他能够去自己的校长办公室。那么, 对于我们的文件来说, 我们能访问这个文件, 是因为我们是这个用户呢?还是因为我们用户的身份呢? 答案是身份。即权限认证的是身份。 

        第二个问题, 我们都知道手机的功能有很多, 我们可以在上面看视频, 查资料, 打游戏等等。 这些可以看作手机拥有的属性。 但是, 当我们饿了的时候, 我们不能将手机吃掉让我们不再饥饿。 能够作为食物这是手机不具备的属性。 那么我们无论如何, 即便是有最高权限的人, 也不能让手机可以成为食物, 所以。 我们就可以知道第二点, 即权限也和事物的属性有关。 

//身份与用户的关系

        谈完三种权限, 我们结合之前的用户分类, 思考一下权限和用户分类之间的关系。 

        首先, 对于一个普通用户来说, 这个普通用户既可能是一个文件的拥有者, 也可能是一个文件的所属组, 也可能是其他人。 

        对于root用户来说, root用户既可能是一个文件的拥有者, 也可能是一个文件的所属组, 也可能是其他人。 

 那么, 具体是怎么体现的呢?也就是linux是如何判断这个用户的身份的呢? 我们还是看这张图:

        对于绿框框和橘框框, 绿框框是拥有者, 橘框框是所属组。 那么对于任何一个登陆的用户在访问一个文件的时候, 都要先看一下是不是文件的拥有者, 如果不是, 就要看一下是不是文件的所属组。 如果还不是,那么就是其他人other。

//文件的权限

        继续看这张图, 对于这张图来说, 粉色框框里面的就是各个身份的权限。 绿色横杠是拥有者权限, 橙色横杠是所属组权限, 蓝色横杠是其他人权限。  其中, 每个身份都有rwx三个权限, 这三个权限为一组, 并且这三个权限的位置是确定的。第一个位置为读, 第二个位置为写, 第三个位置为为可执行, 这三个位置不会发生乱序, 每一个位置是什么含义都是确定的!并且每一个位置只有是或者否, 具有指定的权限。

        这里思考一下, 为什么要有所属组这个权限? 

假如张三和李四都进入了一家公司进行面试, 最后都成为了一家公司的实习生,然后分别被分到了A组和B组。 并且张三是A组, 李四是B组, 现在这个公司让这两个组同时开发一款软件。 有一天张三写了一串很厉害的代码, 李四就像看看, 但是张三不想让李四看。但是呢, 有一天领导想要看一下张三写的代码, 但是呢, 如果张三将代码的阅读权限放开, 那么李四就能够看到了, 所以所属组就在这个时候起了作用。 让这个领导属于这个所属组,这样,这个程序我能看,领导也能看, 而其他人就看不了了。

权限的修改

能够修改权限的只有两个人, 一个是拥有者, 一个是root。 

方法:chmod u + rwx修改拥有者改的权限, 给拥有者加上权限(r读权限, w写权限, x执行权限)

chmod u-rwx修改拥有者的权限, 给拥有者减去相应的权限

chmod g+rwx修改所属组的权限, 给所属组加上权限

chmod g-rwx修改所属组的权限,, 给所属组加上权限

chmod g-rwx修改其他人的权限,, 给其他人加上权限

chmod g-rwx修改其他人的权限,, 给其他人加上权限

也可以给多个身份权限 chmod u+rwx, g+rwx就是给所属组, 拥有者加上权限, 减去权限相反。

比如说想要一次性给所有身份加上权限, 那就是chmod a+rwx, 减去权限相反。

另外, 除了更改权限之外, 我们还可以更改一个文件的所有者和所属组。 

更改文件所有者:chown 用户 文件 将某个自己的文件给某人, 更改拥有者。

更改文件所属组: chgrp 用户 文件 更改所属组。

        上面两条指令都需要对应用户的同意, 一般有两种方式: 一种是提权, su, 另一种就是线下进行沟通。

        对于权限来说, 我们使用ll看到的每一个位置的权限都是确定的, 所以, 我们可以利用1代表该位置有权限, 0代表该位置没有权限。 所以我们就可以用111, 110表示一个身份的权限, 比如111就是拥有读写, 执行。111就是7, 所以三个身份就可以利用三个八进制位进行表示, 比如777.

        所以, 我们修改权限就可以这样修改了——chmod 777, 意思是给所有身份所有权限。 

        现在, 我们来看这样一个例子:

        现在, 对于_mian_yang这个用户来说, 他的拥有者身份有读权限, 没有写权限;他的所属组身份有读权限, 有写权限。 

        那么这个时候, _mian_yang能对这个文件进行写吗?

        答案是不能, 因为用户在认证身份的时候, 只能认证一个身份, 首先认证拥有者, 然后再认证所属组, 最后再认证其他人。 

umask

为什么我们创建文件出来的时候, 权限是这个样子呢?

首先, 我们需要知道的是, 图中的权限是文件创造出来的最终权限, 他们其实还有一个起始权限——这个起始权限目录文件默认为777, 普通文件默认为666。但是为什么最终创建出来的权限, 目录文件是775, 普通文件是664呢?

这是因为系统中默认有一个umask——权限掩码。 权限掩码就是, 凡是在umask中出现的权限, 不会在最终权限中出现, 这里的计算规则不是默认权限 - 权限掩码, 而是最终权限 = 默认权限 & (~权限掩码)

同时, umask也可以修改, 比如umask 数字, 就是将权限掩码修改为某个数字

目录读写的含义

        目录的读:允许我们查看当前目录中的文件内容

        目录的写:允许我们进行文件的创建, 删除和更改

        目录的可执行: 是否允许我们进入目录。 

粘滞位

        在实际中我们可能有着这种需求: 就是我们想要对数据实现共享, 但是如果我们把目录创建到自己的家目录底下, 别的用户进不去。所以这个目录只能建立到根目录下面, 但是根目录的默认权限是dr-xr-xr-x, 就是三个身份都只能读和可执行, 不能够随意创建目录 。所以就需要使用root账户创建目录。 

        创建好这个文件后, 这个文件我们就可以设置other身份可以读取和写以及执行, 否则就无法共享。 但是如果一个用户在里面创建了文件,因为该目录下有写权限, 就会导致别的人可以随意删除这个文件。所以这个时候为了保护这个文件, 就添加了粘滞位的操作。 这个粘滞位的操作可以保证用户创建的文件只能由用户自己或者root删除。 

        所以, 粘滞位就是是专门给目录设置的一种权限, 一般是共享目录, 大家可以在目录下进行各自的增删查改, 但是只有拥有者和root可以删除这个文件, 其他人不可以。

------------------

以上就是本节的全部内容。

下面是本人的笔记:

相关文章:

linux权限深度解析——探索原理

前言:本节内容主要讲述的是linux权限相关的内容, linux的权限如果使用root账号是感受不到的, 所以我们要使用普通账号对本节相关内容进行学习,以及一些实验的测试。 然后, 通过linux权限的学习我们可以知道为什么有时候…...

Qt学生管理系统(付源码)

Qt学生管理系统 一、前言1.1 项目介绍1.2 项目目标 2、需求说明2.1 功能性说明2.2 非功能性说明 三、UX设计3.1 登录界面3.2 学生数据展示3.3 信息插入和更新 三、架构说明3.1 客户端结构如下3.2 数据流程图3.2.1 数据管理3.2.2 管理员登录 四、 设计说明3.1 数据库设计3.2 结构…...

重磅!新公司法正式实施,这些变化你必须知道! ️

新公司法来了!企业设立和经营必知的关键变动 🏛️🚀 大家好,我是猫头虎,科技自媒体博主。今天我们来聊聊一件大事——新公司法的实施,这对企业设立和经营带来了哪些重大影响?跟着我&#xff0c…...

[Flask笔记]一个完整的Flask程序

前面讲过Flask是一个轻量级Web开发框架,为什么说是轻量级的呢,因为它用短短几行代码就能运行起来,我们一起来看看最简单的flask框架。 安装Flask 在看Flask框架之前我们需要先安装flask模块,学过python的肯定都知道,…...

企业专利布局怎么弄

企业专利布局策略与实施 在当今竞争激烈的商业环境中,企业的专利布局已成为保护创新成果、提升市场竞争力的重要手段。专利布局不仅是技术创新的体现,更是企业战略布局的重要一环。 一、企业专利布局的策略 多维度布局 企业专利布局应结合市场、技术、…...

ArduPilot开源飞控之AP_Mount_Topotek

ArduPilot开源飞控之AP_Mount_Topotek 1. 源由2. 框架设计3. 重要函数3.1 动态过程3.1.1 AP_Mount_Topotek::update3.1.2 AP_Mount_Backend::calculate_poi 3.2 基础能力3.2.1 AP_Mount_Topotek::healthy3.2.2 AP_Mount_Topotek::has_pan_control 3.3 设备功能3.3.1 AP_Mount_T…...

React组件间通信的几种方式

一、Props向下传递&#xff08;Top-Down Propagation&#xff09; 父组件通过props将其状态或数据传递给子组件。 父组件&#xff1a; class ParentComponent extends React.Component {state { message: Hello World };render() {return <ChildComponent message{this.…...

2024最新国际版抖音TikTok安装教程,免root免拔卡安卓+iOS,附全套安装工具!

我是阿星&#xff0c;今天给大家带来是2024年最新TikTok国际版抖音的下载和安装教程&#xff0c;而且还是免root免拔卡的那种&#xff0c;安卓和iOS都能用哦&#xff01;由于某些原因&#xff0c;国内用户并不能使用TikTok。今天阿星就教一下大家怎么安装TikTok。 TikTok在全球…...

kafka与zookeeper的SSL认证教程

作者 乐维社区&#xff08;forum.lwops.cn&#xff09;许远 在构建现代的分布式系统时&#xff0c;确保数据传输的安全性至关重要。Apache Kafka 和 Zookeeper 作为流行的分布式消息队列和协调服务&#xff0c;提供了SSL&#xff08;Secure Sockets Layer&#xff09;认证机制&…...

为何数字化转型项目会夭折?深入分析失败的关键因素

数字化转型是一个复杂的过程&#xff0c;涉及企业运营的各个方面。根据麦肯锡的报告&#xff0c;尽管数字化转型对企业至关重要&#xff0c;但根据数据显示70%的数字化转型尝试未能成功。本文总结了六大常见失败原因&#xff1a;转型准备不足、组织文化障碍、技术实施问题、人才…...

数据结构(其二)--线性表

目录 1. 基本概念 2.线性表的基本操作 3.顺序表 &#xff08;1&#xff09;.静态分配 &#xff08;2&#xff09;.动态分配 &#xff08;3&#xff09;.顺序表的插入与删除&#xff08;以静态分配为例&#xff09;&#xff08;示例代码中包含了一下必要的基本函数&#xf…...

软链接node_modules

公司项目很多微应用的子项目公用同一套模板&#xff0c;也就会使用同一个node_modules 1.先创建3个同样的项目,并安装一个其中的一个node_modules给他丢到外边 2.win r -------> cmd --------> ctrlshift enter(已管理员身份打开cmd) 3.在窗口分别执行以下代码…...

Apache中使用SSI设置

先停服务在修改httpd.conf&#xff0c;备份下 Apache\Apache24\conf 设置httpd.conf LoadModule ssl_module modules/mod_ssl.so 取消该命令前的注释符# AddType text/html .shtml AddOutputFilter INCLUDES .shtml 取消该命令前的注释符# 加入html AddType text/html .s…...

Java Stream API详解:高效处理集合数据的利器

引言 Java 8引入了许多新特性&#xff0c;其中最为显著的莫过于Lambda表达式和Stream API。Stream API提供了一种高效、简洁的方法来处理集合数据&#xff0c;使代码更加简洁明了&#xff0c;且具有较高的可读性和可维护性。本文将深入探讨Java Stream API的使用&#xff0c;包…...

Python使用策略模式和openpyxl库创建Excel文件并追加内容

from openpyxl import load_workbook# 数据数组 data [[1, 2, 3],[4, 5, 6],[7, 8, 9] ]# 打开现有的 Excel 文件 excel_file sheetApend_example.xlsx wb load_workbook(excel_file)# 选择要追加数据的工作表 sheet_name test_Sheet2 # 指定要追加数据的工作表名称 sheet…...

libcoap3对接华为云平台

文章目录 前言一、平台注册二、引入源码库1.libcoap仓库编译2.分析网络报文3.案例代码4.编译&运行 总结 前言 通过libcoap3开源代码库对接华为云平台&#xff0c;本文章将讨论加密与不加密的方式对接华为云平台。 一、平台注册 首先&#xff0c;你需要在华为云平台上创建…...

【鸿蒙学习笔记】关系型数据库概述

目录标题 关系型数据库的运行机制样例代码共通方法 DBUtilsIndex 代码效果 关系型数据库的运行机制 1、 关系型数据库对应用提供通用的操作接口&#xff0c;底层使用SQLite作为持久化存储引擎&#xff0c;支持SQLite具有的数据库特性&#xff0c;包括但不限于事务、索引、视图…...

Find My网球拍|苹果Find My技术与网球拍结合,智能防丢,全球定位

网球是球类运动项目之一&#xff0c;网球拍作为这项运动的必备工具&#xff0c;有木质球拍、铝合金球拍、钢质球拍和复合物&#xff08;尼龙、碳素&#xff09;球拍&#xff0c;任何材质的球拍均可用于比赛。网球拍由拍头、拍喉、拍柄组成&#xff0c;在使用时还需要配合网球线…...

windows环境下部署多个端口Tomcat服务和开机自启动设置保姆级教程

前言 本文主要介绍了 windows环境下&#xff0c;配置多个Tomcat设置不同端口启动服务。其实在思路上Linux上也是适用的&#xff0c;只是 Linux 上没有可视化客户端&#xff0c;会麻烦些&#xff0c;但总体的思路上是一样的。 注&#xff1a;文章中涉及些文字和图片是搬运了其他…...

科普文:一文搞懂jvm实战(四)深入理解逃逸分析Escape Analysis

概叙 Java 中的对象是否都分配在堆内存中&#xff1f; 好了太抽象了&#xff0c;那具体一点&#xff0c;看看下面这个对象是在哪里分配内存&#xff1f; public void test() { Object object new Object(); }这个方法中的object对象&#xff0c;是在堆中分配内存么&#xff1…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...