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

Linux 权限详解:从文件系统到用户组策略

Linux 权限管理涵盖 Shell 命令原理、用户体系及文件访问控制。主要内容包括超级用户与普通用户的区别,su 和 sudo 提权机制,以及 rwx 基本权限模型。通过 chmod、chown、chgrp 命令可调整所有者、所属组及其他用户的读写执行权限。umask 用于设定新建文件的默认掩码。目录权限中 x 决定进入能力,w 决定创建删除能力。粘滞位防止共享目录下非所有者误删文件。掌握这些规则是保障系统安全与资源规范访问的基础。

LinuxPan发布于 2026/2/7更新于 2026/7/2151 浏览
Linux 权限详解:从文件系统到用户组策略

Linux 权限详解

一、Shell 命令以及运行原理

1. 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(如 zsh),日常交流中都可以统称为'Shell'。

2. Shell 命令的本质

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

3. Shell 存在的意义

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

二、Linux 用户划分

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

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

三、Linux 用户切换和指令提权

1. su 命令

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

事项:

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

2. su - 命令

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

事项:

  • root 用户切换普通用户: 无需密码,切换后获得目标普通用户的权限,进入其家目录,加载其完整环境变量。
su - [普通用户]
  • 普通用户切换 root 用户:su - 或 su - root 需输入 root 密码,切换后获得 root 的最高权限,进入 /root 目录,加载 root 的完整环境变量。
  • 普通用户切换普通用户:su - [普通用户] 需输入目标用户密码,切换后获得该普通用户的权限,进入其家目录,加载其完整环境变量。
  • 上述指令本质上属于 su 命令的范畴,其中 - 是 su 命令的一个功能性选项。

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

    3. sudo 指令

    功能: 普通用户临时获取高权限执行特权操作,无需切换到 root 账号。 语法: sudo [需高权限的命令]

    事项:

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

    四、文件访问者

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

    root 用户和普通用户,都能当上面说的所有者、所属组用户或者其他用户里的任意一种。不同类型的用户会以这三种身份里的一种,去和文件的权限规则打交道。

    五、文件类型

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

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

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

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

    六、Linux 文件权限管理

    1. 基本权限

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

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

    2. 文件权限值的表示方法

    字符表示:

    符号含义符号含义
    r--只读-w-仅可写
    --x仅可执行rw-可读可写
    -wx可写和可执行r-x可读可执行
    rwx可读可写可执行---无权限

    8 进制数值表示:

    符号数值二进制
    r4100
    w2010
    x1001
    rw6110
    rx5101
    wx3011
    rwx7111
    ---0000

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

    3. 权限的修改

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

    功能: 设置文件的访问权限。 语法: chmod [参数] 权限 文件名 常用选项:

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

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

    权限值格式:

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

    用户符号:

    • 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 提权后操作)。

    4. 一些关于权限使用的案例

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

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

    5. 关于文件的起始权限问题

    默认给普通文件的起始权限是 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 值进行按位与运算,最终得到的结果就是新创建文件或目录的实际权限。

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

    6. 目录权限

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

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

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

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

    3. 去掉可执行权限 不能进入目录。

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

    7. 共享文件问题

    由于普通用户自己的家目录权限是 700,所以我在我的家目录下创建的文件,别人都看不到。 因此,我们所创建的共享文件,不能再任何一个人的家目录下。 那么我们想建立一个多用户共享的文件到底该在哪里创建呢? 我们可以在根目录下用 root 账号创建一个文件,并将所有权限打开,这样别的用户就可以进行任何操作了。

    上述是两个普通用户,目前处在共享文件中。 我用第一个用户创建了一个文件,第二个用户也能看到。 我用 zyj 用户给文件写了点东西,因为 ljh 用户有读的权限,所以也能查看文件内容。 zyj 关掉了 ljh 的读权限,ljh 读不了文件了。 ljh 一气之下删掉了那个文件,是不是感觉有点奇怪,但是确实可以,因为共享目录的 w 权限其他人也拥有,自然也能删除该目录的子文件,那么我们该如何解决恶意删除问题呢? 有些人可能想去掉共享文件其他人的 w 权限,但是这样就不能创建文件了,那么共享文件自然就没有意义了,所以接下来将引入一个新的名词粘滞位。

    8. 粘滞位

    当一个目录被设置为"粘滞位"(用 chmod +t),则该目录下的文件只能由以下人员删除:

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

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

    目录

    1. Linux 权限详解
    2. 一、Shell 命令以及运行原理
    3. 1. Shell 是什么
    4. 2. Shell 命令的本质
    5. 3. Shell 存在的意义
    6. 二、Linux 用户划分
    7. 三、Linux 用户切换和指令提权
    8. 1. su 命令
    9. 2. su - 命令
    10. 3. sudo 指令
    11. 四、文件访问者
    12. 五、文件类型
    13. 六、Linux 文件权限管理
    14. 1. 基本权限
    15. 2. 文件权限值的表示方法
    16. 3. 权限的修改
    17. chmod 命令(设置文件/目录权限)
    18. chown 指令(修改文件/目录的拥有者)
    19. chgrp 指令(修改文件/目录的所属组)
    20. 4. 一些关于权限使用的案例
    21. 5. 关于文件的起始权限问题
    22. umask 命令(查看/修改文件的权限掩码)
    23. 6. 目录权限
    24. 7. 共享文件问题
    25. 8. 粘滞位
    • 免费图片AI生成工具免费生成了解详情
    • Magick API 一键接入全球大模型注册送1000万token查看
    • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
    • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
    • 100+免费在线小游戏爽一把
    极客日志微信公众号二维码

    微信扫一扫,关注极客日志

    微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

    更多推荐文章

    查看全部
    • C/C++ 算法入门:一维动态规划基础实战
    • 纯 QWidget 实现电子地图控件:多线程瓦片加载与图形覆盖
    • C++ ROS 回调函数中的对象生命周期陷阱:Use-After-Free 解析
    • C 语言代码优化与性能调优:编译器、内存与算法实战
    • AI Agent Python Executor 技能:代码动态执行与沙箱隔离
    • Linux 线程安全与线程同步
    • Trae AI IDE 实战:从零开发 AI Chatbot 应用
    • 基于 OpenClaw 与 Claude 的自动化写作工作流实践
    • 纯 C# 自研轻量 UI 引擎:XchyUI 架构解析与性能实践
    • Copilot 与 Codeium 等 AI 代码助手核心技术解析
    • C++ 类的默认成员函数详解及日期类实现
    • 免费开源漫画阅读器 Komikku 使用指南
    • OmniInsert:扩散变换器解决无掩码视频插入难题
    • 医疗 AI 轻量化部署方案梳理与优化路径
    • 小米智能家居 Miloco 分离式部署指南
    • Android 自定义 PageTransformer 实现 ViewPager 动画切换效果
    • 从 MySQL 到 OpenTenBase:电商平台分布式数据库架构升级实战
    • OpenClaw AI 智能代理搭建与配置指南
    • Stable Diffusion 模型原理与本地部署实践
    • Xilinx FPGA 实现 RISC-V 五级流水线 CPU 设计实战

    相关免费在线工具

    • 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