Linux权限机制深度解读:系统安全的第一道防线

文章目录
- 前言
- ‼️一、Linux权限的概念
- ‼️二、Linux权限管理
- ❕2.1 文件访问者的分类(人)
- ❕2.2 文件类型和访问权限(事物属性)
- ✔️1. 文件类型
- ✔️2. 基本权限
- ✔️3. 权限值的表示方法
- ❕2.3 文件访问权限的相关设置方法
- ✔️1. `chmod` 命令
- ✔️2. `chown` 命令
- ✔️3. `chgrp` 命令
- ‼️三、其他权限问题
- ❕3.1 问题一:为什么普通文件是664,目录文件是775?
- ✔️1. umask 的作用与工作原理
- ✔️2. umask 的计算规则
- ✔️3. 查看和设置 umask
- ❕3.2 问题二:目录的权限代表什么?
- ✔️1. 读取权限(`r` - Read)
- ✔️2. 写入权限(`w` - Write)
- ✔️3. 执行权限(`x` - Execute)
- ❕3.3 问题三:想要建立共享文件,但不想让其他人删除怎么办?
- ✔️1. 粘滞位的作用
- ✔️2. 粘滞位的表示
- ✔️3. 设置和移除粘滞位
- 结语
前言
在现代操作系统中,权限管理是保障安全与系统稳定运行的关键环节。Linux作为一个广泛应用的开源操作系统,其权限体系以灵活性、可扩展性和严谨性著称。无论是个人用户还是企业环境,理解并掌握Linux权限管理,既是保障信息安全的基础,也能大幅提升系统管理效率。本文将带你深入探索Linux权限体系的核心概念、常见操作以及最佳实践。
‼️一、Linux权限的概念
Linux下有两种用户:超级用户(root)、普通用户
- 超级用户:可以再linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。退出用户使用 exit 或者 ctrl + d。
‼️二、Linux权限管理
❕2.1 文件访问者的分类(人)
-
文件和文件目录的所有者:u—User(中国平民 法律问题)
-
文件和文件目录的所有者所在的组的用户:g—Group(不多说)
-
其它用户:o—Others (外国人)
❕2.2 文件类型和访问权限(事物属性)

✔️1. 文件类型
Linux 文件类型由文件的第一个字符标识,当使用命令 ls -l 查看文件列表时,可以看到类似如下的输出:
-rwxr-xr--
drwxr-xr-x
lrwxrwxrwx
第一个字符表示文件的类型,可能的取值如下:
| 字符 | 文件类型 |
|---|---|
- | 普通文件 (Regular File) |
d | 目录 (Directory) |
l | 符号链接 (Symbolic Link) |
b | 块设备文件 (Block Device) |
c | 字符设备文件 (Character Device) |
p | 管道 (Pipe) |
s | 套接字 (Socket) |
✔️2. 基本权限
Linux 文件权限分为三组:
- 所有者 (Owner):文件的创建者。
- 所属组 (Group):同组用户。
- 其他人 (Others):非所有者或非所属组的用户。
权限有三种:
| 权限 | 描述 | 值 |
|---|---|---|
r | 读 (Read) | 4 |
w | 写 (Write) | 2 |
x | 执行 (Execute) | 1 |
✔️3. 权限值的表示方法
a. 符号表示法
用字母表示文件权限,例如:-rw-r--r--
| 字符 | 含义 |
|---|---|
r | 读权限 |
w | 写权限 |
x | 执行权限 |
- | 没有该权限 |
例子:
-rw-r--r--表示普通文件,所有者有读写权限,组用户和其他用户只有读权限。
b. 数值表示法
每种权限的值相加表示最终权限。例如:
| 权限 | 数值 | 二进制 |
|---|---|---|
--- | 0 | 000 |
--x | 1 | 001 |
-w- | 2 | 010 |
-wx | 3 | 011 |
r-- | 4 | 100 |
r-x | 5 | 101 |
rw- | 6 | 110 |
rwx | 7 | 111 |
权限分为三组(Owner, Group, Others),组合成三位数字。例如:
-rwxr-xr--的数值表示为754。
❕2.3 文件访问权限的相关设置方法
✔️1. chmod 命令
chmod (Change Mode) 是用于修改 Linux 文件或目录权限的命令。权限可以用符号或八进制数表示。
基本语法
chmod [选项] 模式 文件名
- 模式:可以是符号表示法 (
u+r,g-w) 或数字表示法 (755)。 - 文件名:要更改权限的目标文件或目录。
a. 符号表示法
符号表示法适合逐步修改权限:
chmod [ugoa][+-=][rwx] 文件名
| 符号 | 作用 |
|---|---|
u | 文件所有者 (user) |
g | 文件所属组 (group) |
o | 其他人 (others) |
a | 所有用户 (all) |
+ | 添加权限 |
- | 移除权限 |
= | 直接设定权限 |
示例:
-
给文件所有者添加写权限:
chmod u+w filename -
删除其他人的执行权限:
chmod o-x filename -
所有用户设定只读权限:
chmod a=r filename
b. 数字表示法:
数字表示法直接设定文件权限值(例如 644,755)。
| 权限 | 数值 | 二进制 |
|---|---|---|
--- | 0 | 000 |
--x | 1 | 001 |
-w- | 2 | 010 |
-wx | 3 | 011 |
r-- | 4 | 100 |
r-x | 5 | 101 |
rw- | 6 | 110 |
rwx | 7 | 111 |
-
设置文件权限为
rwxr-xr--:chmod 754 filename -
设置目录权限为
rwx------:chmod 700 directory_name
常用选项
| 选项 | 描述 |
|---|---|
-R | 递归修改权限,适用于目录及其所有子目录和文件。 |
-v | 显示每个文件权限修改的详细信息。 |
-c | 仅显示被更改的文件信息。 |
--reference=ref_file | 将 ref_file 的权限应用到目标文件。 |
示例:
-
递归修改目录及其内容的权限:
chmod -R 755 /path/to/directory -
使用参考文件权限:
chmod --reference=ref_file target_file
✔️2. chown 命令
chown(Change Ownership)用于更改文件或目录的所有者和/或所属组。
语法
chown [选项] [所有者][:组] 文件名
- 所有者:文件的新所有者用户。
- 组:文件的新所属组。如果不指定所有者,只修改组时,可以用
:开头。 - 文件名:要修改的目标文件或目录。
常用选项
| 选项 | 描述 |
|---|---|
-R | 递归更改目录及其内容的所有者和组。 |
-v | 显示更改的详细信息。 |
--reference=ref_file | 使用参考文件的所有者和组进行设置。 |
示例
-
更改文件所有者:
chown user1 filename将
filename的所有者改为user1。 -
更改所有者和组:
chown user1:group1 filename将
filename的所有者改为user1,所属组改为group1。 -
仅更改组:
chown :group1 filename -
递归更改目录和文件的所有者:
chown -R user1:group1 /path/to/directory -
参考其他文件的所有者和组:
chown --reference=ref_file target_file
✔️3. chgrp 命令
chgrp(Change Group)用于更改文件或目录的所属组。
语法
chgrp [选项] [组] 文件名
- 组:文件的新所属组。
- 文件名:要修改的目标文件或目录。
常用选项
| 选项 | 描述 |
|---|---|
-R | 递归更改目录及其内容的所属组。 |
-v | 显示更改的详细信息。 |
--reference=ref_file | 使用参考文件的组进行设置。 |
示例
-
更改文件的所属组:
chgrp group1 filename将
filename的所属组改为group1。 -
递归更改目录和文件的所属组:
chgrp -R group1 /path/to/directory -
参考其他文件的组:
chgrp --reference=ref_file target_file
‼️三、其他权限问题

❕3.1 问题一:为什么普通文件是664,目录文件是775?
实际上:
-
创建文件时的默认权限是
666(没有执行权限)。 -
创建目录时的默认权限是
777(包括执行权限)。
但是:实际权限 = 默认权限 - umask
这里我们引入一个叫做umask的东西。
✔️1. umask 的作用与工作原理
umask(User File Creation Mask)是一个在 Linux 操作系统中用于控制文件和目录默认权限的命令。它定义了文件和目录创建时的权限掩码,从而决定新创建的文件或目录的最终权限。
✔️2. umask 的计算规则
实际权限 = 默认权限 - umask
注意:这里的 - 并不是简单的减,而是,默认权限 & (~umask)。
例如:
- 如果
umask = 022:- 文件默认权限 =
666 - 022 = 644(rw-r–r–) - 目录默认权限 =
777 - 022 = 755(rwxr-xr-x)
- 文件默认权限 =
- 如果
umask = 027:- 文件默认权限 =
666 - 027 = 640(rw-r-----) - 目录默认权限 =
777 - 027 = 750(rwxr-x–)
- 文件默认权限 =
示例:
更改 umask: 修改为 077:
umask 077
touch test3.txt
mkdir dir3

✔️3. 查看和设置 umask
- 查看当前 umask 值
运行命令:
umask
这将返回一个四位的八进制数字(前三位是有效的)。
例如:
$ umask
0022
- 临时设置 umask
在当前会话中临时更改:
umask 0027
此更改仅适用于当前 shell 会话。
注意事项
- umask 不会增加权限:
umask只能限制权限,而不能授予额外权限。例如,设置umask为0000允许最大权限,但不能为文件自动添加执行权限。
❕3.2 问题二:目录的权限代表什么?
✔️1. 读取权限(r - Read)
- 作用:
- 允许查看目录中的文件名列表。
- 如果没有读取权限,用户即使知道目录的路径,也无法列出其中的内容(如使用
ls命令)。
- 效果:
- 如果对目录有读取权限,你可以看到该目录内的文件和子目录的名称,但不能访问其内容(如果缺少执行权限)。
✔️2. 写入权限(w - Write)
- 作用:
- 允许在目录中创建、删除或重命名文件。
- 如果没有写入权限,你无法在该目录中添加新文件、删除文件或修改目录结构。
- 注意:
- 写入权限还受执行权限的限制(即需要同时有执行权限才能实际修改目录内容)。
✔️3. 执行权限(x - Execute)
- 作用:
- 允许进入该目录,也就是说,用户可以切换到该目录(使用
cd命令)。 - 允许访问目录中的具体文件(前提是对文件本身有合适的权限)。
- 允许进入该目录,也就是说,用户可以切换到该目录(使用
- 效果:
- 如果对目录没有执行权限,即使有读取权限,你也无法查看目录的内容。
- 执行权限对目录至关重要,因为它决定了目录是否可用作工作路径。
❕3.3 问题三:想要建立共享文件,但不想让其他人删除怎么办?
解决方案:设置粘滞位
粘滞位(Sticky Bit)是一种特殊的权限位,用于保护目录下的文件和子目录,使得只有文件的所有者或者目录的所有者才能删除或修改该文件,即使其他用户对目录有写权限。
✔️1. 粘滞位的作用
- 功能:当粘滞位设置在目录上时,只有以下用户可以删除或重命名该目录中的文件或子目录:
- 文件所有者。
- 目录所有者。
- 超级用户(root)。
- 应用场景:最常见的例子是
/tmp目录。该目录通常对所有用户开放写入权限,但由于设置了粘滞位,用户只能删除或修改自己的文件,而不能影响其他用户的文件。
✔️2. 粘滞位的表示
-
符号模式:在文件或目录权限的符号表示中,粘滞位通常显示为目录权限的最后一位
t或T。- 如果目录同时有执行权限,粘滞位显示为
t。 - 如果目录没有执行权限,粘滞位显示为
T。 例如:
drwxrwxrwt 10 root root 4096 Nov 19 /tmp/tmp目录的权限显示t,表示粘滞位已启用,且目录具有执行权限。 - 如果目录同时有执行权限,粘滞位显示为
-
八进制模式:粘滞位对应的八进制值是
1,可以通过在权限数字前加上1设置粘滞位。例如:1755:设置了粘滞位,并且目录权限为rwxr-xr-x。1777:设置了粘滞位,并且目录权限为rwxrwxrwx(例如/tmp目录)。
✔️3. 设置和移除粘滞位
设置粘滞位
使用 chmod 命令为目录添加粘滞位:
chmod +t directory_name # 使用符号模式添加粘滞位。
chmod 1777 directory_name # 使用八进制模式设置权限并添加粘滞位。
移除粘滞位
chmod -t directory_name # 使用符号模式移除粘滞位。
chmod 0777 directory_name # 使用八进制模式移除粘滞位。
结语
Linux权限体系是一个兼具严谨与灵活的设计,其核心在于平衡安全性与实用性。通过深入理解权限管理的原理和操作,你不仅能够应对常见的安全威胁,还能更高效地管理系统资源。希望本文能为你的学习和实践提供实用参考,让你在Linux系统的使用中更加自信、游刃有余。

今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下,17的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是17前进的动力!

相关文章:
Linux权限机制深度解读:系统安全的第一道防线
文章目录 前言‼️一、Linux权限的概念‼️二、Linux权限管理❕2.1 文件访问者的分类(人)❕2.2 文件类型和访问权限(事物属性)✔️1. 文件类型✔️2. 基本权限✔️3. 权限值的表示方法 ❕2.3 文件访问权限的相关设置方法✔️1. ch…...
NineData云原生智能数据管理平台新功能发布|2024年11月版
本月发布 8 项更新,其中重点发布 2 项、功能优化 6 项。 重点发布 数据库 Devops - 数据生成支持多个数据源 NineData 支持在数据库中自动生成符合特定业务场景的随机数据,用于模拟实际生产环境中的数据情况,帮助用户在不使用真实数据的情况…...
Vue中控制组件的挂载位置
在 Vue 中,append-to-body“true” 主要用于一些第三方组件(如 Element UI 或 Ant Design Vue 中的弹出框、下拉菜单等)来控制组件的挂载位置。具体来说,当你设置 append-to-body“true” 时,它会将该组件的 DOM 元素插…...
查看docker容器日志
容器里面的服务运行报错了,要查看容器的日志 要查看 Docker 容器的日志,可以使用 docker logs 命令。以下是一些常见的使用方法: 基本用法 docker logs <container_name_or_id> 查看最近的日志 docker logs --tail 100 <contai…...
Apache Commons工具类库使用整理
文章目录 Apache Commons工具类库分类- commons-lang3字符串工具:StringUtils日期工具:DateUtils数值工具:NumberUtils对象工具:ObjectUtils数组工具:ArrayUtils异常工具:ExceptionUtils枚举工具࿱…...
力扣第89题 格雷编码
题目描述 格雷编码序列是一个二进制数字序列,其中的每两个相邻的数字只有一个二进制位不同。给定一个整数 n,表示格雷编码的位数,要求返回 n 位的格雷编码序列。 示例 1 输入: n 2输出: [0, 1, 3, 2]解释&#x…...
Linux C/C++编程中的多线程编程基本概念
【图书推荐】《Linux C与C一线开发实践(第2版)》_linux c与c一线开发实践pdf-CSDN博客《Linux C与C一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com…...
解决Tomcat运行时错误:“Address localhost:1099 is already in use”
目录 背景: 过程: 报错的原因: 解决的方法: 总结: 直接结束Java.exe进程: 使用neststat -aon | findstr 1099 命令: 选择建议: 背景: 准备运行Tomcat服务器调试项目时,程序下…...
C/C++中的调用约定
在C/C编程中,调用约定(calling conventions)是一组指定如何调用函数的规则。主要在你调用代码之外的函数(例如OS API,操作系统应用程序接口)或OS调用你(如WinMain的情况)时起作用。如果编译器不知道正确的调用约定,那么你很可能会遇到非常奇怪…...
微信创建小程序码 - 数量不受限制
获取小程序码:小程序码为圆图,且不受数量限制。 目录 文档 接口地址 请求方式 功能描述 注意事项 获取 scene 值 请求参数 返回参数 对接 请求方法 获取小程序码 调用获取小程序码 总结 文档 接口地址 https://api.weixin.qq.com/wxa/get…...
springboot/ssm美食分享系统Java代码web项目美食烹饪笔记分享交流
springboot/ssm美食分享系统ava美食烹饪笔记分享交流系统web美食源码 基于springboot(可改ssm)vue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库&#…...
【Redis篇】 List 列表
在 Redis 中,List 是一种非常常见的数据类型,用于表示一个有序的字符串集合。与传统的链表结构类似,Redis 的 List 支持在两端进行高效的插入和删除操作,因此非常适合实现队列(Queue)和栈(Stack…...
多级IIR滤波效果(BIQUAD),system verilog验证
MATLAB生成IIR系数 采用率1k,截止频率30hz,Matlab生成6阶对应的biquad3级系数 Verilog测试代码 // fs1khz,fc30hz initial beginreal Sig_Orig, Noise_white, Mix_sig;real fs 1000;Int T 1; //周期int N T*fs; //1s的采样点数// 数组声明…...
【WPF中ControlTemplate 与 DataTemplate之间的区别?】
前言 WPF中ControlTemplate 与 DataTemplate之间的区别? 1. 定义: ControlTemplate 是用于定义 WPF 控件的外观和结构的模板。它允许您重新定义控件的视觉表现,而不改变控件的行为。 DataTemplate 是用于定义如何呈现数据对象的模板。它通…...
Keil5配色方案修改为类似VSCode配色
1. 为什么修改Keil5配色方案 视觉习惯:如果你已经习惯了VSCode的配色方案,尤其是在使用ESP-IDF开发ESP32时,Keil5的默认配色可能会让你感到不习惯。减少视觉疲劳:Keil5的默认背景可能过于明亮,长时间使用可能会导致视…...
ndp协议简介
在IPv6中,ARP(地址解析协议)被替代为邻居发现协议(Neighbor Discovery Protocol,NDP)。NDP是IPv6网络中用于发现邻居节点(相邻设备)的协议,类似于IPv4中的ARP。但与ARP不…...
stable diffusion实践操作-大模型介绍:SD的发展历史,SD1.5和SDXL之间的差别
大家有没有这样的困惑:在找模型时,老是会出现一些奇怪的标签,像 sd1.5、sdxl 之类的模型后缀,真让人摸不着头脑,一会儿 1.0,一会儿 1.5,一会儿 XL,完全搞不清楚状况。今天就来给大家…...
系统无法运行提示:sqlsut.dll初始化错误怎么解决?多种解决方法汇总一览
遇到 sqlsut.dll 初始化错误,这通常意味着 SQL Server 的某些组件未能正确加载或初始化。以下是一些可能的解决方法汇总,旨在帮助您排查和解决问题: 解决方法 1. 检查SQL Server服务状态•确认所有相关的SQL Server服务(如SQL Se…...
通过waitress启动flask应用
假设你有一个名为 app.py 的文件,app 是指你的 Flask 应用实例。并且在这个文件中创建了一个 Flask 应用实例,那么你可以这样导入和使用它。 示例结构 假设你的项目结构如下: my_flask_app/ │ ├── app.py ├── waitress_server.py └─…...
Redis高阶之容错切换
当一台主机master宕掉之后,他的从机会取代主机么? 查看集群状态 127.0.0.1:6385> cluster nodes c8ff33e8da5fd8ef821c65974dda304d2e3327f9 192.168.58.129:638216382 slave f6b1fd5e58df90782f602b484c2011d52fc3482d 0 1733220836918 1 connecte…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
Qt Quick Controls模块功能及架构
Qt Quick Controls是Qt Quick的一个附加模块,提供了一套用于构建完整用户界面的UI控件。在Qt 6.0中,这个模块经历了重大重构和改进。 一、主要功能和特点 1. 架构重构 完全重写了底层架构,与Qt Quick更紧密集成 移除了对Qt Widgets的依赖&…...
【Qt】控件 QWidget
控件 QWidget 一. 控件概述二. QWidget 的核心属性可用状态:enabled几何:geometrywindows frame 窗口框架的影响 窗口标题:windowTitle窗口图标:windowIconqrc 机制 窗口不透明度:windowOpacity光标:cursor…...
Java严格模式withResolverStyle解析日期错误及解决方案
在Java中使用DateTimeFormatter并启用严格模式(ResolverStyle.STRICT)时,解析日期字符串"2025-06-01"报错的根本原因是:模式字符串中的年份格式yyyy被解释为YearOfEra(纪元年份),而非…...
