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可以删除这个文件, 其他人不可以。

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

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

下面是本人的笔记:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第33讲:K8S集群StorageClass使用Ceph CSI供应商与Cephfs文件系统集成

文章目录 1.Ceph CSI供应商简介2.创建Cephfs文件系统为StorageCLass提供底层存储端2.1.创建Cephfs文件系统2.2.在Cephfs文件系统中为Storageclass创建子目录2.3.在Cephfs文件系统中创建一个子卷 3.在K8S集群中部署Cephfs-CSI供应商客户端3.1.下载Cephfs-CSI客户端的资源编排文件…

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…

Spring最早的源码

地址:Spring最早的源码

顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

用Canvas绘制一个高可配置的圆形进度条

🚀 用Canvas绘制一个高可配置的圆形进度条 问题分析与拆解第一步,初始化一些默认参数,处理canvas模糊问题第二步,定义绘制函数1. 定义绘制主函数入口,该函数汇集了我们定义的其它绘制方法2. 定义绘制圆环函数3. 定义绘…

【跨境分享】中国商家如何卷到国外?电商独立站和电商平台的优势对比

为什么要选择独立站而不是电商平台 对于跨境电商经营者而言,采取多平台、多站点的运营策略是至关重要的战略布局。这一做法不仅有助于分散风险,避免将所有投资集中于单一市场,从而降低“所有鸡蛋置于同一篮子”的隐患,而且有利于拓…

最近换工作的一些启示,清华学姐篇

最近更新频率慢下来了,一部分原因是沉迷运动不能自拔,还有一部分原因是业余分出来很大的精力来拓展个人的边界,希望在工作之外取得一些成绩,写作上耽误了不少,很难做到日更。 所以整体上今年更新频率较低,但…

揭秘机器学习如何改变广告营销游戏规则

揭秘机器学习如何改变广告营销游戏规则 一、前言1.1 大数据时代的到来1.2 广告营销面临的挑战1.3 机器学习为广告营销带来的机遇 二、机器学习在广告营销中的应用2.1 了解消费者2.1.1 数据收集和分析2.1.2 行为模型的建立2.1.3 消费者画像的制作 2.2 定位广告投放人群2.2.1 人群…

vscode取消未使用变量的提示(爆红)

目前项目正在使用ts(TypeScript),可以在 tsconfig.json 文件中调整编译选项 在你的项目中找到并打开 tsconfig.json 文件,将noUnusedLocals和noUnusedParameters设置为false,关闭vscode重新打开项目即可 {"comp…

ISO 20000认证:驱动企业IT服务管理变革的利器

在信息技术驱动商业发展的今天,企业对高效、可靠和安全的IT服务需求日益增长。ISO 20000作为国际公认的IT服务管理标准,能够帮助企业在竞争激烈的市场环境中脱颖而出,实现IT服务管理的全面提升。本文将深入探讨ISO 20000认证如何帮助企业优化…

机器学习中的可解释性

「AI秘籍」系列课程: 人工智能应用数学基础 人工智能Python基础 人工智能基础核心知识 人工智能BI核心知识 人工智能CV核心知识 为什么我们需要了解模型如何进行预测 我们是否应该始终信任表现良好的模型?模型可能会拒绝你的抵押贷款申请或诊断你患…

基础跟张宇,强化用36讲还是高数辅导讲义?

基础跟的张宇老师,强化阶段跟谁要看基础学的怎么样! 因为张宇老师今年课程大改版,和以往的课程一点也不一样! 具体变动是: 张宇老师把往年强化阶段的知识前移,也就是说现在的基础阶段要讲的内容是以往基…

一文读懂:LLM大模型RAG

RAG 检索增强生成(Retrieval Augmented Generation),简称 RAG,已经成为当前最火热的LLM应用方案。经历今年年初那一波大模型潮,想必大家对大模型的能力有了一定的了解,但是当我们将大模型应用于实际业务场…

分布式一致性算法:Raft学习

分布式一致性算法:Raft学习 1 什么是分布式系统? 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。这些节点可能位于不同的物理位置,但它们协同工作以提供一个统一的计算平台或服务。分布式系统…

springmvc重定向和返回json,如何同时实现?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

怎样把图片转成pdf文件,简鹿格式工厂轻松批量搞定

信息的存储和分享方式变得越来越多样化,而PDF文件以其跨平台兼容性和内容完整性,成为了许多用户首选的文档格式。无论是在学术研究、商务办公,还是个人创作中,将图片转换为PDF文件的需求日益凸显。 想象一下,当你需要整…

高性能Python网络框架实现网络应用详解

概要 Python作为一种广泛使用的编程语言,其简洁易读的语法和强大的生态系统,使得它在Web开发领域占据重要位置。高性能的网络框架是构建高效网络应用的关键因素之一。本文将介绍几个高性能的Python网络框架,详细描述它们的特点、使用场景及具体示例代码,帮助高效实现网络应…

veriloga要怎么在candence中编译和加密?

从编译器的角度来说,我在ADS中可能就是直接用notepad编写,然后生成检查,它会有提示成功或报错的信息。但是对比下来,我发现candence的编译器更加方便编写va,所以把运行成功的步骤记录下来,防止遗忘。 首先&#xff0c…

2024.7.9.小组汇报postman分享会

文章目录 一、前言(一)界面导航说明(二)发送第一个请求 二、基本功能(一)常见类型的接口请求(常见的接口有如下四种类型:1.查询参数的接口请求2.表单类型的接口请求3.上传文件的表单请求4.JSON …

关于MySQL mvcc

innodb mvcc mvcc 多版本并发控制 在RR isolution 情况下 trx在启动的时候就拍了个快照。这个快照是基于整个数据库的。 其实这个快照并不是说拷贝整个数据库。并不是说要拷贝出这100个G的数据。 innodb里面每个trx有一个唯一的trxID 叫做trx id .在trx 开始的时候向innodb系…