【Linux】文件权限与类型全解:你的文件安全指南
欢迎来到 CILMY23 的博客
🏆本篇主题为:文件权限与类型全解:你的文件安全指南
🏆个人主页:CILMY23-CSDN博客
🏆系列专栏:Python | C++ | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算法专题 | 代码训练营
🏆感谢观看,支持的可以给个一键三连,点赞收藏+评论。如果你觉得有帮助,还可以点点关注
前言:
Hello,大家好,这里是 CILMY23 的频道,上期我们接触了Linux中组和用户,组是为了让我们在多人协作的时候,更好的进行权限的管理,而角色和用户又是相补相成的,用户扮演具体的角色,角色又对用户进行补充,今天我们将了解文件权限和不同的文件类型。
文件的权限
回顾前言,我们说Linux中普通用户分为拥有者,所属组,other,root账户角色分root和other。真正存在的用户其实是root账户和普通用户。这两者之间是互相补充的,也就是说,root账户可能是拥有者,所属组,other,普通用户也可能是拥有者,所属组,other。接下来推荐是使用普通用户来进行操作,不使用root账户。
在上一期文章中,我们创建了三个文件,分别是file1,file2,file3.
这一串字符串从左到右依次代表了什么?
第一个和第二个我们暂时不看,第三个开始是,文件的拥有者,文件的所属组,文件的大小,文件最近一次的修改时间或者创建时间,文件名。
这次,我们要重点关注第一串字符串。
第一个字符"-",表示这个文件的文件类型。我们说看到开头是"-",它代表一个普通文件,如果是目录,开头则是"d"。这个我们在之前的文章中有写到过(指令篇ls)。
除此之外,还剩下九个字符,那为什么是九个字符呢?这个其实跟文件的属性权限有关:常见的是三种,下一篇会讲第四种(可执行权限)。
常见的文件权限:
- "r",读权限
- "w",写权限
- "x",可执行权限
所以我们经常描述一个文件的权限的时候,因为权限等于人+事物的属性,也就是角色+事物的属性,所以我们要谈一个文件的权限,必定是这个文件,它的拥有者具有什么权限,所属组具有什么权限,other具有什么权限,所以权限等于我们对应的人+事物属性,所以权限得分人去讨论。而我们的Linux当中,得分我们的账号,就是我们的角色一共会有三种角色。叫做拥有者,所属组和other。所以为什么这里是9列呢?
因为这九列是三三为一组。第一组表示拥有者权限,第二组表示所属组权限,第三组表示other权限。所以我们的权限是三三一组。
那我们先着重搞懂一组后,再搞懂其他组,因为搞懂一组之后,另外两组可以类推。我们从第一组拥有者权限开始,它有三个权限位置。rwx。
拥有者权限
拥有者权限(Owner Permissions) 是指文件或目录的创建者(即拥有者)对该文件或目录所具有的权限。具体来说:
- 读权限(r):允许拥有者查看文件的内容或列出目录中的文件名。
- 写权限(w):允许拥有者修改文件的内容或在目录中添加、删除文件。
- 执行权限(x):允许拥有者执行文件(如果是可执行文件)或进入目录。
说白了,也就是有这个权限,它就有对应的字母,没有这个权限,就是-。
修改文件对应权限
1.如何快速修改权限?
我们既然知道了拥有者的权限由三种构成,那能不能修改,如果能修改,应该如何修改?但是在探讨这个问题之前,我们得先了解一下,谁能修改?
其实一个文件的权限,能由对应的文件拥有者,或者root来修改。
我们可以通过实际操作来验证是否只能由这两个账户来修改文件的权限。
whoami,查看后确认我是文件的拥有者,所以我可以修改权限
我们可以使用指令chmod 来修改拥有者权限 ,chmod [用户类别][操作][权限] 文件名
u
:文件的拥有者(user)g
:所属组(group)o
:其他用户(others)a
:所有用户(all)
移除权限
实操如下:
指令:chmod
拥有者:u
减去权限,r,也就是删除权限。
功能:删除文件的读权限
指令:chmod
拥有者:u
减去权限,r,也就是删除权限。
功能:删除文件的拥有者的读权限
加权限
我们还可以把权限加回来
同样的,对修改所属组和other的使用方法也一样
总结起来就是,我们对单个人,它的任意权限组合,都可以采用字符组合的方式,来去掉一个人的一个权限,或一个人的多个权限。用户通过指令来修改权限,角色拥有对应的权限才能对文件进行对应的操作。
如何修改多个人的权限
多人的权限移除
如果我们想修改拥有者和所属组给他们两个都去掉w,可以采用逗号组合的形式。
多人的权限添加
所以我们可以更改一个人的多个权限,也可也更改多个人的一个权限,或者多个人的多个权限,只是组合时用,分离。
所有人移除权限
这样一个个选择过于麻烦了,所以我们可以直接用a(all)来代表所有人
所有人加权限
通过这些我们知道,所有人可以同时移除权限, 也可以所有人都加权限。而三种权限字符组合的顺序是无所谓的,当然不推荐这么干。
总结:
2.权限有无的表现
普通用户
我们在上述过程中体会了权限的修改,我们知道了用户能够通过chmod来修改对应角色的权限,可是 有权限和没权限的最终表现是什么?并且root本身叫超级管理员,什么都能做,可是在权限这里能否体现超级管理员的身份呢?
现在我们在同一个服务器下,可以看到左边是普通用户,右边是root账户,现在file1.txt没权限了,想用cat阅读,发现没法阅读,被拒绝了。用echo 想将字符串“hello world”输出到file1文件中,发现同样也被拒绝了。
文件是我的,但是没有权限,所以既不能读,也不能写,更不能执行。 但当我们开放对应权限,普通用户就能进行对应的操作。
所以我们能得到结论:对于普通用户,自身要受到对应权限的约束,即便这个文件是自己的!
root账户
那root就不信邪,就来尝试了,对于file1.txt文件来说,root相当于other。 那如果有权限,我root肯定是可以访问的,所以我们只要验证没有权限的情况就可以了。
我们可以发现,我们想怎么做都可以,我们可以进行读写而不被对应权限限制。就透露出一种我想读就读,想写就写,反正root不受权限的约束。
所以结论也比较明显,结论:root不受权限约束的!那能不能限制别人?也就是拦截普通用户。
权限匹配
通过上述我们可以看到,普通用户受到文件对应权限的约束,而root账户不受权限约束,但我们在验证普通用户的时候还漏掉一种情况,那就是如果我拥有者没权限,而所属组有权限呢?
如果我们当前,给拥有者去掉读写,细节是,我们此刻是文件的拥有者和文件的所属组。我当前去掉了拥有者的读写,他对于文件当前什么权限都没有。
我们发现都没权限:我现在是拥有者什么权限都没有,这一切都符合权限的定义,可是我当前也是文件的所属组,拥有者没权限,所属组是具有权限的呀,为什么不拿所属组权限匹配?
这是因为Linux进行权限匹配的时候,对用户身份进行识别的时候,只识别一次。
也就是说,当前你这个用户,首先操作系统是认识你的,另外,你的名字是会被操作系统记到属性里的,所以系统在做对比的时候发现,这个用户当前是拥有者,一旦把你这个人和拥有者的这个名字匹配成功了,就是只看拥有者的权限,只匹配一次。只匹配一次,虽然你是所属组,对不起,我不做了,不去匹配你的所属组权限,你的权限和身份只匹配一次。
如何证明?
我们可以通过修改拥有者来验证。如果第一次匹配拥有者失败的时候,操作系统会接着往下匹配,匹配后,是所属组,你就有所属组的权限。那么如何更改一个文件的拥有者,包括所属组,包括other呢?等会再说,我们现在操作一下。但是注意更改文件的拥有者要有root权限。
我们通过使用指令,chown来修改文件的拥有者(注意,我们是在root的情况下操作的)
我们发现,我们可以进行正常的读写,所以身份识别的时候,我们只识别一次,那么一旦匹配成功,就不往后匹配了,匹配不成功,就自动匹配,你不是拥有者,就自动匹配你是不是所属组,如果两者都不是,你就是other。
接下来我们修改对应的所属组
我们发现,这个时候我们无法进行对应的读写操作了。所以你是普通用户也不行。
然后把other的权限公开了。
所以你又可以进行读写了。
所以我们已经证明了,权限是可以限定人的。 我们这两个知识点已经掌握了。
3.修改权限的第二套做法
根据我们之前讲的权限的本质,是等于人+具体事物的属性。
=所以我们现在也说。权限 = 用户角色+文件权限,所以刚刚写的第一点,和第二点,一直是在修改文件的属性。而且修改文件属性,我们已经看到有和没有的表现了,下一个问题就是我们能不能更改文件的角色呢?关于这个用户的角色问题呢?我们刚刚已经演示,做过了。但是我们现在重点谈一谈。我们除了能改文件属性外,还能修改它的用户角色。我们想具体修改,它的拥有者,所属组,这样的概念。
普通用户是没有权限修改拥有者和所属组的。所以想把一个文件的拥有者和所属组更改,的本质是,你把文件给另一个人,或者给另一个组。
为什么我们能修改我们文件的权限?就是我们刚刚已经证明我们是可以修改我们文件的权限的。那为什么能改这个文件的权限?那是因为我们是这个文件的拥有者对不对?
所以你我们能改,或者我们是root。但是当我们在改这个文件的时候,其实并没有直接的去影响别人,间接肯定是影响了,现在我把文件的拥有者改了,那它的本质是不是把文件给别人?
在现实生活中,你把一个东西给别人都不要征得别人的允许,给你五百万,一个亿,不需要征求你的意见。虽然总有一些桀骜不驯,或者清高的少年,说我不要,你给我再多钱我都不要,那就当我没说。哈哈哈。
但是,万一这个钱是不干不净的呢?所以我们把一个文件给别人的时候,这个文件的好坏得清楚。所以一个文件,我们轻易不能把文件给别人。所以默认这里,即便你这个文件,你是它的拥有者,也给不了别人,你得让别人愿意接收这个文件。
但是我们把文件给别人的时候还要征得同意,打招呼?Linux也考虑到这一点。所以当我们想把文件给别人,但是你的权限不允许你把文件给别人的时候,那就强制给别人。所以一般,更改文件的拥有者,如果你是普通用户的话,那么你就需要进行sudo。也就是说呢,此时,我们需要对chown短暂提权。
所以如果你想把文件给别人,不能用普通权限给别人,要么sudo,要么su 成root。给别人是强制给的。
推荐使用su
当然最后再说一下,就是我们的root,不用加sudo,因为root不受权限约束,那怎么没见修改other的指令呢?
因为不需要。那么为什么呢?
其实你只要把拥有者改了,把所属组改了,other自然而然就变了。
总结:
1. 对于普通用户,自身要受到对应权限的约束,即便这个文件是自己的!
2.root不受权限约束的!
3.Linux进行权限匹配的时候,对用户身份进行识别的时候,只识别一次。
4.不需要修改other,因为你只要把拥有者改了,把所属组改了,other自然而然就变了。
快捷键:shift + alt + t 快捷打开新窗口。
🛎️感谢各位同伴的支持,本期文件中的权限专题就讲解到这啦,下期我们将讲解可执行权限和目录权限,如果你觉得写的不错的话,可以给个一键三连,点赞,收藏+评论,可以的话还希望点点关注,若有不足,欢迎各位在评论区讨论。
相关文章:

【Linux】文件权限与类型全解:你的文件安全指南
欢迎来到 CILMY23 的博客 🏆本篇主题为:文件权限与类型全解:你的文件安全指南 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算法专题…...

解析DNS查询报文,探索DNS工作原理
目录 1. 用 tcpdump工具监听抓包 2. 用 host 工具获取域名对应的IP地址 3. 分析DNS以太网查询数据帧 3.1 linux下查询DNS服务器IP地址 3.2 DNS以太网查询数据帧 (1)数据链路层 (2)网络层 (3)传输层…...

Unity让摄像机跟随物体的方法(不借助父子关系)
在Unity中,不使用子对象的方式让相机跟随物体移动,我们通过编写脚本来实现。下面放一个从工程中摘出来的的C#脚本示例,用于将相机绑定到一个Target对象上并跟随其移动: using UnityEngine; public class FollowCamera : MonoBeh…...

misc音频隐写
一、MP3隐写 (1)题解:下载附件之后是一个mp3的音频文件;并且题目提示keysyclovergeek;所以直接使用MP3stego对音频文件进行解密;mp3stego工具是音频数据分析与隐写工具 (2)mp3stego工具的使用:…...

如何启动网络安全计划:首先要做的事情
目录 数据分类:网络安全的基石 为什么它很重要? 如何对数据进行分类? 风险分析 什么是风险分析? 如何进行风险分析? 业务影响分析 (BIA) BIA 的用途是什么? BIA 是如何进行的? 安全解…...

Java零基础-三维数组详解!
哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互…...

数据分析-20-时间序列预测之基于PyTorch的LSTM数据准备及模型训练流程
文章目录 1 数据加载2 去除异常值3 数据归一化4 切分窗口5 制作数据集加载器6 定义模型7 训练模型8 模型评估9 参考附录1 数据加载 参考数据集kaggle下载DailyDelhiClimate import pandas as pd import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] = SimHei # 设…...

vue2中使用web worker启动定时器
vue2中使用web worker启动定时器,避免浏览器最小化或切换标签页时定时器不能按设定周期执行【一般是周期小于60s时,大于60s一般可正常执行】 1、添加worker-loader2、修改vue.config.js3、创建timer.worker.js4、创建TimerWorker.js5、使用TimerWorker启…...

【Python 学习】Numpy的基础和应用
目录 1 数组基础1.1 Numpy简介1.2 Numpy数组基础1.3 创建数组1.3.1 使用np.array()函数生成数组1.3.2 利用内置函数产生特定形式的数组1.3.2.1 简单内置函数1.3.2.2 特殊内置函数 1.3.3 生成随机数组 1.4 数组的数据类型1.5 数组的迭代1.6数组的索引和切片1.6.1 一维数组的索引…...

基于python+django+vue+MySQL的酒店推荐系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】pythondjangovueMySQL的酒店推…...

什么是 PD 电压诱骗?
在这篇博客中,我们将深入了解 PD 电压诱骗 的概念,解释其工作原理,并通过简单的例子来帮助你理解整个过程。虽然看起来复杂,但我会尽量用通俗易懂的方式讲解每一个知识点。 什么是 PD 协议?要理解电压诱骗,我们首先需要知道什么是 PD 协议。 PD 协议(Power Delivery 协…...

【漏洞复现】用友 NC pagesServlet Sql注入漏洞
免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…...

边缘检测运用
文章目录 一、简介1.边缘检测的概念2.边缘检测的目的 二、代码实现三、边缘检测的方法1.1Canny边缘检测器1.2.Canny代码实现2.1Sobel边缘检测器2.2Sobel代码实现3.1Laplacian边缘检测器3.2Laplacian代码实现4.1Scharr边缘检测器4.2Scharr代码实现 四、边缘检测的应用 一、简介 …...

应用宝自动下载安装
import uiautomator2 as u2 from threading import Thread import logging import sys import os loggerlogging.getLogger("uiautomator2") logger.setLevel(logging.INFO) d u2.connect()"""下载模块""" class yingyongbao(object…...

Vue 2 中实现双击事件的几种方法
在 Vue 2 中处理用户交互,特别是双击事件,是一个常见的需求。Vue 提供了一种简洁的方式来绑定事件,包括双击事件。本文将介绍几种在 Vue 2 中实现双击事件的方法。 1. 使用 dblclick 指令 Vue 允许你直接在模板中使用 dblclick 指令来监听双…...

windows服务管理插件 nssm
NSSM是一个windows下服务管理插件,可以填加、删除、启动、停止服务 1.下载 官网:http://nssm.cc 下载页面:http://nssm.cc/download 直接下载:http://nssm.cc/release/nssm-2.24.zip 2.食用 以填加php8.2为例 2.1.将nssm.ex…...

【读书笔记-《30天自制操作系统》-19】Day20
本篇的内容围绕系统调用展开。为了让应用程序能够调用操作系统功能,引入了系统调用以及API的概念。首先实现了显示单个字符的API,让应用程序通过传递地址的方式进行调用;接下来又改进为通过中断的方式进行调用。在此基础上继续实现了显示字符…...

Kubernetes服务注册与发现
Kubernetes服务注册与发现 1、服务注册2、服务发现2.1 DNS服务发现2.2 环境变量(较少使用)💖The Begin💖点点关注,收藏不迷路💖 在Kubernetes中,服务注册与发现确保了Pod间的高效通信。 1、服务注册 当创建Service时,其信息被存储在Kubernetes的ETCD数据库中。Pod…...

【 html+css 绚丽Loading 】000047 玄武流转盘
前言:哈喽,大家好,今天给大家分享htmlcss 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕…...

线程池原理及改造
目录 一 线程池执行原理 二 线程池改造(一) 三 线程池改造(二) 一 线程池执行原理 首先我们先了解一下线程池里面几个参数: 第一个是核心线程数,第二个是线程池最大线程数。(线程池里面的线程分为核心线程和非核心线程,既然核心…...

彻底理解mysql Buffer Pool (拓展)
彻底理解Buffer Pool (拓展) 一、Buffer Pool 的内存管理策略对数据库性能的影响 内存分配与回收:Buffer Pool 在申请内存时,需要考虑操作系统的内存分配策略。如果分配不合理,可能导致内存碎片,影响性能…...

信号量(二值信号量和计数信号量)和互斥量
信号量 信号量(Semaphore) 是一种实现任务间通信的机制, 可以实现任务之间同步或临界资源的互斥访问, 常用于协助一组相互竞争的任务来访问临界资源。 在多任务系统中, 各任务之间需要同步或互斥实现临界资源的保护&a…...

结构型模式-python版
在21种设计模式中, 结构型设计模式有7种, 分别是: 适配器模式代理模式桥接模式享元模式外观模式组合模式装饰器模式 下面逐一简要介绍: 1 适配器模式 适配器(Adapter)设计模式是一种结构型设计模式&…...

Java重修笔记 第五十四天 坦克大战(二)常用的绘图方法、画出坦克图形
常用的绘图方法 1.设置当前画笔的颜色,可多次调用 public abstract void setColor(Color c) 参数:c -颜色 2. 画一条直线 public abstract void drawLine(int x1, int y1, int x2, int y2) 参数:x1 - 第一个点的 x坐标。 y1 - 第一点的 y坐…...

OpenAI澄清:“GPT Next”不是新模型。
不,”GPT Next” 并不是OpenAI的下一个重要项目。 本周早些时候,OpenAI 日本业务的负责人长崎忠男在日本 KDDI 峰会上分享了一场演讲,似乎在暗示一个名为 “GPT Next” 的新模型即将出现。 但OpenAI的一位发言人已向Mashable证实࿰…...

<<编码>> 第 10 章 逻辑与开关(Logic and Switches) 示例电路
串联电路 info::操作说明 鼠标单击开关切换开合状态 需要两个开关同时闭合才能接通电路 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/code-hlchs-examples/assets/circuit/code-hlchs-ch10-01-series-circuit.txt 并联电路 in…...

深入浅出 Ansible 自动化运维:从入门到实战
在现代 IT 运维中,自动化是提升效率、降低错误率的关键。Ansible 作为一款流行的自动化工具,凭借其简洁的语法和强大的功能,成为了运维工程师的得力助手。本文将深入探讨 Ansible 的核心概念、实际应用以及一些实用的技巧,帮助你在…...

一句话描述设计模式
最近在看设计模式,其描述抽象程度令人欲罢不能,始终不得其意。于是尝试用一句话总结了一下,常规的就不说了,只是举了个例子。 单例模式 Spring中的单例bean使用了双重锁机制 工厂模式 Spring中的BeanFactory是简单工厂模式Bea…...

【Linux】Ubuntu 22.04 shell实现MySQL5.7 tar 一键安装
参考 https://blog.csdn.net/qq_35995514/article/details/134350572?spm1001.2014.3001.5501 在原作者基础上做了修改,加了一个删除原有mysql 的脚本 文章目录 一、安装下载**my.cnf 配置文件** 二、执行安装**install_mysql.sh 安装脚本**本机免密脚本 ssh_keyge…...

SQL Server开启网络访问
目前工作中很少用到SQL Server了,最近需要测试几个表,需要搭建一个SQL Server数据库服务,这里做个总结吧。 安装这里就不做详细介绍了,本文只介绍如何开启SQL Server网络访问。 1、云服务器安全组设置 如果是搭建在云服务器上&a…...