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

【Linux】深入理解linux权限

🌟🌟作者主页:ephemerals__

🌟🌟所属专栏:Linux

目录

前言

一、权限是什么

二、用户和身份角色

三、文件属性

1. 文件属性表示

2. 文件类型

3. 文件的权限属性

四、修改文件的权限属性和角色

1. 修改权限属性

2. 修改文件角色

五、关于权限的三个问题

1. 目录的权限

2. 默认权限与实际权限

3. 删除权限与粘滞位

总结


前言

        在数字世界中,安全始终是最重要的基石,而Linux作为开源操作系统的璀璨明珠,其权限管理机制更是构筑安全防线的关键一环。本篇文章,我们将深入探讨Linux的权限体系,帮助你更好地掌控文件权限,构建更安全、可靠的工作环境。

一、权限是什么

        在Linux当中,权限指的是操作系统用于控制用户对文件或目录进行访问的机制,说白了,权限能决定用户能不能访问一个文件或目录,能以什么样的方式访问文件或目录。影响权限的因素:目标事物的属性和用户及其扮演的身份角色

二、用户和身份角色

        在Linux下,我们可以认为有两种用户:

1. root用户(超级用户) 几乎不受权限约束,可以任意访问文件或目录。

2. 普通用户Linux使用者,受权限约束。

创建用户:adduser [用户名]

设置密码:passwd [用户名]

切换用户: su [用户名]

切换到root用户:su

回退到之前用户:ctrl+Dexit

以root身份重新登录:su -

指令提权:sudo 指令

        注:指令提权本质是以root用户的身份执行命令

而“身份角色”是针对于具体事物,由用户所扮演的。身份角色有如下三种:

1. 文件拥有者(User,u)

2. 文件所属组(Group,g)

3. 其他人(Other,o)

 对于一个目录或文件而言,身份角色不同,它们所拥有的权限也不尽相同,其权限由文件属性和身份角色共同决定

三、文件属性

1. 文件属性表示

        使用 ls -l 指令显示文件信息,就可以看到文件属性

例如上图中的code文件,它的各项属性表示如下:

接下来,我们重点探讨一下文件类型以及权限属性。

2. 文件类型

文件类型

d:目录

-:普通文件

c:字符设备文件

b:块设备文件

p:管道文件

l:软链接文件

s:套接口文件

3. 文件的权限属性

         如上图所示,文件的权限属性针对三种角色可能有所不同,这就说明权限由文件属性和身份角色共同决定权限类型有三种:

r:可读--可以查看文件内容

w:可写--可以修改文件内容

x:可执行--可以运行

当权限属性的相应位置上有r/w/x时,表示该文件针对的角色具有读/写/执行该文件的权限,否则不具有相应权限。

以下两点需要注意:

对于root用户,无论其扮演的角色是否具有权限,其都可以进行相应操作。

一个文件可执行的两个必要条件:1. 文件具备可执行权限;2. 文件的类型是可执行程序。

        权限类型有字符表示方法八进制表示方法两种

当使用八进制表示方法表示权限属性时,一种角色的权限属性可以只用一位八进制数字表示,所以一个三位八进制数字就可以表示全部角色的权限属性(修改权限属性时方便使用)。 

注意:针对某个文件来讲,一个扮演多种角色的用户的权限按照角色优先级进行对应。

角色优先级:拥有者>所属组>其他人

举例:对于一个文件test.txt,拥有者的权限是r--,而所属组的权限是-x-,而一个用户既作为该角色的拥有者,也作为所属组时,其权限是r--(拥有者优先级较高,与拥有者权限相同)。

四、修改文件的权限属性和角色

1. 修改权限属性

        我们可以使用chmod指令修改一个目录或文件的权限属性。它的语法如下:

chmod 选项 权限 文件名

常用选项-R  递归地修改目录及子目录的权限

其中,若使用字符表示法表示权限,则其格式是:(角色)(+/-)(r/w/x)

角色

u:表示拥有者

g:表示所属组

o:表示其他人

a:表示所有角色

+/-

+:表示新增权限

-:表示去除权限 

使用示例:

chmod u+r test.txt  #对于该文件,给拥有者增加读权限chmod g+rwx test.txt  #对于该文件,给所属组增加读、写、执行权限chmod a-x test.txt  #对于该文件,去除所有人的执行权限
chmod -x test.txt  #与上条指令等价chmod u+r,o-w test.txt  #对于该文件,给拥有者增加读权限,并去除其他人的写权限

当然我们也可以使用八进制表示方法设置文件权限。使用示例:

chmod 777 test.txt  #针对该文件,给所有人增加所有权限
chmod 456 test.txt  #针对该文件,设置拥有者的八进制权限编号为4,所属组为5,其他人为6

注意只有文件的拥有者或具有root权限才能修改和设置文件的权限属性

2. 修改文件角色

        除了文件的权限属性,文件角色也可以被修改。

chown指令修改文件拥有者

chown 用户名 文件名

使用示例:

chown user test.txt  #将test.txt的拥有者改为user
chown -R user mydir/...  #将目录mydir及其子目录的拥有者改为user

chgrp指令修改文件所属组

chgrp 用户名 文件名

 使用示例:

chgrp user test.txt  #将test.txt的所属组改为user
chgrp -R user mydir/...  #将目录mydir及其所有子目录的所属组改为user

 注意只有具有root权限才能修改文件拥有者;只有文件的拥有者或具有root权限才可以修改该文件所属组

五、关于权限的三个问题

1. 目录的权限

对于一个目录而言:

        如果没有权限,就无法查看该目录下的文件信息;

        如果没有权限,那么就无法创建、删除、修改该目录内部的文件;

        如果没有执行权限,那么无法进入该目录。

注意:即使一个目录有读权限,但若没有执行权限,那么仍然无法进入该目录,并且无法在该目录下执行命令和查看该目录下文件的详细信息。

2. 默认权限与实际权限

        在Linux下,一个普通文件,它的默认权限是rw- rw- rw-(666);而一个目录的默认权限是rwx rwx rwx(777)

        但当我们创建一个普通文件和目录后,可以看到其权限属性并非是默认值

相比默认权限,两者的实际权限貌似缺失了所属组和其他人的读权限。这是为什么呢?

        实际上,存在一种叫做umask权限掩码的机制,它控制的是新创建文件和目录时,哪些权限将被去除。注意:它并不会直接赋予权限,而是通过限制默认权限来间接设定权限。

可以使用umask指令查看umask码:

可以看到,当前系统的umask为022(最高位的0暂且省略),它其实是一个三位八进制数字,与八进制数字表示的权限属性相呼应。

掩码规则:文件的实际权限 = 默认权限(八进制)- umask

所以我们看到的文件和目录的实际权限是:

目录:777 - 022 = 755 (rwx r-x -r-x)

文件:666 - 022 = 644 (rw- r-- r--)

        当然,umask也可支持修改,使用示例如下:

umask 002  #将umask修改为002

修改umask,可以达到修改实际权限的效果。

3. 删除权限与粘滞位

        删除一个文件,看的不是该文件的读/写/执行权限,而是需要该文件所在目录的写权限执行权限,因为执行权限决定了是否可以进入目录;写权限决定了是否可以删除目录下文件。

        但这种设定似乎并不合理:假设有一个用户,其无权访问文件A,但可能有权删除文件A。

        所以Linux出现了一种机制:粘滞位,用于防止无关人员删除重要文件

当一个目录被设置为粘滞位后,其下的文件或目录只能由以下两者删除:

1. root用户

2. 当前文件或目录的所有者

也就是说,除了root用户之外,该目录下的文件或目录,只有自己的,才能被自己删除。

设置粘滞位的指令:

chmod +t 目录名

总结:如果想要共享一个目录,并且确保目录下的文件不被删除,那么就需要设置粘滞位。

有两点需要注意:

1. 根目录下的tmp目录自带粘滞位,可以用做共享目录。

2. 粘滞位只需给目录设置,不需要给普通文件设置。 

总结

        本篇文章,我们深入探讨了Linux系统中的权限管理,包括权限的概念、用户角色、文件属性及其权限设置的操作方法。了解并掌握这些内容对于管理Linux系统的安全性至关重要。通过合理配置文件权限和用户角色,可以有效控制文件访问、提高系统的安全性和灵活性。如果你觉得博主讲的还不错,就请留下一个小小的赞在走哦,感谢大家的支持❤❤❤

相关文章:

【Linux】深入理解linux权限

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:Linux 目录 前言 一、权限是什么 二、用户和身份角色 三、文件属性 1. 文件属性表示 2. 文件类型 3. 文件的权限属性 四、修改文件的权限属性和角色 1. …...

C++STL(六)——list模拟

目录 本次所需实现的三个类一、结点类的模拟实现构造函数 二、迭代器类的模拟实现为什么有迭代器类迭代器类的模板参数说明构造函数运算符的重载- -运算符的重载和!运算符的重载*运算符的重载->运算符的重载引入模板第二个和第三个参数 三、list的模拟实现3.1 默认成员函数构…...

网络安全与AI:数字经济发展双引擎

在2025年年初,一场科技攻防战引发了全球关注。国产人工智能DeepSeek的爆火,伴随着大规模的网络攻击事件,将网络安全的重要性推上了风口浪尖。 在此背景下,我们计划探讨网络安全与人工智能如何为数字经济发展提供强大动力。网络安…...

WPS接入DeepSeek模型

1.wps 下载安装 WPS-支持多人在线协作编辑Word、Excel和PPT文档_WPS官方网站 (最好是安装最新的wps) 2.offieceAi工具下载安装 软件下载 | OfficeAI助手 下载后安装下载下来的两个工具。安装路径可以自行修改 3.打开WPS,点击文件-》 选项-》信任中心 勾…...

深度学习之神经网络框架搭建及模型优化

神经网络框架搭建及模型优化 目录 神经网络框架搭建及模型优化1 数据及配置1.1 配置1.2 数据1.3 函数导入1.4 数据函数1.5 数据打包 2 神经网络框架搭建2.1 框架确认2.2 函数搭建2.3 框架上传 3 模型优化3.1 函数理解3.2 训练模型和测试模型代码 4 最终代码测试4.1 SGD优化算法…...

采用分步式无线控制架构实现水池液位自动化管理

以下是基于巨控GRM241Q-4D4I4QHE模块的完整技术方案,采用分步式无线控制架构实现水池液位自动化管理: 一、系统架构设计 硬件部署 山顶单元 GRM241Q模块(带4G功能) 液位计(4-20mA) 功能:实时采…...

OpenEuler学习笔记(二十三):在OpenEuler上部署开源MES系统

在OpenEuler上部署小企业开源MES(制造执行系统,Manufacturing Execution System)是一个非常有价值的项目,可以帮助企业实现生产过程的数字化管理。以下是基于开源MES系统(如 Odoo MES 或 OpenMES)的部署步骤…...

SpringSecurity:授权服务器与客户端应用(入门案例)

文章目录 一、需求概述二、基本授权登录功能实现1、授权服务器开发2、客户端开发3、功能测试 三、自定义授权服务器登录页1、授权服务器开发2、功能测试 四、自定义授权服务器授权页1、授权服务器开发2、功能测试 五、客户端信息保存数据库1、授权服务器开发2、功能测试 一、需…...

没用的文章又➕1

次次登陆GitHub都让我抓心挠肝,用了热度最高的法子也不抵事儿。谁说github上全是大神了,也要有我这样的小菜鸟。下面是我的失败记录… 查询目标网站的DNS 在whois上输入目标网站github.com,在查询结果当中选取任意一个DNS将地址和名称添加在…...

BiGRU双向门控循环单元多变量多步预测,光伏功率预测(Matlab完整源码和数据)

代码地址:BiGRU双向门控循环单元多变量多步预测,光伏功率预测(Matlab完整源码和数据) BiGRU双向门控循环单元多变量多步预测,光伏功率预测 一、引言 1.1、研究背景和意义 随着全球对可再生能源需求的不断增长,光伏…...

谷歌浏览器多开指南:如何完成独立IP隔离?

对于跨境电商来说,在进行社交媒体营销、广告投放等业务活动时,往往需要同时登录多个账号来提高运营效率和提升营销效果。然而,如果这些账号共享相同的 IP 地址,很容易被平台检测为关联账号,进而触发安全验证甚至封禁。…...

Django开发入门 – 3.用Django创建一个Web项目

Django开发入门 – 3.用Django创建一个Web项目 Build A Web Based Project With Django By JacksonML 本文简要介绍如何利用最新版Python 3.13.2来搭建Django环境,以及创建第一个Django Web应用项目,并能够运行Django Web服务器。 创建该Django项目需…...

【Java】多线程和高并发编程(三):锁(下)深入ReentrantReadWriteLock

文章目录 4、深入ReentrantReadWriteLock4.1 为什么要出现读写锁4.2 读写锁的实现原理4.3 写锁分析4.3.1 写锁加锁流程概述4.3.2 写锁加锁源码分析4.3.3 写锁释放锁流程概述&释放锁源码 4.4 读锁分析4.4.1 读锁加锁流程概述4.4.1.1 基础读锁流程4.4.1.2 读锁重入流程4.4.1.…...

讲解ES6中的变量和对象的解构赋值

在 ES6 中,解构赋值是一种非常方便的语法,它使得从数组或对象中提取值变得更加简洁和直观。解构赋值支持变量赋值,可以通过单独提取数组或对象的元素来赋值给变量。 下面我将分别讲解 数组解构 和 对象解构 的基本用法和一些高级特性。 1. …...

DeepSeek Coder + IDEA 辅助开发工具

开发者工具 我之前用的是Codegeex4模型,现在写一款DeepSeek Coder 本地模型 DeepSeek为什么火,我在网上看到一个段子下棋DeepSeek用兵法赢了ChatGpt,而没有用技术赢,这就是AI的思维推理,深入理解孙子兵法&#xff0c…...

云计算——AWS Solutions Architect – Associate(saa)4.安全组和NACL

安全组一充当虚拟防火墙对于关联实例,在实例级别控制入站和出站流量。 网络访问控制列表(NACL)一充当防火墙关联子网,在子网级别控制入站和出站流量。 在专有网络中,安全组和网络ACL(NACL)一起帮助构建分层网络防御。 安全组在实例级别操作…...

动量+均线组合策略关键点

动量均线组合策略关键点: 趋势确认: MA系统判断主趋势方向动量指标判断趋势强度 入场条件: 价格站上重要均线(如20日线)动量指标向上并保持高位短期均线上穿长期均线 出场条件: 价格跌破均线系统动量指标见顶回落短期均线下…...

Blazor-<select>

今天我们来说说<select>标签的用法&#xff0c;我们还是从一个示例代码开始 page "/demoPage" rendermode InteractiveAuto inject ILogger<InjectPage> logger; <h3>demoPage</h3> <select multiple>foreach (var item in list){<…...

Synchronized使用

文章目录 synchronized使用基本概念使用方法实现原理锁的粒度并发编程注意事项与Lock锁对比比较线程安全性与性能 synchronized使用 当涉及到多线程编程时&#xff0c;保证数据的正确性和一致性是至关重要的。而synchronized关键字是Java语言中最基本的同步机制之一&#xff0…...

OpenStack四种创建虚拟机的方式

实例&#xff08;Instances&#xff09;是在云内部运行的虚拟机。您可以从以下来源启动实例&#xff1a; 一、上传到镜像服务的镜像&#xff08;Image&#xff09; 使用已上传到镜像服务的镜像来启动实例。 二、复制到持久化卷的镜像&#xff08;Volume&#xff09; 使用已…...

Expo运行模拟器失败错误解决(xcrun simctl )

根据你的描述&#xff0c;问题主要涉及两个方面&#xff1a;xcrun simctl 错误和 Expo 依赖版本不兼容。以下是针对这两个问题的解决方案&#xff1a; 解决 xcrun simctl 错误 错误代码 72 通常表明 simctl 工具未正确配置或路径未正确设置。以下是解决步骤&#xff1a; 确保 …...

Docker从入门到精通- 容器化技术全解析

第一章&#xff1a;Docker 入门 一、什么是 Docker&#xff1f; Docker 就像一个超级厉害的 “打包神器”。它能帮咱们把应用程序和它运行所需要的东东都整整齐齐地打包到一起&#xff0c;形成一个独立的小盒子&#xff0c;这个小盒子在 Docker 里叫容器。以前呢&#xff0c;…...

开启对话式智能分析新纪元——Wyn商业智能 BI 携手Deepseek 驱动数据分析变革

2月18号&#xff0c;Wyn 商业智能 V8.0Update1 版本将重磅推出对话式智能分析&#xff0c;集成Deepseek R1大模型&#xff0c;通过AI技术的深度融合&#xff0c;致力于打造"会思考的BI系统"&#xff0c;让数据价值触手可及&#xff0c;助力企业实现从数据洞察到决策执…...

RabbitMQ 消息顺序性保证

方式一&#xff1a;Consumer设置exclusive 注意条件 作用于basic.consume不支持quorum queue 当同时有A、B两个消费者调用basic.consume方法消费&#xff0c;并将exclusive设置为true时&#xff0c;第二个消费者会抛出异常&#xff1a; com.rabbitmq.client.AlreadyClosedEx…...

防御保护作业二

拓扑图 需求 需求一&#xff1a; 需求二&#xff1a; 需求三&#xff1a; 需求四&#xff1a; 需求五&#xff1a; 需求六&#xff1a; 需求七&#xff1a; 需求分析 1.按照要求进行设备IP地址的配置 2.在FW上开启DHCP功能&#xff0c;并配置不同的全局地址池&#xff0c;为…...

Spring Boot中实现多租户架构

文章目录 Spring Boot中实现多租户架构多租户架构概述核心思想多租户的三种模式优势挑战租户识别机制1. 租户标识(Tenant Identifier)2. 常见的租户识别方式3. 实现租户识别的关键点4. 租户识别示例代码5. 租户识别机制的挑战数据库隔离的实现1. 数据库隔离的核心目标2. 数据…...

【AI-27】DPO和PPO的区别

DPO&#xff08;Direct Preference Optimization&#xff09;和 PPO&#xff08;Proximal Policy Optimization&#xff09;有以下区别&#xff1a; 核心原理 DPO&#xff1a;基于用户偏好或人类反馈直接优化&#xff0c;核心是对比学习或根据偏好数据调整策略&#xff0c;将…...

Git stash 暂存你的更改(隐藏存储)

一、Git Stash 概述 在开发的时候经常会遇到切换分支时需要你存储当前的更改&#xff0c;如果你暂时不想应用当前更改也不想放弃更改&#xff0c;那么你可以使用 git stash先将其隐藏存储&#xff0c;这样代码就会变成未修改的状态&#xff0c;等解决其他问题后&#xff0c;在…...

负载测试和压力测试的原理分别是什么

负载测试和压力测试是性能测试的两种主要类型&#xff0c;它们的原理和应用场景有所不同。 负载测试&#xff08;Load Testing&#xff09; 原理&#xff1a; 负载测试通过模拟实际用户行为&#xff0c;逐步增加系统负载&#xff0c;观察系统在不同负载下的表现。目的是评估系…...

shell脚本控制——定时运行作业

在使用脚本时&#xff0c;你也许希望脚本能在以后某个你无法亲临现场的时候运行。Linux系统提供了多个在预选时间运行脚本的方法&#xff1a;at命令、cron表以及anacron。每种方法都使用不同的技术来安排脚本的运行时间和频率。接下来将依次介绍这些方法。 1.使用at命令调度作…...