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

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. 数值表示法

每种权限的值相加表示最终权限。例如:

权限数值二进制
---0000
--x1001
-w-2010
-wx3011
r--4100
r-x5101
rw-6110
rwx7111

权限分为三组(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)
+添加权限
-移除权限
=直接设定权限

示例

  1. 给文件所有者添加写权限:

    chmod u+w filename
    
  2. 删除其他人的执行权限:

    chmod o-x filename
    
  3. 所有用户设定只读权限:

    chmod a=r filename
    

b. 数字表示法

数字表示法直接设定文件权限值(例如 644755)。

权限数值二进制
---0000
--x1001
-w-2010
-wx3011
r--4100
r-x5101
rw-6110
rwx7111
  1. 设置文件权限为 rwxr-xr--

    chmod 754 filename
    
  2. 设置目录权限为 rwx------

    chmod 700 directory_name
    

常用选项

选项描述
-R递归修改权限,适用于目录及其所有子目录和文件。
-v显示每个文件权限修改的详细信息。
-c仅显示被更改的文件信息。
--reference=ref_fileref_file 的权限应用到目标文件。

示例

  1. 递归修改目录及其内容的权限:

    chmod -R 755 /path/to/directory
    
  2. 使用参考文件权限:

    chmod --reference=ref_file target_file
    
✔️2. chown 命令

chown(Change Ownership)用于更改文件或目录的所有者和/或所属组。

语法

chown [选项] [所有者][:组] 文件名
  • 所有者:文件的新所有者用户。
  • :文件的新所属组。如果不指定所有者,只修改组时,可以用 : 开头。
  • 文件名:要修改的目标文件或目录。

常用选项

选项描述
-R递归更改目录及其内容的所有者和组。
-v显示更改的详细信息。
--reference=ref_file使用参考文件的所有者和组进行设置。

示例

  1. 更改文件所有者

    chown user1 filename
    

    filename 的所有者改为 user1

  2. 更改所有者和组

    chown user1:group1 filename
    

    filename 的所有者改为 user1,所属组改为 group1

  3. 仅更改组

    chown :group1 filename
    
  4. 递归更改目录和文件的所有者

    chown -R user1:group1 /path/to/directory
    
  5. 参考其他文件的所有者和组

    chown --reference=ref_file target_file
    

✔️3. chgrp 命令

chgrp(Change Group)用于更改文件或目录的所属组。

语法

chgrp [选项] [] 文件名
  • :文件的新所属组。
  • 文件名:要修改的目标文件或目录。

常用选项

选项描述
-R递归更改目录及其内容的所属组。
-v显示更改的详细信息。
--reference=ref_file使用参考文件的组进行设置。

示例

  1. 更改文件的所属组

    chgrp group1 filename
    

    filename 的所属组改为 group1

  2. 递归更改目录和文件的所属组

    chgrp -R group1 /path/to/directory
    
  3. 参考其他文件的组

    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
  1. 查看当前 umask 值

运行命令:

umask

这将返回一个四位的八进制数字(前三位是有效的)。

例如:

$ umask
0022
  1. 临时设置 umask

在当前会话中临时更改:

umask 0027

此更改仅适用于当前 shell 会话。

注意事项

  • umask 不会增加权限umask 只能限制权限,而不能授予额外权限。例如,设置 umask0000 允许最大权限,但不能为文件自动添加执行权限。

❕3.2 问题二:目录的权限代表什么?

✔️1. 读取权限(r - Read)
  • 作用:
    • 允许查看目录中的文件名列表。
    • 如果没有读取权限,用户即使知道目录的路径,也无法列出其中的内容(如使用 ls 命令)。
  • 效果:
    • 如果对目录有读取权限,你可以看到该目录内的文件和子目录的名称,但不能访问其内容(如果缺少执行权限)。
✔️2. 写入权限(w - Write)
  • 作用:
    • 允许在目录中创建、删除或重命名文件。
    • 如果没有写入权限,你无法在该目录中添加新文件、删除文件或修改目录结构。
  • 注意:
    • 写入权限还受执行权限的限制(即需要同时有执行权限才能实际修改目录内容)。
✔️3. 执行权限(x - Execute)
  • 作用:
    • 允许进入该目录,也就是说,用户可以切换到该目录(使用 cd 命令)。
    • 允许访问目录中的具体文件(前提是对文件本身有合适的权限)。
  • 效果:
    • 如果对目录没有执行权限,即使有读取权限,你也无法查看目录的内容。
    • 执行权限对目录至关重要,因为它决定了目录是否可用作工作路径。

❕3.3 问题三:想要建立共享文件,但不想让其他人删除怎么办?

解决方案:设置粘滞位

粘滞位(Sticky Bit)是一种特殊的权限位,用于保护目录下的文件和子目录,使得只有文件的所有者或者目录的所有者才能删除或修改该文件,即使其他用户对目录有写权限。

✔️1. 粘滞位的作用
  • 功能:当粘滞位设置在目录上时,只有以下用户可以删除或重命名该目录中的文件或子目录:
    1. 文件所有者
    2. 目录所有者
    3. 超级用户(root)
  • 应用场景:最常见的例子是 /tmp 目录。该目录通常对所有用户开放写入权限,但由于设置了粘滞位,用户只能删除或修改自己的文件,而不能影响其他用户的文件。

✔️2. 粘滞位的表示
  1. 符号模式:在文件或目录权限的符号表示中,粘滞位通常显示为目录权限的最后一位 tT

    • 如果目录同时有执行权限,粘滞位显示为 t
    • 如果目录没有执行权限,粘滞位显示为 T。 例如:
    drwxrwxrwt  10 root root  4096 Nov 19  /tmp
    

    /tmp 目录的权限显示 t,表示粘滞位已启用,且目录具有执行权限。

  2. 八进制模式:粘滞位对应的八进制值是 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容器日志

容器里面的服务运行报错了&#xff0c;要查看容器的日志 要查看 Docker 容器的日志&#xff0c;可以使用 docker logs 命令。以下是一些常见的使用方法&#xff1a; 基本用法 docker logs <container_name_or_id> 查看最近的日志 docker logs --tail 100 <contai…...

Apache Commons工具类库使用整理

文章目录 Apache Commons工具类库分类- commons-lang3字符串工具&#xff1a;StringUtils日期工具&#xff1a;DateUtils数值工具&#xff1a;NumberUtils对象工具&#xff1a;ObjectUtils数组工具&#xff1a;ArrayUtils异常工具&#xff1a;ExceptionUtils枚举工具&#xff1…...

力扣第89题 格雷编码

题目描述 格雷编码序列是一个二进制数字序列&#xff0c;其中的每两个相邻的数字只有一个二进制位不同。给定一个整数 n&#xff0c;表示格雷编码的位数&#xff0c;要求返回 n 位的格雷编码序列。 示例 1 输入&#xff1a; n 2输出&#xff1a; [0, 1, 3, 2]解释&#x…...

Linux C/C++编程中的多线程编程基本概念

【图书推荐】《Linux C与C一线开发实践&#xff08;第2版&#xff09;》_linux c与c一线开发实践pdf-CSDN博客《Linux C与C一线开发实践&#xff08;第2版&#xff09;&#xff08;Linux技术丛书&#xff09;》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com…...

解决Tomcat运行时错误:“Address localhost:1099 is already in use”

目录 背景: 过程&#xff1a; 报错的原因&#xff1a; 解决的方法&#xff1a; 总结&#xff1a; 直接结束Java.exe进程&#xff1a; 使用neststat -aon | findstr 1099 命令&#xff1a; 选择建议&#xff1a; 背景: 准备运行Tomcat服务器调试项目时&#xff0c;程序下…...

C/C++中的调用约定

在C/C编程中&#xff0c;调用约定(calling conventions)是一组指定如何调用函数的规则。主要在你调用代码之外的函数(例如OS API&#xff0c;操作系统应用程序接口)或OS调用你(如WinMain的情况)时起作用。如果编译器不知道正确的调用约定&#xff0c;那么你很可能会遇到非常奇怪…...

微信创建小程序码 - 数量不受限制

获取小程序码&#xff1a;小程序码为圆图&#xff0c;且不受数量限制。 目录 文档 接口地址 请求方式 功能描述 注意事项 获取 scene 值 请求参数 返回参数 对接 请求方法 获取小程序码 调用获取小程序码 总结 文档 接口地址 https://api.weixin.qq.com/wxa/get…...

springboot/ssm美食分享系统Java代码web项目美食烹饪笔记分享交流

springboot/ssm美食分享系统ava美食烹饪笔记分享交流系统web美食源码 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#…...

【Redis篇】 List 列表

在 Redis 中&#xff0c;List 是一种非常常见的数据类型&#xff0c;用于表示一个有序的字符串集合。与传统的链表结构类似&#xff0c;Redis 的 List 支持在两端进行高效的插入和删除操作&#xff0c;因此非常适合实现队列&#xff08;Queue&#xff09;和栈&#xff08;Stack…...

多级IIR滤波效果(BIQUAD),system verilog验证

MATLAB生成IIR系数 采用率1k&#xff0c;截止频率30hz&#xff0c;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之间的区别&#xff1f; 1. 定义&#xff1a; ControlTemplate 是用于定义 WPF 控件的外观和结构的模板。它允许您重新定义控件的视觉表现&#xff0c;而不改变控件的行为。 DataTemplate 是用于定义如何呈现数据对象的模板。它通…...

Keil5配色方案修改为类似VSCode配色

1. 为什么修改Keil5配色方案 视觉习惯&#xff1a;如果你已经习惯了VSCode的配色方案&#xff0c;尤其是在使用ESP-IDF开发ESP32时&#xff0c;Keil5的默认配色可能会让你感到不习惯。减少视觉疲劳&#xff1a;Keil5的默认背景可能过于明亮&#xff0c;长时间使用可能会导致视…...

ndp协议简介

在IPv6中&#xff0c;ARP&#xff08;地址解析协议&#xff09;被替代为邻居发现协议&#xff08;Neighbor Discovery Protocol&#xff0c;NDP&#xff09;。NDP是IPv6网络中用于发现邻居节点&#xff08;相邻设备&#xff09;的协议&#xff0c;类似于IPv4中的ARP。但与ARP不…...

stable diffusion实践操作-大模型介绍:SD的发展历史,SD1.5和SDXL之间的差别

大家有没有这样的困惑&#xff1a;在找模型时&#xff0c;老是会出现一些奇怪的标签&#xff0c;像 sd1.5、sdxl 之类的模型后缀&#xff0c;真让人摸不着头脑&#xff0c;一会儿 1.0&#xff0c;一会儿 1.5&#xff0c;一会儿 XL&#xff0c;完全搞不清楚状况。今天就来给大家…...

系统无法运行提示:sqlsut.dll初始化错误怎么解决?多种解决方法汇总一览

遇到 sqlsut.dll 初始化错误&#xff0c;这通常意味着 SQL Server 的某些组件未能正确加载或初始化。以下是一些可能的解决方法汇总&#xff0c;旨在帮助您排查和解决问题&#xff1a; 解决方法 1. 检查SQL Server服务状态•确认所有相关的SQL Server服务&#xff08;如SQL Se…...

通过waitress启动flask应用

假设你有一个名为 app.py 的文件&#xff0c;app 是指你的 Flask 应用实例。并且在这个文件中创建了一个 Flask 应用实例&#xff0c;那么你可以这样导入和使用它。 示例结构 假设你的项目结构如下&#xff1a; my_flask_app/ │ ├── app.py ├── waitress_server.py └─…...

Redis高阶之容错切换

当一台主机master宕掉之后&#xff0c;他的从机会取代主机么&#xff1f; 查看集群状态 127.0.0.1:6385> cluster nodes c8ff33e8da5fd8ef821c65974dda304d2e3327f9 192.168.58.129:638216382 slave f6b1fd5e58df90782f602b484c2011d52fc3482d 0 1733220836918 1 connecte…...

2026年哪个开源商城,更适合长期维护?——真正决定商城系统寿命的,从来不是“功能多少”,而是“复杂业务长期是否还能稳定演进”

很多企业第一次选开源商城系统时。 通常都会特别关注&#xff1a; 功能全不全插件多不多页面好不好看上线速度快不快 因为在很多人认知里&#xff1a; 功能越多 → 系统越成熟 于是很多企业前期选型时。 都会优先选择&#xff1a; 功能最多的插件最全的营销玩法最丰富的…...

Go语言实现DCI架构:用角色扮演解耦对象行为与数据

1. 从“是什么”到“做什么”&#xff1a;DCI架构如何重塑对象行为建模在面向对象编程的世界里&#xff0c;我们总在试图用代码“复刻”现实。一个“人”是什么&#xff1f;我们定义一个People类&#xff0c;拥有姓名、年龄等属性。这个人能做什么&#xff1f;我们为People类添…...

Pacemaker + PostgreSQL 16 + 仲裁模式高可用集群部署指南

文档版本信息 版本: v1.0 更新日期: 2026-05-22 适用系统: CentOS 7/8, RHEL 7/8, Rocky Linux 8/9 数据库版本: PostgreSQL 16.x 集群软件: Pacemaker + Corosync + PCS 仲裁模式: QDevice (Quorum Device) 一、架构概述 1.1 整体架构图 ┌───────────…...

AI辅助编程:发展现状、效率评估与未来展望

引言:AI如何重塑编程范式? 在过去的几年里,人工智能(AI)正以前所未有的速度渗透到软件开发的各个角落。从最初的代码补全工具,到如今能够理解复杂需求、生成完整函数甚至设计系统架构的智能体,AI辅助编程已经从科幻概念演变为开发者日常工作中不可或缺的“副驾驶”。它…...

单神经元动态记忆机制及其神经形态计算应用

1. 动态记忆的神经实现范式革新在神经科学与类脑计算领域&#xff0c;动态记忆&#xff08;或称工作记忆&#xff09;一直被视为认知功能的基础模块。传统理论认为&#xff0c;这种能够短暂保持神经活动状态的功能必须依赖于神经元群体构成的递归网络——通过兴奋性神经元间的相…...

AI测试工具百花齐放,选型之前先搞懂这4个核心问题

在软件测试领域&#xff0c;AI 测试工具正以前所未有的速度涌现。从智能用例生成、缺陷预测到自愈型自动化测试&#xff0c;厂商们构建起一个眼花缭乱的技术矩阵。然而&#xff0c;当团队真正面临选型决策时&#xff0c;却发现“百花齐放”往往意味着“乱花渐欲迷人眼”。许多团…...

什么是电子铅封管理系统APP 有那些功能

电子铅封管理系统APP&#xff0c;简单来说&#xff0c;就是用手机App来管理和操作电子铅封的移动端软件。一、传统铅封 vs 电子铅封对比项传统铅封&#xff08;塑料封/钢丝封&#xff09;电子铅封防伪性易仿制&#xff0c;肉眼难辨真假全球唯一芯片ID&#xff0c;无法复制追溯能…...

2026年AI论文平台盘点:12款神器助你高效完成选题大纲、撰稿和降重

随着 AI 技术的持续突破&#xff0c;2026 年的论文写作工具市场已迈入“智能化、精细化、合规化”的新阶段。从本科生的课程论文到研究生的学位论文&#xff0c;再到科研人员的期刊投稿&#xff0c;AI 工具正以前所未有的专业度覆盖各类学术场景。无论是选题构思、文献检索、初…...

昇腾CANN ops-blas:GEMM 在 NPU 上为什么可以快到极致

矩阵乘是所有深度学习计算的根。Attention、全连接、卷积展开——归根到底都是矩阵乘。ops-blas 是 CANN 里专门做高性能 GEMM&#xff08;General Matrix Multiply&#xff09;的算子库&#xff0c;核心目标是把昇腾 NPU 的 Cube 单元利用率拉到 90% 以上。 ops-blas 和 ops-n…...

如何通过DeepEval解决LangChain应用的可观测性与评估难题

如何通过DeepEval解决LangChain应用的可观测性与评估难题 【免费下载链接】deepeval The LLM Evaluation Framework 项目地址: https://gitcode.com/GitHub_Trending/de/deepeval DeepEval作为专业的LLM评估框架&#xff0c;为LangChain开发者提供了从测试到生产监控的完…...