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

news2024/11/15 9:13:35

        前言:本节内容主要讲述的是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可以删除这个文件, 其他人不可以。

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

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

下面是本人的笔记:

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

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

相关文章

记一次 .NET某酒业业务系统 崩溃分析

一:背景 1. 讲故事 前些天有位朋友找到我,说他的程序每次关闭时就会自动崩溃,一直找不到原因让我帮忙看一下怎么回事,这位朋友应该是第二次找我了,分析了下 dump 还是挺经典的,拿出来给大家分享一下吧。 …

成都欣丰洪泰文化传媒有限公司电商服务领航者

在当今数字化浪潮中,电商行业正以前所未有的速度蓬勃发展。作为这片蓝海中的佼佼者,成都欣丰洪泰文化传媒有限公司凭借其专业的电商服务能力和对市场的敏锐洞察力,成为众多品牌信赖的合作伙伴。今天,就让我们一起走进成都欣丰洪泰…

大屏自适应容器组件 v-scale-screen

在vue中,v-scale-screen可用于大屏项目开发,实现屏幕自适应,可根据宽度自适应,高度自适应,和宽高等比例自适应,全屏自适应。 仓库地址:github国内地址:gitee 一、安装 npm instal…

Mysql中存储引擎简介、修改、查询、选择

场景 数据库存储引擎 数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS )使用数据引擎进行创建、查询、更新和删除数据的操作。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以…

【C++ 】-vector:新时代动态数组的革新与未来

目录 1. vector的介绍及使用 1.1 vector的介绍 1.1.1 vector是什么 1.1.2 vector的存储机制 1.2 vector的使用 1.2.1 定义和构造函数 1.2.2 迭代器 1.2.3 容量相关操作 1.2.4 元素访问和修改 1.3 迭代器失效问题 2. vector深度剖析及模拟实现 2.1 std::vector的模拟…

【笔记】finalshell中使用nano编辑器GNU

ctrl O 保存 enter 确定 ctrl X 退出 nano编辑 能不用就不用吧 因为我真用不习惯 nano编辑的文件也可以用vim编辑的

网页提示“非私密连接”怎么办?

当网页提示“非私密连接”或“您与该网站的连接不是私密连接”,这通常意味着浏览器无法建立一个安全的HTTPS连接。HTTPS协议是HTTP协议的安全版本,通过SSL协议加密数据传输,以保护用户的数据免受中间人攻击或监听。主要有下面几个原因&#x…

In Search of Lost Online Test-time Adaptation: A Survey--论文笔记

论文笔记 资料 1.代码地址 https://github.com/jo-wang/otta_vit_survey 2.论文地址 https://arxiv.org/abs/2310.20199 3.数据集地址 1论文摘要的翻译 本文介绍了在线测试时间适应(online test-time adaptation,OTTA)的全面调查,OTTA是一种专注于使机器学习…

Apache配置与应用(优化apache)

Apache配置解析(配置优化) Apache链接保持 KeepAlive:决定是否打开连接保持功能,后面接 OFF 表示关闭,接 ON 表示打开 KeepAliveTimeout:表示一次连接多次请求之间的最大间隔时间,即两次请求之间…

一.5 高速缓存至关重要

这个简单的示例揭示了一个重要的问题,即系统花费了大量的时间把信息从一个地方挪到另一个地方。hello程序的机器指令最初是存放在硬盘上,当程序加载时,它们被复制到主存;当处理器运行程序时,指令又从主存复制到处理器。…

C++报警:warning: zero as null pointer constantstddef.h

源码和警告内容 解决办法: select(0,nullptr,nullptr,nullptr,&delay); 关于NULL和nullptr的区别: 在C中,nullptr和null(通常指的是NULL宏,因为C标准中并没有直接定义null关键字)都用于表示空指针&am…

基于eBPF的procstat软件追踪等待锁和持有锁的时间

在并发编程中,锁的使用是保证线程安全的重要手段。然而,过度使用锁或者锁竞争可能导致性能瓶颈。为了分析程序中锁的使用情况,我们可以借助procstat软件来追踪程序加锁时间和等待锁的时间。procstat是一个基于eBPF(extended Berke…

uniapp安卓端实现语音合成播报

最初尝试使用讯飞语音合成方式,能获取到语音数据,但是数据是base64格式的,在安卓端无法播放,网上有说通过转成blob格式的url可以播放,但是uniapp不支持转换的api;于是后面又想其他办法,使用安卓插件播报原生安卓语音播报插件 - DCloud 插件市场 方案一(讯飞语音合成) 1.在讯飞…

AGE Cypher 查询格式

使用 ag_catalog 中的名为 cypher 的函数构建 Cypher 查询,该函数返回 Postgres 的记录集合。 Cypher() Cypher() 函数执行作为参数传递的 Cypher 查询。 语法:cypher(graph_name, query_string, parameters) 返回: A SETOF records 参…

[240709] X-CMD 发布 v0.3.15:新增 uname、coin、df 和 uptime 模块;优化非 Posix Shell

目录 X-CMD 发布 v0.3.15✨ uname✨ coin✨ df✨ uptime✨ fish | onsh | nu | elv✨ go✨ env X-CMD 发布 v0.3.15 ✨ uname 新增了 uname 模块,用于增强 uname 命令的功能。 ✨ coin 新增了 coin 模块,作为 CoinCap 平台信息查看器。 ✨ df 新增了…

Prometheus+Grafana监控Linux主机

1、安装Prometheus 1.1 、下载Prometheus 下载网址 https://github.com/prometheus/prometheus/releases选择需要的版本 wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz1.2、安装Prometheus软件 1.2.1、…

命名空间namespace--c++入门基础等

个人主页点这里~ 1.命名空间-namespace 简介 :在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化&#xf…

递归、搜索与回溯算法 2024.7.4-24.7.9

专题介绍&#xff1a; 一、递归 1、汉诺塔问题 class Solution {public void hanota(List<Integer> A, List<Integer> B, List<Integer> C) {int n A.size();move(n,A,B,C);// 将A柱上的n个盘子通过借助B盘子全部挪到C柱子上}void move(int m,List<Integ…

UI组件库---vantList组件接口多次调用大坑问题

问题描述&#xff1a;当使用refesh下拉操作时&#xff0c;vanlist组件会多次调用&#xff08;大概三次&#xff09;&#xff01; 解决方案&#xff1a; 1、接口错误的时候&#xff0c;大量重复请求。 可能接口错误时vant3内部某些变量没重置&#xff0c;导致一直重复请求&am…

08.C2W3.Auto-complete and Language Models

往期文章请点这里 目录 N-Grams: OverviewN-grams and ProbabilitiesN-gramsSequence notationUnigram probabilityBigram probabilityTrigram ProbabilityN -gram probabilityQuiz Sequence ProbabilitiesProbability of a sequenceSequence probability shortcomingsApproxi…