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

文章目录

  • 前言
    • ‼️一、Linux权限的概念
    • ‼️二、Linux权限管理
      • [❕2.1 文件访问者的分类(人)](#❕2.1 文件访问者的分类(人))
      • [❕2.2 文件类型和访问权限(事物属性)](#❕2.2 文件类型和访问权限(事物属性))
        • [✔️1. 文件类型](#✔️1. 文件类型)
        • [✔️2. 基本权限](#✔️2. 基本权限)
        • [✔️3. 权限值的表示方法](#✔️3. 权限值的表示方法)
      • [❕2.3 文件访问权限的相关设置方法](#❕2.3 文件访问权限的相关设置方法)
        • [✔️1. `chmod` 命令](#✔️1. chmod 命令)
        • [✔️2. `chown` 命令](#✔️2. chown 命令)
        • [✔️3. `chgrp` 命令](#✔️3. chgrp 命令)
    • ‼️三、其他权限问题
      • [❕3.1 问题一:为什么普通文件是664,目录文件是775?](#❕3.1 问题一:为什么普通文件是664,目录文件是775?)
        • [✔️1. umask 的作用与工作原理](#✔️1. umask 的作用与工作原理)
        • [✔️2. umask 的计算规则](#✔️2. umask 的计算规则)
        • [✔️3. 查看和设置 umask](#✔️3. 查看和设置 umask)
      • [❕3.2 问题二:目录的权限代表什么?](#❕3.2 问题二:目录的权限代表什么?)
        • [✔️1. 读取权限(`r` - Read)](#✔️1. 读取权限(r - Read))
        • [✔️2. 写入权限(`w` - Write)](#✔️2. 写入权限(w - Write))
        • [✔️3. 执行权限(`x` - Execute)](#✔️3. 执行权限(x - Execute))
      • [❕3.3 问题三:想要建立共享文件,但不想让其他人删除怎么办?](#❕3.3 问题三:想要建立共享文件,但不想让其他人删除怎么办?)
        • [✔️1. 粘滞位的作用](#✔️1. 粘滞位的作用)
        • [✔️2. 粘滞位的表示](#✔️2. 粘滞位的表示)
        • [✔️3. 设置和移除粘滞位](#✔️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 查看文件列表时,可以看到类似如下的输出:

apl 复制代码
-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 文件或目录权限的命令。权限可以用符号或八进制数表示。

基本语法

bash 复制代码
chmod [选项] 模式 文件名
  • 模式 :可以是符号表示法 (u+r, g-w) 或数字表示法 (755)。
  • 文件名:要更改权限的目标文件或目录。

a. 符号表示法

符号表示法适合逐步修改权限:

bash 复制代码
chmod [ugoa][+-=][rwx] 文件名
符号 作用
u 文件所有者 (user)
g 文件所属组 (group)
o 其他人 (others)
a 所有用户 (all)
+ 添加权限
- 移除权限
= 直接设定权限

示例

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

    bash 复制代码
    chmod u+w filename
  2. 删除其他人的执行权限:

    bash 复制代码
    chmod o-x filename
  3. 所有用户设定只读权限:

    bash 复制代码
    chmod a=r filename

b. 数字表示法

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

权限 数值 二进制
--- 0 000
--x 1 001
-w- 2 010
-wx 3 011
r-- 4 100
r-x 5 101
rw- 6 110
rwx 7 111
  1. 设置文件权限为 rwxr-xr--

    bash 复制代码
    chmod 754 filename
  2. 设置目录权限为 rwx------

    bash 复制代码
    chmod 700 directory_name

常用选项

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

示例

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

    bash 复制代码
    chmod -R 755 /path/to/directory
  2. 使用参考文件权限:

    bash 复制代码
    chmod --reference=ref_file target_file
✔️2. chown 命令

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

语法

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

常用选项

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

示例

  1. 更改文件所有者

    bash 复制代码
    chown user1 filename

    filename 的所有者改为 user1

  2. 更改所有者和组

    bash 复制代码
    chown user1:group1 filename

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

  3. 仅更改组

    bash 复制代码
    chown :group1 filename
  4. 递归更改目录和文件的所有者

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

    bash 复制代码
    chown --reference=ref_file target_file

✔️3. chgrp 命令

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

语法

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

常用选项

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

示例

  1. 更改文件的所属组

    bash 复制代码
    chgrp group1 filename

    filename 的所属组改为 group1

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

    bash 复制代码
    chgrp -R group1 /path/to/directory
  3. 参考其他文件的组

    bash 复制代码
    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

bash 复制代码
umask 077
touch test3.txt
mkdir dir3
✔️3. 查看和设置 umask
  1. 查看当前 umask 值

运行命令:

bash 复制代码
umask

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

例如:

bash 复制代码
$ umask
0022
  1. 临时设置 umask

在当前会话中临时更改:

bash 复制代码
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。 例如:
    bash 复制代码
    drwxrwxrwt  10 root root  4096 Nov 19  /tmp

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

  2. 八进制模式 :粘滞位对应的八进制值是 1 ,可以通过在权限数字前加上 1 设置粘滞位。例如:

    • 1755:设置了粘滞位,并且目录权限为 rwxr-xr-x
    • 1777:设置了粘滞位,并且目录权限为 rwxrwxrwx(例如 /tmp 目录)。

✔️3. 设置和移除粘滞位

设置粘滞位

使用 chmod 命令为目录添加粘滞位:

bash 复制代码
chmod +t directory_name  # 使用符号模式添加粘滞位。
chmod 1777 directory_name  # 使用八进制模式设置权限并添加粘滞位。

移除粘滞位

bash 复制代码
chmod -t directory_name  # 使用符号模式移除粘滞位。
chmod 0777 directory_name  # 使用八进制模式移除粘滞位。

结语

Linux权限体系是一个兼具严谨与灵活的设计,其核心在于平衡安全性与实用性。通过深入理解权限管理的原理和操作,你不仅能够应对常见的安全威胁,还能更高效地管理系统资源。希望本文能为你的学习和实践提供实用参考,让你在Linux系统的使用中更加自信、游刃有余。

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

相关推荐
效率客栈老秦1 天前
Python Trae提示词开发实战(8):数据采集与清洗一体化方案让效率提升10倍
人工智能·python·ai·提示词·trae
倔强的石头_1 天前
【金仓数据库】ksql 指南(六)—— 创建与管理用户和权限(KingbaseES 安全控制核心)
数据库
小和尚同志1 天前
虽然 V0 很强大,但是ScreenshotToCode 依旧有市场
人工智能·aigc
HyperAI超神经1 天前
【vLLM 学习】Rlhf
人工智能·深度学习·学习·机器学习·vllm
芯盾时代1 天前
石油化工行业网络风险解决方案
网络·人工智能·信息安全
线束线缆组件品替网1 天前
Weidmüller 工业以太网线缆技术与兼容策略解析
网络·人工智能·电脑·硬件工程·材料工程
lambo mercy1 天前
深度学习3:新冠病毒感染人数预测
人工智能·深度学习
Echo_NGC22371 天前
【神经视频编解码NVC】传统神经视频编解码完全指南:从零读懂 AI 视频压缩的基石
人工智能·深度学习·算法·机器学习·视频编解码
摆烂咸鱼~1 天前
机器学习(10)
人工智能·机器学习·支持向量机
数据皮皮侠AI1 天前
上市公司股票名称相似度(1990-2025)
大数据·人工智能·笔记·区块链·能源·1024程序员节