【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+D或exit
以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. …...
json格式,curl命令,及轻量化处理工具
一. JSON格式 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于一个子集的JavaScript编程语言,使用人类易于阅读的文本格式来存储和表示数据。尽管名字中有“JavaScript”,但JSON是语言无关的,几…...
DeepSeek模拟阿里面试——java面向对象
作为一位阿里高级Java程序员面试官,我会围绕Java面向对象编程的核心概念、实际应用以及设计原则设计问题,以全面评估候选人的理解和应用能力。以下是可能的面试问题: 基本概念与实现方式 请解释Java中封装、继承、多态的基本概念及其在Java中…...
web直播弹幕抓取分析 signature
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言 最近遇到太多难点了卡了很久&am…...
【04】RUST特性
文章目录 隐藏shadowing所有权ownership堆区&栈区所有权规则变量&数据Copy Trait与Drop TraitCopy TraitDrop Trait移动克隆函数参数与返回值的所有权参数引用可变引用悬垂引用slice生命周期隐藏shadowing 有点像同名覆盖 let mut guess = String::new();let guess: u3…...
PL/SQL块结构
目录 一、声明部分(declare) 二、执行部分(begin end) 三、异常处理部分 (Exception end) 四、代码示例 PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库…...
基于 FFmpeg 和 OpenGLES 的 iOS 视频预览和录制技术方案设计
基于 FFmpeg 和 OpenGLES 的 iOS 视频预览和录制技术方案设计 在 iOS 上实现一个基于 FFmpeg 和 OpenGLES 的视频预览和录制功能,需要结合 FFmpeg 的强大音视频处理能力和 OpenGLES 的高效图形渲染能力。以下是一个完整的技术方案设计,包含项目的架构设计、模块划分、技术选…...
【LeetCode 刷题】贪心算法(4)-区间问题
此博客为《代码随想录》贪心算法章节的学习笔记,主要内容为贪心算法区间问题的相关题目解析。 文章目录 55. 跳跃游戏45. 跳跃游戏 II452. 用最少数量的箭引爆气球435. 无重叠区间763. 划分字母区间56. 合并区间 55. 跳跃游戏 题目链接 class Solution:def canJu…...
提示工程 | 目的 | 常用技巧
什么是提示工程 提示工程也叫指令工程,Prompt就是你发给大模型的指令,比如:画幅画,写首诗等。貌似简单,但意义非凡,Prompt是AGI时代的编程语言,Prompt工程是AGI时代的软件工程,提示…...
ABP框架9——自定义拦截器的实现与使用
一、AOP编程 AOP定义:面向切片编程,着重强调功能,将功能从业务逻辑分离出来。AOP使用场景:处理通用的、与业务逻辑无关的功能(如日志记录、性能监控、事务管理等)拦截器:拦截方法调用并添加额外的行为,比如…...
Generate html
"Generate HTML"(生成 HTML)指的是通过程序或工具自动创建 HTML 代码的过程。HTML(超文本标记语言)是用于创建网页内容和结构的标准语言。生成 HTML 通常意味着通过某些方式自动化地构建或生成网页的结构和元素…...
CUDA 计算平台 CUDA 兼容性【笔记】
在 b 站看过的两个关于 CUDA 的技术分享,整理分享下对自己有用的课件。 20231130 2023第9期 聊一聊常见的AI计算平台库_哔哩哔哩_bilibili20230831 2023第6期 聊一聊CUDA兼容性_哔哩哔哩_bilibili 文章目录 CUDA 计算平台CUDA 函数库介绍英伟达三大护城河࿱…...
移动(新)魔百盒刷机教程[M301A_YS]
刚刚成功刷了一个坏的魔百盒,简单记录一下。 刷电视盒子有两种:卡刷和线刷。 线刷 一、线刷准备 1.刷机工具 Amlogic USB Burning Tool 晶晨线刷烧录工具 2.固件 根据盒子的型号、代工等找到对应的固件 二、线刷步骤 电脑打开下好的 Amlogic US…...
最新消息 | 德思特荣获中国创新创业大赛暨广州科技创新创业大赛三等奖!
2024年12月30日,广州市科技局公开第十三届中国创新创业大赛(广东广州赛区)暨2024年广州科技创新创业大赛决赛成绩及拟获奖企业名单,德思特获得了智能与新能源汽车初创组【第六名】【三等奖】的好成绩! 关于德思特&…...
基于机器学习的DDoS检测系统实战
基于机器学习的DDoS检测系统实战(PythonScikit-learn)|毕业设计必备 摘要:本文手把手教你从0到1实现一个轻量级DDoS攻击检测系统,涵盖数据预处理、特征工程、模型训练与可视化分析。 一、项目背景与意义 DDoS&#x…...
ubuntu安装VMware报错/dev/vmmon加载失败
ubuntu安装VMware报错/dev/vmmon加载失败,解决步骤如下: step1:为vmmon和vmnet组件生成密钥对 openssl req -new -x509 -newkey rsa:2048 -keyout VMW.priv -outform DER -out VMW.der -nodes -days 36500 -subj "/CNVMware/"ste…...
使用条件随机场(CRF)进行文本分类并评估模型性能
目标: 使用条件随机场(CRF)模型对文本数据进行分类,并评估模型的性能。任务包括读取数据、划分训练集和测试集、训练CR # 1.数据读取与预处理: # o使用open函数读取包含文本和标签的CSV文件。 # o将每一行数据分为文本…...
python的列表、元组、深拷贝、浅拷贝(四)
python的列表 一、序列1. 序列定义2. 序列数据类型包括3.特点:都支持下面的特性 二、 列表1. 列表的创建2. 列表的基本特性(1) 连接操作符喝重复操作符(2) 成员操作符(in , not in )(3) 索引(4) 切片练习(5) for循环 3. 列表的常用方法(1) 一…...
2.10作业
思维导图 C C语言...
【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)
目录 一、引言 二、MMoE(Multi-gate Mixture-of-Experts,多门混合专家网络) 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一、…...
RuoYi-Vue-Oracle的oracle driver驱动配置问题ojdbc8-12.2.0.1.jar的解决
RuoYi-Vue-Oracle的oracle driver驱动配置问题ojdbc8-12.2.0.1.jar的解决 1、报错情况 下载:https://gitcode.com/yangzongzhuan/RuoYi-Vue-Oracle 用idea打开,启动: 日志有报错: 点右侧m图标,maven有以下报误 &…...
C# OpenCV机器视觉:对位贴合
在热闹非凡的手机维修街上,阿强开了一家小小的手机贴膜店。每天看着顾客们自己贴膜贴得歪歪扭扭,不是膜的边缘贴不整齐,就是里面充满了气泡,阿强心里就想:“要是我能有个自动贴膜的神器,那该多好啊…...
Baumer工业相机堡盟相机的相机传感器芯片清洁指南
Baumer工业相机堡盟相机的相机传感器芯片清洁指南 Baumer工业相机1.Baumer工业相机传感器芯片清洁工具和清洁剂2.Baumer工业相机传感器芯片清洁步骤2.1、准备步骤2.2、清洁过程1.定位清洁工具2.清洁传感器3.使用吹风装置 Baumer工业相机传感器芯片清洁的优势设计与结…...
SQL 大厂面试题目(由浅入深)
今天给大家带来一份大厂SQL面试覆盖:基础语法 → 复杂查询 → 性能优化 → 架构设计,大家需深入理解执行原理并熟悉实际业务场景的解决方案。 1. 基础查询与过滤 题目:查询 employees 表中所有薪资(salary)大于 10000…...
在Linux上部署Jenkins的详细指南
引言 在当今快速迭代的软件开发环境中,持续集成和持续交付(CI/CD)变得越来越重要。Jenkins作为一个开源自动化服务器,能够帮助开发者更高效地进行代码集成、测试和部署。本文将详细介绍如何在Linux系统上安装和配置Jenkins。 准…...
《我在技术交流群算命》(三):QML的Button为什么有个蓝框去不掉啊(QtQuick.Controls由Qt5升级到Qt6的异常)
有群友抛出类似以下代码和运行效果截图: import QtQuick import QtQuick.ControlsWindow {width: 640height: 480visible: truetitle: qsTr("Hello World")Button{anchors.centerIn: parentwidth: 100height: 40background: Rectangle {color: "red…...
Golang:Go 1.23 版本新特性介绍
流行的编程语言Go已经发布了1.23版本,带来了许多改进、优化和新特性。在Go 1.22发布六个月后,这次更新增强了工具链、运行时和库,同时保持了向后兼容性。 Go 1.23 的新增特性主要包括语言特性、工具链改进、标准库更新等方面,以下…...
在 PyTorch 中理解词向量,将单词转换为有用的向量表示
你要是想构建一个大型语言模型,首先得掌握词向量的概念。幸运的是,这个概念很简单,也是本系列文章的一个完美起点。 那么,假设你有一堆单词,它可以只是一个简单的字符串数组。 animals ["cat", "dog…...
deepseek API 调用-python
【1】创建 API keys 【2】安装openai SDK pip3 install openai 【3】代码: https://download.csdn.net/download/notfindjob/90343352...
PHP中的魔术方法
在 PHP 中,以两个下划线 __ 开头的方法被称为魔术方法,它们在特定场景下会自动被调用,以下是一些常见的魔术方法: 1.__construct():类的构造函数,在对象创建完成后第一个自动调用,用于执行初始…...
