【Linux】-----权限详解

目录

一、Linux下的权限概念

Ⅰ、是什么?

Ⅱ、Linux下的两种角色

角色

如何添加普通用户

身份的转化方式

身份的提权

添加普通用户至白名单

二、Linux下的权限管理

Ⅰ、文件访问者的分类(Linux下的“人”)

Ⅱ、文件类型和访问权限(事物属性)

 1.文件类型

file指令(查看文件类型)

2.文件权限

权限表示方法:

a、字符表示

b、8进制表示

权限的修改方式

a、修改文件属性

b、修改“人” 

权限有无的表现 

3.目录权限

由目录可读(W)权限引发的一个有意思的问题

粘滞位(为目录准备的)

4.权限掩码umask


一、Linux下的权限概念

Ⅰ、是什么?

        对于权限,在我们日常中就有体现,如vip,学校的门禁等,说白了就是通过一定的条件拦住一部分人,给另外一部分人权利去访问特定的资源,本质就是有没有或者能不能的问题。所以权限一个简单的定义:既与人相关,还和事物的属性相关,即权限=人+事物的属性。

Ⅱ、Linux下的两种角色

角色

①超级用户(root):可以在Linux系统下做任何的事情,不受任何的限制,拥有最高的权力。

②普通用户:可以在Linux下做有限的事情。

区分两者:

如何添加普通用户

对于添加普通用户的操作一定是以root身份去添加的,因为权力大嘛!

添加命令:useradd  -m username(用户名)  或者  adduser  用户名

设置密码:passwd   username(用户名)

删除用户:userdel  -r username(用户名)(目录需递归删除)

细节问题:

①若直接采用useradd  +用户名的方式,这种方式仅仅只是创建了一个用户名。并没有在系统中的用户表,使用它是登录不了的,也删除不了。 

②采用useradd  -m username(用户名)  或者  adduser  用户名(成功的方式)

注意:成功添加的用户会被放在家目录下,也就是home目录!!

身份的转化方式

①普通人--->root

命令:su root(root可以省略)或者 su -

值得注意的是:设置密码时,普通用户和root的密码最好不要一样

root--->普通用户

命令:su 用户名

可以看到这里并没有要求输入密码,因为root具有最高的权力,可以为所欲为!

身份的提权

很多时候身为普通用户,我们并不想直接切换成root身份,但是我就是想以root身份去执行一个工作,这时候我们可以采用提权的方式去实现,就是给普通用户一个权力,把一些本来普通用户不能执行的指令赋予当前用户执行!

命令:sudo  需要执行的操作

经过上述操作,我们就不需要切换成root用户去执行一个指令!

对于上面的指令提权操作,大家在初次使用时,并不能实现!因为在系统中会存在一份白名单(信任列表),只有在白名单上的普通用户才能够去使用sudo去提权。比如上述的curry用户就不能执行sudo,因为它还没在白名单上。

从上图可以看出,curry这个用户无法执行sudo指令!!!

添加普通用户至白名单

此操作也需要在root身份下去执行!

①切换身份

②输入vim  /etc/sudoers进行添加对应的用户

③添加成功,就可以采用sudo的指令进行提权了!

二、Linux下的权限管理

Ⅰ、文件访问者的分类(Linux下的“人”)

①文件或者目录的拥有者(User)

②文件或者目录的所需组(Group)

③既不是拥有者也不是所属组的其他人(other)

拥有者顾名思义,就是该文件或者目录的创始人。那么为什么要存在一个所属组的概念呢?试想以下场景:

        在一个公司内部,存在很多部门,每个部门都负责有特定的工作,假设每个部门都存在着某种竞争关系,假如有一天,老板需要看你写的项目时,老板这个角色对于你这个项目他是属于其他人因此你不得不将文件的访问权限放开,让其他人都看见,这就会引发一个问题,隔壁部门的也是属于其他人,而你们又是竞争关系,可是你并不想让隔壁部门的看见文件内容,所以就必需要有分组,此时只需要把你的老板放入该组中并打开组的权限,那么隔壁部门就无法访问到具体的文件内容了,一举两得嘛!

        所以的所以,Linux具有组的概念,主要是为了进行多人协作时能更好的进行权限管理!!

看到这里估计又有疑问,Linux下既有“角色”,又有“人”,不冲突吗?实际上一点也不,not at all!,反而还是相互补充的关系!因为具体的角色需要具体的人去扮演,比如root可以是拥有者,也可以是所属组,还可以是其他人!你品!你细品!

Ⅱ、文件类型和访问权限(事物属性)

 1.文件类型

window系统下,我们习惯采用后缀名的方式去区分文件,而在Linux下并不通过后缀名去区分文件,但这并不是说不需要后缀!!!那是如何区分呢?

d:代表该文件是一个目录文件

-:代表普通文件

b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
l:软链接(类似Windows的快捷方式)

值得注意的是:Linux不通过后缀名去区分文件类型,但是Linux上面的工具可能区分!!

演示一下:现在有个.c后缀的C语言代码

若将其后缀改为.txt,在使用gcc编译器(Linux中编译工具)去编译,这时会失败!因为gcc只编译.c为后缀的文件

所以在Linux上我们可以使用后缀!!!以防上面的情况出现嘛!

file指令(查看文件类型)

命令:file 【选项】文件或者目录......

常用选项:

        -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
        -z 尝试去解读压缩文件的内容。

2.文件权限

权限表示方法:
a、字符表示

一般分三种:

①r:可读

②w:可写

③x:可执行

注意:是3个3个为一组,依次拥有者、所属组、其他!每一组的第一个字符为是否可读,是就为r,否则为-,第二个字符为是否可写,第三个字符为是否可执行!!!

b、8进制表示
权限符号8进制二进制
r--4100
-w-2010
--x1001
rw-6110
r-x5101
-wx3011
rwx7111
---0000

举例:

小总结:不难发现,当具有某个权限时,对应位置就记为1,不具有就是0,3个3个位一组,再转化为8进制!!

细节问题:如何理解X可执行权限vs 可执行?

先看演示:

可以看到,虽然test.txt具有x可执行权限,但是它本身并不可执行文件,因此它不能运行!

在看演示:

上图可以看出,a.out本身是一个可执行文件,但是呢当去掉可执行权限x时,它也不能运行了!!

从上面的两个案例可以得出:可执行=具有可执行权限x+文件本身就是一个可执行文件

两者缺一不可!!!

权限的修改方式

通过概念我们知道:权限=人 + 文件的属性。所以修改的方法也有多种,可以改“人”,也可以改“文件”。

注意:一个文件权限的修改,只能是root或者文件的拥有者!!

a、修改文件属性

字符修改

u:拥有者

g:所属组

o:其他人

a:所有的人

+:增加权限

-:取消权限

①单个修改

命令:chmod  u/g/o/a +-  r/w/x/rwx的组合  filename(文件名)

演示:

②多个一起修改

命令:chmod  u+-  r/w/x/rwx的组合,g+-  r/w/x/rwx的组合,o+-  r/w/x/rwx的组合   filename(文件名)

演示:

8进制修改

命令:chmod  8进制  filename

演示:

b、修改“人” 

注意:需要root身份才能执行,可以采用su指令切换身份或者sudo + 对应操作指令进行提权!!

①修改文件拥有者:

命令:chown 新的用户名  文件名

②修改文件所属组:

命令:chgrp  [参数] 用户名  文件名

参数:-r 递归修改文件或者目录的所属组

③同时修改

命令:chown  name1:name2  filename

含义:依次将对应文件的拥有者、所属组给改了!

注意:为啥没有other?其实就是因为当你既不是拥有者也不是所属组的时候,那你注定是其他人咯!!

把文件给别人是强制给的!!!

权限有无的表现 

①普通用户

情景1:文件本身

可见当文件没有rwx时,上述的指令都不能实现文件的相关操作,即不可读不可写不执行!!!

情景2:人相关

上述操作的含义:首先我是suri这个用户,对于newfile.txt这个文件来说我既不是拥有者也不是所属组,那么suri用户为其他人,而其他人没有rwx权限,所以当suri访问newfile.txt这个文件时,既不能写也不能读更不可执行!!

情景3:人的匹配问题

大家看到这个估计有疑问了,suri这个用户他虽然不是拥有着但是他是所属组啊,所属组具有可读可写可执行啊,为啥会失败?

实际上就是匹配问题:对用户的身份识别,只进行一次匹配!一旦匹配成功,就不会在进行下去!所以suri用户第一次匹配到的就是拥有者的身份,而拥有者并没有rwx权限,因此操作失败!!

来看个成功的演示:

对于suri用户具有可读可写可执行权限,但是呢因为newfile.txt本身就不是一个可执行文件,即使给了它可执行权限也没有太大用。

②root用户

对于root,权限对于它来说是没有任何作用的,因为他就是最高的权力者!!!

演示看看root的权力:

上述操作中,root对于文件newfile.txt是其他人的身份,该文件其他人权限并没有rwx,但是呢,root一样可以读写可执行,但由于文件本身不是一个可执行文件,因此无法成功执行!!

从上述案例可以看出,权限都是用来限制普通人的,它的存在就是为了保证普通用户文件的一般的安全性!!!!!

3.目录权限

  • 可读(r)权限:决定用户能否查看指定目录内的文件信息

  • 可执行(X)权限:该权限的有无决定用户能否进入到指定目录中

  • 可读(W)权限:该权限的有无决定用户能否在指定的目录中新增,修改,删除文件!

由目录可读(W)权限引发的一个有意思的问题

难道普通用户就不能删除root文件吗?

来看操作

dir目录是在suri这个用户下的一个子目录,该目录里有着一批文件,其中里面存在着两个由root身份创建的文件,如下:

按照我们的认知,root用户是最高权力者,普通用户无法对他所创建的文件或者目录下手,但是事实真的如此吗?

可以看到,suri这个用户成功将root创建文件给删除了!逆天了?这个合理吗?答案是合理的!!

首先这个dir目录是在suri的家目录下的一个子目录,suri是该文件的拥有者(Linux下一切皆文件),它对该目录具有可读(W)权限

具有可读权限那就是说明suri这个用户能对该目录的内容进行增删改操作,即能对目录的文件以及其下的子目录进行增删改操作!!不管你是谁,你在我的目录下创建文件,那我就有权力删除!!

结论:删除一个文件和目标文件的属性没有任何的关系,只和该文件所在的目录有关系!!!也就是用户在当前目录是否具有w权限。如果有,那就可以进行删除操作,因为删除一个文件的本质就是修改目录的内容!!!!!

       如果我们想在Linux下实现多个用户文件级别的信息共享,那么我们只能在系统的非用户目录下去创建,不能再任何一个用户的家目录下去创建该文件!!因为一个用户的家目录是不能随便进入的!

        在系统的非用户目录下去新建一个共享目录,默认其他人的w权限是放开的,因为要进行文件共享,w权限必须打开。一旦打开w权限,那么其他人都具有删除当前目录下的文件的能力。可是我们并不希望这样的情况发生,共享目录下不仅仅有一个用户,而是多个用户,如果每个用户都具有删除其他文件的能力,那就不合理了!人家辛辛苦苦写的文件,你说删就删?

        因此针对上述不科学的现象,关闭w权限是不可能的的了,那就需要给这个共享目录添加一个粘滞位了,该粘滞位仅用于目录,并且用于限制其他人!

粘滞位(为目录准备的)

命令chmod +t  目标目录

t:相当于x的加强版,能进目录但不能删除目标目录下的文件及其他内容!

用途:可以将一个目录设置为粘滞位,被设置粘滞位的目录,该目录下的内容(文件)只能由

①root用户删除

②该文件的拥有者删除

演示:

上述操作:可以看到,syw这个用户对于该共享目录来说是其他人,具有w权限,但由于这个目录对其他人添加了粘滞位,syw用户就不能删除当前目录下的任何一个文件,但可以新建文件!能不能改人家的文件得看他有没有这个权限咯!

4.权限掩码umask

为社么每次我们在新建目录或者文件的时候,好像都有一个默认权限,文件的是664,目录的是775?

Linux下:

创建文件的起始权限:0666,去掉x的

创建目录的起始权限:0777,包含x的

规定:创建文件/目录的时候,要从起始权限中,过滤掉(不是简单减法)在umask中出现的权限!

最终的权限=起始权限 & (~umask)

注意:umask大家的默认值不一样是正常的,不同的环境下一般都不一样,比如小编的centos7.8下的umask为0002

所以根据上面的公式:

创建一个文件的最终权限:0664=0666 &(~0002)

创建一个目录的最终权限:0775=0777 &(~0002)

以文件为例:

当然哦,这个umask我们也可以手动修改,指令也非常简单

修改后在新建文件/目录时,默认的权限也会改变!


好了,以上就是小编在Linux学习权限的心得与总结,如果对你有帮助,只需点赞和收藏!!有问题,欢迎来真实!

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

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

相关文章

使用AOP优化Spring Boot Controller参数:自动填充常用字段的技巧

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 使用AOP优化Spring Boot Controller参数:自动填充常用字段的技巧 前言为什么使用AOP为…

2-41 基于matlab的小车倒立摆系统的控制及GUI动画演示

基于matlab的小车倒立摆系统的控制及GUI动画演示。输入小车及倒立摆的初始参数,位置参数,对仿真时间和步长进行设置,通过LQR计算K值,进行角度、角速度、位置、速度仿真及曲线输出,程序已调通,可直接运行。 …

昇思MindSpore学习总结十七 —— 基于MindSpore通过GPT实现情感分类

1、要求 2、导入了一些必要的库和模块 以便在使用MindSpore和MindNLP进行深度学习任务时能使用各种功能,比如数据集处理、模型训练、评估和回调功能。 import os # 导入操作系统相关功能的模块,如文件和目录操作import mindspore # 导入MindSpore库&a…

HTTPServer改进思路2(mudou库核心思想融入)

mudou网络库思想理解 Reactor与多线程 服务器构建过程中,不仅仅使用一个Reactor,而是使用多个Reactor,每个Reactor执行自己专属的任务,从而提高响应效率。 首先Reactor是一种事件驱动处理模式,其主要通过IO多路复用…

基于WebGoat平台的SQL注入攻击

目录 引言 一、安装好JAVA 二、下载并运行WebGoat 三、注册并登录WebGoat 四、模拟攻击 1. 第九题 2. 第十题 3. 第十一题 4. 第十二题 5. 第十三题 五、思考体会 1. 举例说明SQL 注入攻击发生的原因。 2. 从信息的CIA 三要素(机密性、完整性、可用性&…

JAVA:Filer过滤器+案例:请求IP访问限制和请求返回值修改

JAVA:Filer过滤器 介绍 Java中的Filter也被称为过滤器,它是Servlet技术的一部分,用于在web服务器上拦截请求和响应,以检查或转换其内容。 Filter的urlPatterns可以过滤特定地址http的请求,也可以利用Filter对访问请求…

[数据分析]脑图像处理工具

###############ATTENTION!############### 非常需要注意软件适配的操作系统!有些仅适用于Linux,可以点进各自软件手册查看详情。 需要自行查看支持的影像模态。 代码库和软件我没有加以区分。 不是专门预处理的博客!&#xf…

Richteck立锜科技电源管理芯片简介及器件选择指南

一、电源管理简介 电源管理组件的选择和应用本身的电源输入和输出条件是高度关联的。 输入电源是交流或直流?需求的输出电压比输入电压高或是低?负载电流多大?系统是否对噪讯非常敏感?也许系统需要的是恒流而不是稳压 (例如 LED…

Mac装虚拟机占内存吗 Mac用虚拟机装Windows流畅吗

如今,越来越多的Mac用户选择在他们的设备上安装虚拟机来运行不同的操作系统。其中,最常见的是使用虚拟机在Mac上运行Windows。然而,许多人担心在Mac上装虚拟机会占用大量内存,影响电脑系统性能。此外,有些用户还关心在…

k8s中部署nacos

1 部署nfs # 在k8s的主节点上执行 mkdir -p /appdata/download cd /appdata/download git clone https://github.com/nacos-group/nacos-k8s.git 将nacos部署到middleware的命名空间中 kubectl create namespace middleware cd /appdata/download/nacos-k8s # 创建角色 kub…

图论模型-迪杰斯特拉算法和贝尔曼福特算法★★★★

该博客为个人学习清风建模的学习笔记,部分课程可以在B站:【强烈推荐】清风:数学建模算法、编程和写作培训的视频课程以及Matlab等软件教学_哔哩哔哩_bilibili 目录 ​1图论基础 1.1概念 1.2在线绘图 1.2.1网站 1.2.2MATLAB 1.3无向图的…

ABAP打印WORD的解决方案

客户要求按照固定格式输出到WORD模板中,目前OLE和DOI研究了均不太适合用于这种需求。 cl_docx_document类可以将WORD转化为XML文件,利用替换字符串方法将文档内容进行填充同 时不破坏WORD现有格式。 首先需要将WORD的单元格用各种预定义的字符进行填充…

canvas:矢量点转栅格

案例描述 ArcGIS提供了“点转栅格”的工具,可以将矢量点转换为栅格数据,以下尝试基于canvas绘图技术,实现经纬度矢量点转换为canvas栅格数据,并在Cesium.js三维地图中进行渲染。 原始数据 转出栅格 案例分析 实现的关键点在于:如何将经纬度坐标与canvas画布坐标进…

【Vue3】工程创建及目录说明

【Vue3】工程创建及目录说明 背景简介开发环境开发步骤及源码 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日…

Figma 中文版指南:获取和安装汉化插件

Figma是一种主流的在线团队合作设计工具,也是一种基于 Web 端的设计工具。在当今的设计时代,Figma 的使用满足了每个人的设计需求,不仅可以实现在线编辑,还可以方便日常管理,有效提高工作效率。然而,相信很…

Java查询ES报错 I/O 异常解决方法: Request cannot be executed; I/O reactor status: STOPPED

问题 ES Request cannot be executed; I/O reactor status: STOPPED 报错解决 在使用ES和SpringBoot进行数据检索时,在接口中第一次搜索正常。第二次在搜索时在控制台就会输出Request cannot be executed; I/O reactor status: STOPPED错误 原因 本文错误是因为在使…

51单片机14(独立按键实验)

一、按键介绍 1、按键是一种电子开关,使用的时候,只要轻轻的按下我们的这个按钮,按钮就可以使这个开关导通。 2、当松开这个手的时候,我们的这个开关,就断开开发板上使用的这个按键,它的内部结构&#xff…

用Java手写jvm之实现java -version的效果

写在前面 源码 。 本文来用纯纯的Java代码来实现java -version的效果,就像下面这样: 1:程序 这里输出类似这样的: java version "9" Java(TM) SE Runtime Environment (build 9181) Java HotSpot(TM) 64-Bit Serve…

突破•指针二

听说这是目录哦 复习review❤️野指针🫧assert断言🫧assert的神奇之处 指针的使用和传址调用🫧数组名的理解🫧理解整个数组和数组首元素地址的区别 使用指针访问数组🫧一维数组传参的本质🫧二级指针&#x…

filebeat,kafka,clickhouse,ClickVisual搭建轻量级日志平台

springboot集成链路追踪 springboot版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version><relativePath/> <!-- lookup parent from…