linux chmod(手把手讲解)

更新时间:

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

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

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

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

在 Linux 系统中,文件和目录的权限管理是保障系统安全与功能正常的核心机制之一。chmod(Change Mode)命令作为调整文件或目录权限的工具,是每位开发者必须掌握的基础技能。无论是部署 Web 服务、设置脚本执行权限,还是解决文件访问问题,chmod 都是不可或缺的。本文将从基础概念到高级用法,结合实际案例,帮助读者系统性掌握 linux chmod 的使用逻辑与技巧。


一、理解 Linux 文件权限模型

Linux 文件系统采用 用户-组-其他(User-Group-Other, UGO) 的三级权限管理模式,每个文件或目录的权限由 读(Read)、写(Write)、执行(Execute) 三种基本权限构成。

1.1 权限的组成与表示方式

  • 用户(User):文件或目录的所有者权限。
  • 组(Group):文件所属组内其他用户权限。
  • 其他(Other):系统中非用户和非组成员的权限。

每种权限通过 符号或数字 表示:

  • 符号模式:用 rwx 字符组合表示权限(如 rwxr-xr--)。
  • 数字模式:通过 3 位八进制数表示权限(如 755)。

示例

-rw-r--r-- 1 user group 1234 May 10 10:00 file.txt  

解读:

  • rw-:用户有读写权限,无执行权限。
  • r--:组用户仅有读权限。
  • r--:其他用户仅有读权限。

1.2 权限的作用场景

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

比喻
可以将权限想象为一扇门上的锁:

  • 读权限:查看门内是否有物品。
  • 写权限:可以放入或取出物品。
  • 执行权限:可以打开门进入内部。

二、符号模式:直观修改权限

符号模式通过 chmod 的符号操作符(如 +-=)直接修改权限,适合对权限变化有明确意图的场景。

2.1 符号模式语法

chmod [参考对象][操作符][权限类型] 文件/目录  
  • 参考对象u(用户)、g(组)、o(其他)、a(全部)。
  • 操作符+(添加)、-(移除)、=(赋值)。
  • 权限类型rwx

2.1.1 常见用法示例

  1. 添加权限

    # 为文件的所有者添加执行权限  
    chmod u+x script.sh  
    # 为所有用户添加写权限  
    chmod a+w shared.txt  
    
  2. 移除权限

    # 移除其他用户的读权限  
    chmod o-r file.txt  
    # 移除组用户的写权限  
    chmod g-w directory  
    
  3. 赋值权限(覆盖原有权限):

    # 将文件权限设为:用户可读写,组和其他用户只读  
    chmod u=rw,g=o=r file.txt  
    

2.2 特殊场景:粘滞位与 SUID/SGID

chmod 还支持设置特殊权限,如 粘滞位(sticky bit)SUID/SGID,用于增强安全性或功能控制。

  • 粘滞位:防止非所有者删除目录中的文件(常见于 /tmp 目录)。

    # 设置粘滞位  
    chmod +t /shared_folder  
    # 查看权限:显示为 drwxrwxrwt  
    
  • SUID(Set User ID):执行文件时临时获取所有者的权限。

    # 脚本执行时以所有者权限运行  
    chmod u+s sensitive_script.sh  
    
  • SGID(Set Group ID):执行文件时临时获取所属组的权限。

    # 新建文件继承目录的组权限  
    chmod g+s project_folder  
    

三、数字模式:精准控制权限

数字模式通过 3 位八进制数 快速设置权限,每位数字对应用户、组、其他三类权限的组合。

3.1 权限与数字的映射关系

权限组合数值解释
---0无权限
--x1执行
-w-2
-wx3写+执行(2+1)
r--4
r-x5读+执行(4+1)
rw-6读+写(4+2)
rwx7全部权限(4+2+1)

3.1.1 数字模式的组合规则

每位数字由 读(4)+ 写(2)+ 执行(1) 相加得出。例如:

  • 755 表示 用户可读写执行,组和其他用户可读执行
  • 644 表示 用户可读写,组和其他用户只读

3.1.2 实际应用案例

  1. 设置脚本执行权限

    # 赋予用户执行权限,组和其他用户只读  
    chmod 755 my_script.sh  
    
  2. 配置 Web 服务器目录权限

    # 目录需可读且可进入,文件需可读  
    chmod -R 755 /var/www/html  
    

3.3 注意事项

  • 递归操作需谨慎:使用 -R 参数时,会修改目录内所有子项权限,可能导致安全风险。
  • 避免过度权限:如 777(所有用户可读写执行)会暴露系统漏洞。

四、进阶技巧与常见问题

4.1 权限修改未生效的原因

  • SELinux/AppArmor 策略限制:某些系统安全模块可能覆盖文件权限。

    # 检查 SELinux 上下文  
    ls -Z /path/to/file  
    # 临时禁用 SELinux(需谨慎)  
    setenforce 0  
    
  • 文件系统挂载限制:如 noexec 挂载选项会阻止执行权限生效。

    # 检查挂载选项  
    mount | grep /mnt  
    

4.2 快速恢复默认权限

若误操作导致权限混乱,可参考以下方法:

  1. 通过备份文件恢复

    chmod --reference=backup_file.txt target_file.txt  
    
  2. 重置目录权限为 755

    find /path/to/dir -type d -exec chmod 755 {} \;  
    find /path/to/dir -type f -exec chmod 644 {} \;  
    

五、实际案例演练

案例 1:设置可执行脚本

目标:让 script.sh 对所有用户可执行,但仅所有者可修改。

chmod u+x script.sh      # 添加执行权限  
chmod o-w script.sh      # 移除其他用户的写权限  

案例 2:部署 Web 应用目录

需求:Web 服务器需读取目录内容,但禁止用户删除文件。

mkdir /var/www/app  
chmod 755 /var/www/app  
chmod +t /var/www/app  

结论

linux chmod 是 Linux 权限管理的核心工具,其符号模式与数字模式分别适用于不同场景。掌握权限模型的逻辑、特殊权限的设置方法,以及常见问题的排查技巧,能够显著提升开发者对系统的掌控能力。无论是脚本开发、服务部署,还是安全配置,合理使用 chmod 都能避免潜在风险,保障系统高效运行。建议读者通过实际操作加深理解,并结合项目需求灵活运用权限策略。


通过本文的系统性讲解,希望读者能建立起对 linux chmod 的完整认知框架,并在后续工作中逐步深化实践。

最新发布