Linux chmod 命令(保姆级教程)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

前言

在 Linux 系统中,文件和目录的权限管理是确保系统安全与功能正常的核心机制之一。而 chmod 命令作为控制文件权限的「钥匙」,是每位开发者和运维人员必须掌握的技能。无论你是刚接触 Linux 的编程初学者,还是希望深入理解权限逻辑的中级开发者,掌握 chmod 命令的使用方式和底层原理,都能显著提升你的系统操作效率和安全性。本文将通过循序渐进的讲解、实用案例和形象比喻,带你全面理解这一重要工具。


权限基础:文件的“身份”与“能力”

在 Linux 中,每个文件或目录都有三个核心身份:用户(User)组(Group)其他(Others)。这三个身份分别对应不同的访问权限,权限类型包括读(Read)写(Write)执行(Execute)

1. 权限的三组“门锁”

可以将文件想象成一个带三把锁的保险箱:

  • 用户锁:文件所有者的权限(如你创建的文件)
  • 组锁:与文件所属组成员共享的权限
  • 其他锁:系统中其他所有用户的权限

每把锁都有三个“开关”:

  • 读(r):允许查看文件内容或目录下的文件列表
  • 写(w):允许修改文件内容或目录下的文件
  • 执行(x):允许运行文件(如脚本)或进入目录

例如,-rwxr-xr-x 表示:

  • 用户(所有者)有读、写、执行权限;
  • 组成员有读、执行权限;
  • 其他用户仅有读、执行权限。

2. 权限的数字表示法

除了符号(如 rwx),权限还可以用八进制数字表示:

  • 4:读权限
  • 2:写权限
  • 1:执行权限

三个权限的组合通过加法计算:

  • rwx = 4+2+1 = 7
  • r-x = 4+0+1 = 5
  • rw- = 4+2+0 = 6

因此,-rwxr-xr-x 对应的数字权限是 755


符号模式:直观修改权限的“直接操作”

chmod 命令支持两种模式:符号模式八进制模式。符号模式通过符号(+-=)直接增减权限,适合快速调整。

1. 符号模式的基本语法

chmod [身份][操作][权限] 文件  

其中:

  • 身份u(用户)、g(组)、o(其他)、a(全部)
  • 操作+(添加)、-(移除)、=(赋值)
  • 权限rwx

示例 1:为文件 script.sh 的所有者添加执行权限:

chmod u+x script.sh  

示例 2:移除其他用户对目录的写权限:

chmod o-w my_folder/  

2. 组合权限的“批量操作”

可以一次指定多个权限或身份。例如:

chmod u=rw,go=r file.txt  

3. 特殊场景:递归修改目录权限

使用 -R 参数可递归修改目录及其子目录的权限:

chmod -R 755 project_folder/  

八进制模式:精准控制的“密码组合”

八进制模式通过数字直接指定权限值,适合快速设置标准化权限(如 755)。

1. 数字权限的计算逻辑

每个权限组(用户、组、其他)对应一个数字,例如:

  • 755 表示:
    • 用户:7(4+2+1) → rwx
    • 组:5(4+0+1) → r-x
    • 其他:5 → r-x

计算步骤

  1. 将权限分为三组(用户、组、其他);
  2. 每组的数字是读、写、执行的和;
  3. 合并为三位数的八进制数字。

2. 常见权限值的场景应用

场景权限值解释
脚本可执行755用户可读写执行,其他用户可读执行
配置文件(仅读)644用户可读写,其他用户仅读
临时目录(仅用户访问)700用户全权限,组和其他无权限

示例:将 index.html 设置为仅用户可写:

chmod 644 index.html  # 6(用户 rw) + 4(组 r) +4(其他 r)  

特殊权限:超越基础的“超级能力”

Linux 还提供了三种特殊权限,用于实现更复杂的权限控制。

1. SUID(Set User ID)

当文件被设置 SUID 时,执行该文件的用户将临时获得文件所有者的权限。例如:

  • /usr/bin/passwd 具有 SUID 权限,普通用户修改密码时可临时获得 root 权限修改 /etc/shadow 文件。

设置方法

chmod u+s executable_file  

权限显示为 rwsr-xr-x(注意第三个字符变为 s)。

2. SGID(Set Group ID)

SGID 允许文件或目录在执行时继承所属组的权限。例如:

  • 在 SGID 目录下创建的文件,其组权限将继承目录的组,而非用户默认组。

设置方法

chmod g+s directory/  

权限显示为 rwxr-Sr-x(或 rwxr-sr-x,取决于具体实现)。

3. 粘滞位(Sticky Bit)

粘滞位仅对目录有效,防止非所有者删除目录中的文件。例如:/tmp 目录通常启用粘滞位,避免用户删除他人文件。

设置方法

chmod +t directory/  

权限显示为 rwxrwxrwt(最后一位为 t)。


常见错误与最佳实践

1. 权限过松导致的安全风险

  • 错误示例:将脚本设置为 777rwxrwxrwx),允许所有用户执行和修改。
  • 风险:可能导致恶意用户篡改脚本内容或注入攻击。
  • 解决方案:优先使用 755,仅在必要时开放最小权限。

2. 符号模式的符号顺序陷阱

在符号模式中,多个权限修改需注意顺序:

chmod o-w+x file.txt  

chmod o+x-w file.txt  # 等价于 o-w+x  

3. 八进制模式的“覆盖陷阱”

八进制模式会覆盖原有权限,而非叠加。例如:

chmod 755 file.txt  # 结果变为 755(rwxr-xr-x)  

因此,需谨慎使用八进制模式,避免意外移除原有权限。


实战案例:搭建一个安全的 Web 项目目录

假设你有一个 Web 项目目录 web_project/,包含以下结构:

web_project/  
├── index.html  
├── scripts/  
│   └── app.js  
└── uploads/  

目标

  1. 脚本文件 app.js 需可执行;
  2. uploads 目录允许所有用户上传文件,但仅目录所有者可删除文件;
  3. 确保其他用户无法修改 index.html

步骤

chmod u+x scripts/app.js  

chmod 777 uploads/  
chmod +t uploads/  

chmod 644 index.html  

结论

Linux chmod 命令 是权限管理的核心工具,其符号模式与八进制模式各具特点,而特殊权限则提供了更灵活的控制能力。通过本文的讲解,希望读者能掌握以下关键点:

  1. 理解用户、组、其他权限的分层逻辑;
  2. 熟练使用符号模式和八进制模式调整权限;
  3. 警惕权限设置中的常见风险,如过度开放或符号顺序错误;
  4. 结合实际场景(如 Web 项目)应用 chmod 的最佳实践。

掌握 chmod 不仅能提升你的系统操作能力,更能帮助你构建更安全、高效的 Linux 环境。在后续学习中,建议结合 chown(修改所有者)和 umask(默认权限设置)进一步深入权限管理的细节。

最新发布