Skip to main content
CheckTown
开发工具

chmod 计算器:用实例讲解 Unix 文件权限

发布于 阅读约 6 分钟
本文目录

什么是 chmod?

chmod(change mode,更改模式)是一个用于设置文件和目录权限的 Unix 与 Linux 命令。Unix 系统上的每个文件都有三类权限对象:属主(创建文件的用户)、属组(同一用户组中的用户)和其他(所有其他人)。每一类都可以独立获得读取、写入和执行权限。

理解 chmod 对于系统管理、Web 服务器配置和安全的文件管理至关重要。权限设置不当是 Linux 服务器上最常见的安全漏洞和应用程序错误根源之一。

chmod 权限的工作原理

权限可以用两种表示法来表达:数字(八进制)和符号。数字表示法使用三位数字(例如 755),其中每一位分别代表属主、属组和其他人的权限。

  • 读取(r = 4)——查看文件内容或列出目录条目
  • 写入(w = 2)——修改文件内容,或在目录中添加/删除文件
  • 执行(x = 1)——将文件作为程序运行,或使用 cd 进入目录

每一位数字都是其各项权限之和:7 = 读取 + 写入 + 执行(4+2+1),6 = 读取 + 写入(4+2),5 = 读取 + 执行(4+1),4 = 仅读取。符号表示法使用字母:u(用户/属主)、g(属组)、o(其他人),并配合 +/- 来添加或移除权限(例如 chmod u+x file)。

免费试用 —— 无需注册

计算 chmod 权限 →

常用权限值

以下是最常用的 chmod 权限值及其典型应用场景。

  • 755(rwxr-xr-x)——可执行文件和目录的标准权限;属主拥有完全访问权,其他所有人可读取和执行
  • 644(rw-r--r--)——普通文件的标准权限;属主可读写,其他所有人只能读取
  • 700(rwx------)——私有目录或脚本;只有属主拥有任何访问权
  • 600(rw-------)——私有文件,如 SSH 密钥或含密钥的配置文件;只有属主可读写
  • 777(rwxrwxrwx)——所有人拥有完全访问权;几乎从不合适,在生产系统上是一大安全隐患

安全影响

最小权限原则直接适用于文件权限:只授予文件或目录正常运行所需的最低权限。全局可写文件(其他人权限位以 7 或 6 结尾)是常见的攻击途径,因为系统上的任何用户都能修改它们。

特殊权限位又增添了一层控制:SUID(设置用户 ID)让程序以文件属主身份运行,SGID(设置组 ID)让程序以文件属组身份运行,而目录上的粘滞位则可防止用户删除并非自己所有的文件。可执行文件上配置错误的 SUID 位可能导致提权漏洞。

技巧与最佳实践

遵循以下准则,在你的系统上维持安全且正常的文件权限。

  • 目录需要执行权限——没有它,用户就无法 cd 进入目录或访问其中的文件,即便文件本身可读也不行
  • 谨慎使用递归 chmod——对目录执行 chmod -R 755 会把所有文件都设为可执行,这很少是正确的做法;应使用 find 配合 -type f 和 -type d,分别设置文件和目录
  • 设置 umask 默认值——umask 命令控制新建文件的默认权限;umask 为 022 时,会将文件创建为 644、目录创建为 755,适用于大多数服务器环境

常见问题

755 和 777 有什么区别?

使用 755 时,属主拥有完全控制权(读、写、执行),而属组和其他人只能读取和执行。使用 777 时,所有人都拥有完全控制权,包括修改或删除文件的能力。使用 777 几乎从来都无必要,并会带来重大安全隐患——这意味着系统上的任何用户都能改动你的文件。

为什么目录需要执行权限?

目录上的执行位控制着能否遍历该目录。没有执行权限,用户就无法 cd 进入目录、完整列出其内容,或访问其中的任何文件——即便这些文件本身拥有读取权限也不行。这正是目录通常为 755 而文件为 644 的原因。

新建文件的默认权限是什么?

默认权限取决于 umask 设置。在常见的 umask 022 下,新文件的权限为 644(rw-r--r--),新目录的权限为 755(rwxr-xr-x)。umask 会从系统最大值(文件为 666、目录为 777)中减去相应权限。

相关工具