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

news2024/12/23 22:59:50

目录

一、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学习权限的心得与总结,如果对你有帮助,只需点赞和收藏!!有问题,欢迎来真实!

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

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

相关文章

为什么阿里巴巴超级喜欢java开发?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 我猜可能是因为&#xff0…

GD32 MCU是如何进入中断函数的

用过GD32 MCU的小伙伴们都知道,程序是顺序执行的,但当有中断来的时候程序会跳转到中断函数,执行完中断函数后程序又继续回到原来的位置继续执行,那么你们知道MCU是如何找到中断函数入口的吗? 今天我们就以GD32F303系列…

MacOS M1 安装item2 并配置Zsh

文章目录 1 下载item22 美化item22.1 配置主题2.2 设置黑色的主题:2.3 配置显示状态栏 status bar 3 安装 Oh my zsh3.1 设置主题3.2 设置插件3.3 安装第三方插件1 下载仓库解压2 使用 git clone 一些常用插件以及其作用 参考 1 下载item2 MacOS自带终端&#xff0…

springboot个体快餐订单系统-计算机毕业设计源码13441

目 录 摘要 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 个体快餐订单系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 个…

ATA-7025高压放大器的参数特点与应用领域有哪些

高压放大器是一种电子设备,用于将低电压信号放大成高电压信号,其参数特点与应用领域有着广泛的应用。本文将从高压放大器的参数特点和主要应用领域两个方面展开详细介绍。 高压放大器的参数特点主要包括输入输出电压范围广、带宽宽、增益高、输出功率大等…

计网:物理层

写在开头:物理层就负责传送比特0和1, 本质上理解物理层就是理解传输介质哪个表示比特0和1,如:高电平表示1、低电平表示0等 物理层主要任务: 机械特性:指明接口所用接线器的形状和尺寸、引脚数目和排列、固…

数据结构之二元查找树转有序双向链表详解与示例(C/C++)

文章目录 1. 二元查找树(BST)简介2. 有序双向链表(DLL)简介3. 二元查找树的实现4. 转换为有序双向链表的步骤5. C实现代码6. C实现代码7. 效率与空间复杂度比较8. 结论 在数据结构与算法中,树和链表都是非常重要的数据…

八股文之java基础

jdk9中对字符串进行了一个什么优化? jdk9之前 字符串的拼接通常都是使用进行拼接 但是的实现我们是基于stringbuilder进行的 这个过程通常比较低效 包含了创建stringbuilder对象 通过append方法去将stringbuilder对象进行拼接 最后使用tostring方法去转换成最终的…

C# 基础语法(一篇包学会的)

C#(读作"C Sharp")是一种现代的、通用的面向对象编程语言,由微软公司开发。它结合了C和C的强大特性,并去掉了一些复杂性,使得开发者可以更加高效地编写代码。 一、入坑C# (一) 安装和设置 首先&#xff0c…

Modbus转BACnet/IP网关BA100-配硬件说明

在现代自动化系统中,不同设备和系统之间的通信至关重要,Modbus和BACnet/IP协议虽然各有优势,但它们之间的直接通信存在障碍。钡铼Modbus转BACnet/IP网关作为连接这两种协议的桥梁,允许不同系统之间的无缝数据交换。 一、Modbus转…

喜讯丨泰迪智能科技实力中标湖北民族大学数学与统计学院一流专业实验室建设项目

近日,泰迪智能科技凭借其卓越的技术实力与解决方案,在湖北民族大学数学与统计学院的一流专业实验室建设项目招标中脱颖而出,成功揽获该项目的建设权,中标项目金额达人民币355万元。 项目建设成果 一、实验室建设内容: …

提升无线网络安全:用Python脚本发现并修复WiFi安全问题

文章目录 概要环境准备技术细节3.1 实现原理3.2 创建python文件3.3 插入内容3.4 运行python脚本 加固建议4.1 选择强密码4.2 定期更换密码4.3 启用网络加密4.4 关闭WPS4.5 隐藏SSID4.6 限制连接设备 小结 概要 在本文中,我们将介绍并展示如何使用Python脚本来测试本…

数据结构(队列及其实现)

概念与结构 概念:只允许在⼀端进⾏插⼊数据操作,在另⼀端进⾏删除数据操作的特殊线性表, 队列具有先进先出FIFO(First In First Out)原则。 ⼊队列:进⾏插⼊操作的⼀端称为队尾 出队列:进⾏删除操作的⼀端称为队头…

TypeScript体操(二):Utility Type手写实现

目录 前言常用 Utility Types 及其实现Partial<T>Required<T>Readonly<T>Pick<T, K>Omit<T, K>Record<K, T>Exclude<T, U>Extract<T, U>NonNullable<T>ReturnType<T>InstanceType<T>Parameters<T>Con…

yolo5图片视频、摄像头推理demo

yolo5图片、视频推理demo 图片 import torch# 加载预训练模型 model torch.hub.load(./yolo5, custom, pathyolov5s.pt, sourcelocal)# 加载图片 img 1.jpg# 进行推理 results model(img)# 解析结果 detections results.xyxy[0].cpu().numpy() # [x1, y1, x2, y2, confid…

Windows下载、安装、部署Redis服务的详细流程

本文介绍在Windows电脑中&#xff0c;下载、安装、部署并运行Redis数据库服务的方法。 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源、高性能的键值存储系统&#xff0c;最初由Salvatore Sanfilippo在2009年发布&#xff0c;并由Redis Labs维护。Redis因其…

【爱上C++】list用法详解、模拟实现

文章目录 一&#xff1a;list介绍以及使用1.list介绍2.基本用法①list构造方式②list迭代器的使用③容量④元素访问⑤插入和删除⑥其他操作image.png 3.list与vector对比 二&#xff1a;list模拟实现1.基本框架2.节点结构体模板3.__list_iterator 结构体模板①模板参数说明②构…

如何在Ubuntu上安装并启动SSH服务(Windows连接)

在日常的开发和管理工作中&#xff0c;通过SSH&#xff08;Secure Shell&#xff09;连接到远程服务器是一个非常常见的需求。如果你在尝试通过SSH连接到你的Ubuntu系统时遇到了问题&#xff0c;可能是因为SSH服务未安装或未正确配置。本文将介绍如何在Ubuntu上安装并启动SSH服…

气膜工业仓储与气膜体育馆的配置区别—轻空间

气膜工业仓储和气膜体育馆在配置上有明显的区别&#xff0c;这主要是由于它们的使用功能和环境不同所导致的。 结构设计 气膜工业仓储&#xff1a; 主要设计为大跨度、大空间&#xff0c;以便容纳大量货物。 气膜体育馆&#xff1a; 设计注重支撑观众席、运动场地和相关设施&…

安全与便捷并行,打造高效易用的用户支付体验

在当今数字时代&#xff0c;快捷、安全的支付方式已经成为用户日常生活中不可或缺的一部分。不论是在线购物、订阅服务&#xff0c;还是线下消费&#xff0c;用户都期望享受流畅且安全的支付体验。作为开发者&#xff0c;选择适合的支付服务不仅关乎用户体验&#xff0c;更直接…