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

Linux 文件权限深度解析:从原理到实战管理

Linux 文件权限深度解析:从原理到实战管理

  • Linux 文件权限深度解析:从原理到实战管理
    • 一、Linux 文件权限的核心逻辑:为什么需要权限?
    • 二、文件权限的表示方式:符号与数字双视角
      • 1. 权限的核心组成:三类主体 + 三种操作
        • (1)三类主体(访问者身份)
        • (2)三种操作(访问权限)
      • 2. 符号表示法:直观展示权限
      • 3. 数字表示法:高效计算权限
    • 三、权限管理实战:查看与修改权限
      • 1. 查看权限:ls 命令的核心用法
      • 2. 修改权限:chmod 命令(重点)
        • (1)数字模式修改:高效简洁
        • (2)符号模式修改:精准灵活
      • 3. 修改所有者与所属组:chown 与 chgrp
        • (1)修改所有者:chown
        • (2)修改所属组:chgrp
    • 四、特殊权限:SUID、SGID、Sticky Bit
      • 1. SUID(Set User ID):临时获取所有者权限
      • 2. SGID(Set Group ID):临时获取所属组权限
      • 3. Sticky Bit(粘滞位):限制目录文件删除
    • 五、常见权限问题与解决方案
      • 1. 无法执行脚本:Permission denied
      • 2. 无法进入目录:Permission denied
      • 3. 无法修改文件:Permission denied
      • 4. 团队共享目录中,无法修改他人文件
    • 六、总结:权限管理的核心原则

本文收录于《 Linux Shell 学习从入门到精通》

Linux 文件权限深度解析:从原理到实战管理

在 Linux 系统中,“权限”是保障系统安全的核心机制之一。不同于 Windows 系统的可视化权限设置,Linux 采用了一套简洁却严谨的权限体系,通过对文件和目录的访问控制,实现了多用户环境下的资源隔离与安全防护。无论是普通用户日常操作,还是运维人员排查权限问题,理解并掌握文件权限管理都是必备技能。本文将从权限的基本原理、表示方式,到权限的查看、修改及实战技巧,进行全方位拆解,让你彻底搞懂 Linux 文件权限。

一、Linux 文件权限的核心逻辑:为什么需要权限?

Linux 作为典型的多用户操作系统,同一台主机上可能同时存在多个用户(如管理员 root、普通用户 user1、user2 等),且不同用户对资源的访问需求不同。例如:

  • 管理员需要修改系统配置文件(如 /etc/passwd),而普通用户不应拥有此权限;

  • 用户 A 的私人文档(如 /home/userA/note.txt),不应被用户 B 随意查看或修改;

  • 系统命令(如 /bin/ls)需要所有用户都能执行,但普通用户不能修改。

文件权限的核心作用就是明确“谁”可以对“什么资源”执行“什么操作”,通过精细化的访问控制,防止误操作和恶意攻击,保障系统稳定与数据安全。

Linux 权限体系的核心三要素:主体(谁访问)客体(访问什么)操作(做什么)。后续所有权限管理都围绕这三要素展开。

二、文件权限的表示方式:符号与数字双视角

Linux 文件权限有两种常用表示方式:符号表示法(直观易懂,适合手动设置)和 数字表示法(简洁高效,适合脚本批量操作)。在学习权限修改前,必须先掌握这两种表示方式的对应关系。

1. 权限的核心组成:三类主体 + 三种操作

无论哪种表示方式,权限都围绕“三类主体”和“三种操作”构建:

(1)三类主体(访问者身份)
  • 所有者(Owner):文件或目录的创建者,用 u(user)表示;

  • 所属组(Group):所有者所在的用户组,组内其他用户的权限,用 g(group)表示;

  • 其他用户(Others):既不是所有者,也不属于所属组的用户,用 o(others)表示;

  • 所有用户(All):包含以上三类主体,用 a(all)表示。

(2)三种操作(访问权限)

不同类型的文件(普通文件、目录),权限的含义略有不同,核心操作分为三种:

权限符号权限名称对普通文件的含义对目录的含义
r读权限(read)可查看文件内容(如 catless可列出目录内的文件(如 ls
w写权限(write)可修改文件内容(如 vim 编辑、echo 覆盖)可在目录内创建、删除、重命名文件(如 touchrm
x执行权限(execute)可运行文件(如脚本 ./script.sh、命令 /bin/ls可进入目录(如 cd 命令)
关键区别:目录的 w 权限不代表能修改目录内文件的内容,而是能“管理文件本身”(创建/删除/重命名);目录的 x 权限是进入目录的前提,没有 x 权限,即使有 r 权限也无法查看目录内容。

2. 符号表示法:直观展示权限

符号表示法是通过 rwx 组合,按“所有者-所属组-其他用户”的顺序展示权限,共 9 个字符。我们通过 ls -l 命令查看的长格式输出中,最左侧的字段就是权限的符号表示。


# 查看文件权限的符号表示
ls -l test.txt script.sh doc/

输出结果:

-rwxr-xr-- 1 user user 120 10月 21 10:00 script.sh

-rw-r–r-- 1 user user 560 10月 21 09:30 test.txt

drwxr-xr-x 2 user user 4096 10月 21 09:00 doc/

权限字段解析(以 script.sh-rwxr-xr-- 为例):

  • 第 1 个字符:文件类型(- 普通文件、d 目录、l 符号链接等);

  • 第 2-4 个字符:所有者权限(rwx 表示所有者有读、写、执行权限);

  • 第 5-7 个字符:所属组权限(r-x 表示所属组有读、执行权限,无写权限);

  • 第 8-10 个字符:其他用户权限(r-- 表示其他用户仅有读权限)。

3. 数字表示法:高效计算权限

数字表示法是将 rwx 分别对应一个数值,通过求和得到每类主体的权限值,共 3 个数字(分别对应所有者、所属组、其他用户)。

  • r 对应数值 4(读权限);

  • w 对应数值 2(写权限);

  • x 对应数值 1(执行权限);

  • 无权限对应数值 0

常见权限组合及对应数字:

符号表示数字计算数字表示适用场景
rwxrwxrwx4+2+1, 4+2+1, 4+2+1777所有用户可读写执行(测试环境临时使用,不推荐生产环境)
rwxr-xr-x4+2+1, 4+1, 4+1755可执行文件、系统命令(所有者可修改,其他人仅可执行)
rw-r–r–4+2, 4, 4644普通文档(所有者可修改,其他人仅可查看)
rwx------4+2+1, 0, 0700私人脚本、敏感文件(仅所有者可访问)
drwxrwxr-x4+2+1, 4+2+1, 4+1775团队共享目录(组内用户可创建修改文件)
记忆口诀:r=4,w=2,x=1,无权限=0,三类主体各求和

三、权限管理实战:查看与修改权限

掌握了权限的表示方式后,核心就是实战中的“查看权限”和“修改权限”。查看权限主要依赖 ls 命令,修改权限则依赖 chmod(修改权限)、chown(修改所有者)、chgrp(修改所属组)三个命令。

1. 查看权限:ls 命令的核心用法

查看权限的核心命令是 ls -l(长格式显示),结合选项可查看更详细的身份信息:


# 1. 查看单个文件/目录的权限及所有者、所属组
ls -l test.txt# 2. 查看目录内所有文件的权限(含隐藏文件)
ls -al doc/# 3. 查看符号链接的真实权限(默认显示链接指向的文件权限)
ls -lL link.txt

输出字段解析(以 ls -l test.txt 为例):

-rw-r–r-- 1 user group 560 10月 21 09:30 test.txt

  • -rw-r--r--:权限(符号表示);

  • user:所有者(创建该文件的用户);

  • group:所属组(所有者所在的默认组)。

2. 修改权限:chmod 命令(重点)

chmod(change mode)是修改文件/目录权限的核心命令,支持符号模式数字模式两种修改方式,可根据场景选择。

(1)数字模式修改:高效简洁

直接指定 3 位数字权限值,一次性修改所有者、所属组、其他用户的权限,适合批量设置或已知目标权限的场景。


# 语法:chmod 数字权限 文件/目录
chmod 755 script.sh  # 将脚本设置为“所有者可读写执行,其他人可读写”
chmod 644 test.txt   # 将文档设置为“所有者可读写,其他人仅可读”
chmod 700 secret/    # 将目录设置为“仅所有者可访问”

递归修改目录权限:若要修改目录及内部所有文件/子目录的权限,需添加 -R(recursive)选项,如 chmod -R 775 team_dir/(团队共享目录递归授权)。

(2)符号模式修改:精准灵活

符号模式通过“主体+操作+权限”的组合,精准修改某类主体的特定权限,无需覆盖所有权限,适合局部调整。


# 语法:chmod 主体(±=)权限 文件/目录
# 主体:u(所有者)、g(所属组)、o(其他)、a(所有)
# 操作:+(添加权限)、-(移除权限)、=(设置权限,覆盖原有)
# 权限:r、w、x# 1. 给所有者添加执行权限
chmod u+x script.sh# 2. 给所属组移除写权限
chmod g-w test.txt# 3. 给其他用户设置“仅读”权限(覆盖原有权限)
chmod o=r secret.txt# 4. 给所有用户添加读权限
chmod a+r public_dir/# 5. 给所有者和所属组添加写权限
chmod ug+w team.txt

符号模式的优势:例如某文件权限为 rwxr--r--,若只想给所属组添加执行权限,直接用 chmod g+x 即可,无需记忆完整数字权限。

3. 修改所有者与所属组:chown 与 chgrp

权限的主体(所有者、所属组)也可修改,分别通过 chown(change owner)和 chgrp(change group)命令实现,仅管理员(root)或文件所有者可执行

(1)修改所有者:chown

# 语法:chown 新所有者 文件/目录
sudo chown userB test.txt  # 将 test.txt 的所有者改为 userB# 同时修改所有者和所属组(所有者:所属组)
sudo chown userB:groupB doc/  # 将 doc 目录的所有者改为 userB,所属组改为 groupB# 递归修改目录及内部内容的所有者
sudo chown -R userC team_dir/
(2)修改所属组:chgrp

# 语法:chgrp 新所属组 文件/目录
sudo chgrp dev_group script.sh  # 将脚本的所属组改为 dev_group# 递归修改目录所属组
sudo chgrp -R dev_group project/

注意:修改所有者时,若新所有者不存在,会报错;需先通过 useradd 命令创建用户,再修改权限主体。

四、特殊权限:SUID、SGID、Sticky Bit

除了基础的 r、w、x 权限,Linux 还有三个特殊权限,用于实现特殊场景的访问控制,虽然不常用,但在系统管理中至关重要。

1. SUID(Set User ID):临时获取所有者权限

SUID 权限仅对可执行文件有效,当普通用户执行带 SUID 权限的文件时,会临时获得该文件所有者的权限(执行结束后权限回收)。


# 示例:passwd 命令(修改密码需写入 /etc/shadow,仅 root 可写)
ls -l /usr/bin/passwd
# 输出:-rwsr-xr-x 1 root root 59936 6月  10 2023 /usr/bin/passwd

权限字段中的 s 替代了所有者的 x 权限,表示已设置 SUID。普通用户执行 passwd 时,会临时获得 root 权限,从而修改自己的密码(写入 /etc/shadow)。


# 设置 SUID 权限(数字模式:在原权限前加 4)
sudo chmod 4755 program.sh  # 4+755=4755,所有者权限变为 rws
# 或符号模式
sudo chmod u+s program.sh# 移除 SUID 权限
sudo chmod u-s program.sh

2. SGID(Set Group ID):临时获取所属组权限

SGID 权限对可执行文件目录都有效:

  • 可执行文件:执行时临时获得文件所属组的权限;

  • 目录:在该目录内创建的新文件,所属组会继承目录的所属组(而非创建者的默认组),适合团队共享目录。


# 示例:设置团队共享目录的 SGID 权限
sudo chmod 2775 team_dir/  # 2+775=2775,所属组权限变为 rws
# 或符号模式
sudo chmod g+s team_dir/# 验证:在目录内创建文件,所属组为目录的所属组
touch team_dir/new.txt
ls -l team_dir/new.txt
# 输出:-rw-rw-r-- 1 user dev_group 0 10月 21 11:00 new.txt

3. Sticky Bit(粘滞位):限制目录文件删除

Sticky Bit 仅对目录有效,设置后,即使其他用户对目录有 w 权限,也只能删除自己创建的文件,无法删除其他用户的文件,适合公共目录(如 /tmp)。


# 示例:系统默认的 /tmp 目录(已设置粘滞位)
ls -ld /tmp
# 输出:drwxrwxrwt 10 root root 4096 10月 21 10:00 /tmp/

权限字段中的 t 替代了其他用户的 x 权限,表示已设置粘滞位。


# 设置粘滞位(数字模式:在原权限前加 1)
sudo chmod 1777 public_dir/  # 1+777=1777,其他用户权限变为 rwt
# 或符号模式
sudo chmod o+t public_dir/# 移除粘滞位
sudo chmod o-t public_dir/

五、常见权限问题与解决方案

在实际使用中,权限问题是最常见的报错场景,以下是高频问题及解决思路:

1. 无法执行脚本:Permission denied


./script.sh
# 报错:-bash: ./script.sh: Permission denied

原因:当前用户对脚本没有 x 权限。
解决方案:给当前用户(所有者)添加执行权限:chmod u+x script.sh

2. 无法进入目录:Permission denied


cd test_dir/
# 报错:-bash: cd: test_dir/: Permission denied

原因:当前用户对目录没有 x 权限(进入目录的前提)。
解决方案:给当前用户添加执行权限:chmod u+x test_dir/chmod a+x test_dir/(公共目录)。

3. 无法修改文件:Permission denied


vim test.txt
# 报错:E505: "/home/userA/test.txt" is read-only (add ! to override)

原因:当前用户不是文件所有者,且没有 w 权限。
解决方案:1. 所有者修改权限:chmod g+w test.txt(给所属组添加写权限);2. 管理员修改所有者:sudo chown userB test.txt

4. 团队共享目录中,无法修改他人文件

原因:文件的所属组不是团队组,或所属组没有 w 权限。
解决方案:1. 给目录设置 SGID 权限,确保新文件继承团队组:sudo chmod g+s team_dir/;2. 批量修改现有文件的所属组:sudo chgrp -R dev_group team_dir/;3. 给所属组添加写权限:sudo chmod -R g+w team_dir/

六、总结:权限管理的核心原则

Linux 文件权限体系看似复杂,但核心逻辑围绕“最小权限原则”——即给用户分配完成任务所需的最小权限,避免过度授权导致安全风险。总结关键要点:

  • 权限三要素:主体(所有者、所属组、其他)、客体(文件/目录)、操作(r、w、x);

  • 两种表示:符号表示法(直观)、数字表示法(高效),755(可执行文件)、644(普通文件)是最常用的权限;

  • 三大命令:chmod(改权限)、chown(改所有者)、chgrp(改所属组),递归修改需加 -R;

  • 特殊权限:SUID(临时获所有者权限)、SGID(团队目录共享)、Sticky Bit(公共目录防删除);

  • 安全原则:避免使用 777 权限,敏感文件用 700,公共文档用 644,团队目录用 775+SGID。

若有转载,请标明出处:https://blog.csdn.net/CharlesYuangc/article/details/153687842

http://www.dtcms.com/a/512083.html

相关文章:

  • SpringMVC 数据校验和BindingResult以及自定义校验注解
  • [明道云专栏·里程碑] 从第一篇到第一百篇:这是一场属于“低代码实战者”的长跑
  • Ubuntu 安装 Harbor
  • 网站屏蔽ip地址河南网站备案系统短信
  • 中科院网站做的好的院所双鸭山网站建设公司
  • Linux配置Samba文件共享并访问Windows文件
  • Cursor配置markdown转Word的MCP工具教程
  • 常见springboot相关注解
  • ◆comfyUI教程◆第2章13节 XL模型专用工作流与refiner精炼
  • PostIn V1.3.1版本发布,新增在线更新程序命令,新增请求体json支持引用变量
  • asp网站作业下载二级建造师报名时间2022年官网
  • 信息平台网站建设微信商城网站方案
  • OpenCV计算机视觉库
  • 区块链的效率引擎:梅克尔树原理解析与应用
  • TF-A CMake构建系统
  • PowerShell下载和安装图解(附安装包,适合新手)
  • 分析网易严选网站开发wordpress类别图标
  • 元服务上架自检
  • 8款企业微信SCRM工具功能对比分析
  • 个人网站建设小江网站建设做网站需要多少钱
  • 蚂蚁集团开源的万亿参数模型Ling-1T和Ring-1T-preview
  • 南宁希噢网站开发工作室wordpress打造官网
  • 区块链的基石:深入解析哈希指针与链表数据结构
  • Windows 系统下使用 Docker 安装 Milvus 向量数据库
  • 【TDengine TSDB】使用DBeaver客户端访问
  • Dockerfile及其部署镜像步骤
  • 建设部网站资质标准昌平电子网站建设
  • 大模型-7种大模型微调方法 上
  • (三).Net, NextJS(NextJs初始化/图片闪烁/定义types/分页/过滤/)
  • 中国建设银行网站密码忘了怎么办企业网站设计策划