跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

Linux 权限管理指南:从 Shell 命令到文件访问控制

Linux 权限管理的核心内容,涵盖 Shell 命令原理、用户体系划分、文件访问主体定义及权限表示方法。重点介绍了 chmod、chown、chgrp 等权限修改命令的使用,以及 umask 权限掩码对新建文件默认权限的影响。此外,还详细阐述了目录权限的特殊性、共享文件场景下的权限冲突解决方案,以及粘滞位在防止恶意删除共享文件中的应用。

深海蔚蓝发布于 2026/2/23更新于 2026/10/2293 浏览
Linux 权限管理指南:从 Shell 命令到文件访问控制

Shell 命令及运行原理

Shell 概述

严格来说,Linux 的核心是内核(kernel),但普通用户无法直接与内核交互。Shell 是内核的 '外壳' 程序,作为命令行解释器(command Interpreter),它主要承担两大任务:

将用户输入的命令翻译给内核处理;

把内核的处理结果再翻译回给用户;

文章配图

类比 Windows 系统,我们操作 Windows 并非直接与内核交互,而是通过图形界面。在 Linux 中,Shell 有着相同的作用,它解析我们的指令并传递给内核,再将内核运行的结果解析后反馈给用户。

shell 与 bash/sh 的关系:

概念范畴: shell 是对'命令行解释器'的统称,不特指某一款工具。 具体实现: sh(Bourne Shell)和 bash(Bourne-Again Shell)都是 shell 的具体类型。 核心关联: sh 是最早的经典 shell 标准;bash 是 sh 的增强版,完全兼容 sh 的语法,同时新增了更多实用功能,是目前最主流的 shell。 日常称呼: 无论实际使用的是 bash、sh 还是其他 shell,日常交流中都可以统称为'shell'。

Shell 命令本质

指令的本质,是编译好的程序或脚本,它们会存放在系统的特定路径下。输入指令的过程,本质就是输入字符串。比如在 bash 命令行中,我们输入 ls 这样的命令,其实就是输入了一串字符,而这串字符对应着系统中特定的程序或脚本。

Shell 作用

  1. 进行命令行的解释
  2. 保护 OS,对于用户的非法请求,直接拦截

Linux 用户体系

Linux 下有两种用户:超级用户(root)、普通用户。

  • 超级用户:可以在 linux 系统下做任何事情,不受权限约束
  • 普通用户:在 linux 下做有限的事情,受权限约束
  • 命令提示符:其中超级用户的命令行提示符是'#',普通用户的命令行提示符是'$'

用户切换与提权

su 命令

语法: su [用户名]

功能: 切换用户身份(获取目标用户的权限),但保留原用户核心环境变量(仅工作目录切换到目标用户家目录)

事项:

  • root 用户切换普通用户:su [普通用户] 无需密码,切换后获得目标普通用户的权限,工作目录到其家目录,但核心环境变量保留 root 配置。
  • 普通用户切换 root 用户:su 或 su root 需输入 root 密码,切换后获得 root 的最高权限,工作目录到 /root,但核心环境变量保留原普通用户配置。
  • 普通用户切换普通用户:su [普通用户] 需输入目标用户密码,切换后获得该普通用户的权限,工作目录到其家目录,核心环境变量保留原用户配置。

su - 命令

语法: su - [用户名]

功能: 切换用户身份(获取目标用户的权限),并加载其完整环境(环境变量、工作目录等,完全模拟目标用户登录)

事项:

  • root 用户切换普通用户:su - [普通用户] 无需密码,切换后获得目标普通用户的权限,进入其家目录,加载其完整环境变量。
  • 普通用户切换 root 用户:su - 或 su - root 需输入 root 密码,切换后获得 root 的最高权限,进入 /root 目录,加载 root 的完整环境变量。
  • 普通用户切换普通用户:su - [普通用户] 需输入目标用户密码,切换后获得该普通用户的权限,进入其家目录,加载其完整环境变量。

上述指令本质上都属于 su 命令的范畴,其中 - 是 su 命令的一个功能性选项。

在 Linux 环境中,exit 命令或者按下 Ctrl + D 组合键,主要作用是退出当前的用户会话,可以理解为 '返回' 到上一级操作环境或者退出登录状态。

sudo 指令

功能: 普通用户临时获取高权限执行特权操作,无需切换到 root 账号

语法: sudo [需高权限的命令]

事项:

  • 密码验证: 输入当前普通用户的密码(而非 root 密码),验证通过后临时提权执行命令
  • 安全与效率: 减少切换 root 的操作成本,同时通过授权机制提升安全性
  • 使用前提: 默认仅 root 能直接用 sudo;普通用户需由超级管理员在 /etc/sudoers 文件中配置授权(列入可使用 sudo 的白名单)

文章配图

文件访问主体

  • 所有者(User, u):相当于文件 / 目录的'创建者、拥有者',对其有最直接的权限管理能力。
  • 所属组(Group, g):指与所有者同属一个用户组的成员,可共享部分针对该文件 / 目录的权限。
  • 其它用户(Others, o):既不是所有者,也不属于所有者所在组的用户,对该文件 / 目录的权限受严格限制。

root 用户和普通用户,都能当上面说的所有者、所属组用户或者其他用户里的任意一种。

文件类型

  • 目录文件(d):即文件夹,用于存放文件和子目录的特殊文件。
  • 普通文件(-):文本、可执行程序、库等基本都属于普通文件。
  • 软链接文件(l):类似 Windows 的快捷方式。
  • 块设备文件(b):例如硬盘、光驱等设备文件。
  • 管道文件(p):用来进行进程间通信的文件。
  • 字符设备文件(c):例如屏幕等串口设备文件。
  • 套接口文件(s):主要用于网络通信,也可用于同一台主机上不同进程间的通信。

目前主要学习目录文件和普通文件,别的只做了解。

【文件属性】: 文章配图

**注意:**连接数先不管,后面会学到。

【文件名后缀】: 在 Linux 系统下,文件名后缀没有直接意义,不代表不用。比如 gcc 编译器会通过后缀来判断文件是否是它能处理的类型(如 .c 为 C 源文件)。所以虽然系统不强制,但为了让这些软件能正常工作,实际使用中还是会用符合软件预期的后缀。

文件权限管理

什么是权限? 权限是指是否允许主体(如用户)对对象(如文件)执行特定操作的规则,和主体身份、对象属性都有关。当然权限并不能限制 root 用户,root 用户拥有最高权限。

基本权限

  • 读权限(r):对文件而言,可读取文件内容;对目录来说,能浏览该目录下的文件和子目录信息。
  • 写权限(w):对文件而言,可修改文件内容;对目录来说,可在目录内创建、删除或移动文件。
  • 执行权限(x):对文件而言,可将文件作为程序运行;对目录来说,可使用 cd 命令进入该目录。
  • 无权限表示:'-' 表示不具有对应的读、写或执行权限。

文章配图

文件权限值表示方法

【字符表示】:

权限说明
r--只读
-w-仅可写
--x仅可执行
rw-可读可写
-wx可写和可执行
r-x可读可执行
rwx可读可写可执行
---无权限

【8 进制数值表示】:

权限八进制二进制
r4100
w2010
x1001
rw6110
rx5101
wx3011
rwx7111
---0000

二进制中三位分别对应读、写、执行权限,1 代表有对应权限、0 代表无对应权限;八进制中每一位分别对应所有者、所属组、其他用户这三个身份。

【示例】: 文章配图

权限修改

chmod 命令(设置文件/目录权限)

功能: 设置文件的访问权限。

语法: chmod [参数] 权限 文件名

常用选项:

  • R:递归修改目录文件的权限

说明: 只有文件的拥有者和 root 才可以改变文件的权限。

【chmod 命令权限值的格式】:

  • +:向权限范围增加权限代号所表示的权限。
  • -:向权限范围取消权限代号所表示的权限。
  • =:向权限范围赋予权限代号所表示的权限。

用户符号:

  • u:拥有者。
  • g:拥有者同组用户。
  • o:其它用户。
  • a:所有用户。

演示:

chmod u+x test.c

给 test.c 文件的所有者添加执行权限。

文章配图

chmod a=rwx test.c

将 test.c 文件的所有者、所属组、其他用户权限都设为可读、可写、可执行。

文章配图

chmod 777 test.txt

把 test.txt 文件的所有者、所属组、其他用户权限都设为可读、可写、可执行。

文章配图

chown 指令(修改文件/目录的拥有者)

功能: 修改文件的拥有者。

语法: chown [参数] 用户名 文件名

常用选项:

  • -R:递归修改目录及其下所有文件的拥有者

说明: 普通用户不能将文件随便给别人,一般通过 sudo 提权强制给别人文件。

演示: 普通用户不能将文件随便给别人: 文章配图

root 可以强制给: 文章配图

chgrp 指令(修改文件/目录的所属组)

功能: 修改文件或目录的所属组。

语法: chgrp [参数] 用户组名 文件名

常用选项:

  • -R:递归修改目录及其下所有文件、子目录的所属组

说明: 只有文件的所有者、root 才可以改变文件的所属组(普通用户需通过 sudo 提权后操作)。

演示: root 将 div 文件的所属组给了 zyj 文章配图

权限使用案例

【案例 1】:root 不受任何权限约束 对于 div 目录 root 属于其他人,其他人没任何权限,但是 root 可以进去 div 目录,代表他无视了执行权限的约束。 文章配图

【案例 2】:文件的拥有者没有读写执行权限 在权限判断时,系统会优先检查是否为文件所有者,再依次判断所属组和其他用户;即便用户同时是所有者和所属组成员,也仅以所有者权限为准。若所有者自身没有读写执行权限,那么即便身为所有者,也无法对文件执行对应操作。 文章配图

文件起始权限问题

默认给普通文件的起始权限是 666,目录文件的起始权限是 777。 但从实际情况得知,新创建的普通文件和目录文件相对应的权限分别是 664、775。 这里大家就会疑惑为啥不一样,这个时候就引进了权限掩码这个概念。

权限掩码和 umask 命令

功能: 查看或修改文件权限掩码,影响新建文件和目录的默认权限。

格式: umask 权限值

说明: 将默认的存取权限减去 umask 设定的权限掩码后,得到文件或目录的预设权限。超级用户(root)默认掩码值为 0022(8 进制),普通用户默认为 0002(8 进制)。

文章配图

新建文件默认最大权限为 0666,新建目录默认最大权限为 0777。但实际创建的文件和目录权限并非上述值,因为会受到 umask 影响。假设默认最大权限为 mask,则实际创建的文件权限为:mask & (~umask)(& 为按位与运算,~ 为按位取反运算)。

演示:

umask // 查看
umask 044 // 设置

【计算示例】: 文章配图

实际默认权限计算演示 普通用户默认 umask 是 0002(八进制),转换为二进制为 000 000 010。对该二进制进行按位取反操作,得到 111 111 101。

实际创建文件或目录时,会将文件默认最大权限(文件为 0666,目录为 0777)与取反后的 umask 值进行按位与运算,最终得到的结果就是新创建文件或目录的实际权限。比如对于目录,0777(二进制 111 111 111)和 111 111 101 按位与,结果为 111 111 101,即八进制 775,这就是普通用户新建目录的实际默认权限。

文章配图

从图中圈出的二进制位变化可以清晰看到,umask 二进制中为 1 的对应位置,会使得默认最大权限(文件 666 对应二进制 110 110 110、目录 777 对应二进制 111 111 111)在这些位置的权限被'删除'。

【问题】:如何通过修改默认权限掩码,让新创建的目录文件只有执行权限 那就是要去掉三种权限的前两个位置的权限,对应的二进制掩码是 110,八进制就是 6,删除 3 种身份的所有读写权限的八进制掩码就是 0666

文章配图

目录权限

上面基本都是基于普通文件的权限进行介绍的,接下来讲解下目录文件的权限问题。

文章配图

我们从这个新创建的 div 文件进行探讨,刚开始的权限的 111 111 101。

1、去掉读权限 文章配图 图中观察得知,没有查看 div 目录下文件的权限了,但是可以进入这个目录。

2、去掉写权限 文章配图 不能进行文件的创建。 文章配图 不能进行文件的删除。 文章配图 不能移动。

3、去掉可执行权限 文章配图 不能进入目录。

Linux 目录权限中,可执行权限(x) 决定能否在目录下执行命令、进入目录(cd);若没有 x 权限,即便有读权限(r),也无法进入目录及执行相关操作。而若只有 x 权限但无 r 权限,虽能进入目录、执行命令(如 cd),但因缺乏读权限,无法读取目录下文件(如执行 ls 也无法列出文件)。

共享文件问题

由于普通用户自己的家目录权限是 700,所以我在我的家目录下创建的文件,别人都看不到。

文章配图

因此,我们所创建的共享文件,不能再任何一个人的家目录下。

那么我们想建立一个多用户共享的文件到底该在哪里创建呢?

文章配图

我们可以在根目录下用 root 账号创建一个文件,并将所有权限打开,这样别的用户就可以进行任何操作了。

文章配图

上述是两个普通用户,目前处在共享文件中。

文章配图

我用第一个用户创建了一个文件,第二个用户也能看到。

文章配图

我用 zyj 用户给文件写了点东西,因为 ljh 用户有读的权限,所以也能查看文件内容。

文章配图

zyj 关掉了 ljh 的读权限,ljh 读不了文件了。

文章配图

ljh 一气之下删掉了那个文件,是不是感觉有点奇怪,但是确实可以,因为共享目录的 w 权限其他人也拥有,自然也能删除该目录的子文件,那么我们该如何解决恶意删除问题呢?

有些人可能想去掉共享文件其他人的 w 权限,但是这样就不能创建文件了,那么共享文件自然就没有意义了,所以接下来将引入一个新的名词粘滞位。

粘滞位

当一个目录被设置为'粘滞位'(用 chmod +t),则该目录下的文件只能由

  1. 超级管理员删除
  2. 该目录的所有者删除
  3. 该文件的所有者删除

文章配图

这下 zyj 创建的文件 ljh 就不能删除了。

文章配图

文章配图

目录

  1. Shell 命令及运行原理
  2. Shell 概述
  3. Shell 命令本质
  4. Shell 作用
  5. Linux 用户体系
  6. 用户切换与提权
  7. su 命令
  8. su - 命令
  9. sudo 指令
  10. 文件访问主体
  11. 文件类型
  12. 文件权限管理
  13. 基本权限
  14. 文件权限值表示方法
  15. 权限修改
  16. chmod 命令(设置文件/目录权限)
  17. chown 指令(修改文件/目录的拥有者)
  18. chgrp 指令(修改文件/目录的所属组)
  19. 权限使用案例
  20. 文件起始权限问题
  21. 权限掩码和 umask 命令
  22. 目录权限
  23. 共享文件问题
  24. 粘滞位

更多推荐文章

查看全部
  • 转行 AI 产品经理:实现职业转变的关键步骤
  • 两个月从入门到独立进行漏洞挖掘的渗透测试指南
  • node-llama-cpp 安装与配置:Windows、Linux 和 Mac 全平台教程
  • 前端大数据导出优化:解决 Chrome 内存崩溃的实战方案
  • Android 编程权威指南:深入理解 Intent 与任务机制(一)
  • Linux 基础:yum 包管理与 vim 编辑器使用
  • OpenClaw Browser Relay 接入指南:AI 操控浏览器实战
  • OpenClaw v2026.3.8 全平台部署及 Ollama 本地模型对接实战
  • 大模型厂商入驻钉钉生态,争夺企业级应用入口
  • C++ 继承入门:从概念定义到默认成员函数
  • 信息系统安全等级保护定级流程、方法及注意事项
  • 鸿蒙 NAPI 跨语言开发:从原理到实战避坑指南
  • Python 日志轮转避坑指南:4 个常见错误与正确配置方式
  • 华为 OD 机试:采购订单处理逻辑(Java/Go)
  • 计算机视觉基础、模型架构与实战开发指南
  • Flood Fill 算法实战:图像渲染与岛屿问题解析
  • PyCharm 集成 Git 版本控制操作指南
  • 阿里开源 Page-Agent:一行 JS 代码实现大模型前端 DOM 操控
  • Python 五大核心应用场景详解:从开发到运维
  • GESP C++ 一级真题解析:数字替换

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online