DevToolBox免费
博客

Linux 文件权限完全指南:chmod 计算器与权限速查表

12 分钟阅读作者 DevToolBox

Linux 文件权限是系统安全的基石。Unix 系统上的每个文件和目录都带有元数据,决定谁可以读取、写入或执行它。无论你是部署 Web 应用、加固服务器还是排查部署脚本问题,理解 chmod 命令文件权限数字都是必不可少的。本综合 chmod 计算器指南将带你从基本权限概念到特殊位全面掌握,并提供可收藏的完整 chmod 速查表

试用我们的交互式 chmod 计算器,即时可视化权限设置。

Chmod Calculator →

1. 什么是 Linux 文件权限?

Linux 中的每个文件和目录都有三类可以与之交互的用户。所有者(也称"用户")通常是创建文件的人。是一组共享访问权限的用户。其他人(有时称为"世界")指系统上的所有其他人。当你运行 ls -l 时,第一列会显示每个条目的权限字符串。

每个用户类别可以被授予三种访问类型。读取 (r) 允许查看文件内容或列出目录。写入 (w) 允许修改文件或在目录中创建和删除条目。执行 (x) 允许将文件作为程序运行或使用 cd 进入目录。这九个权限位(三个类别乘以三种类型)构成了 Unix 权限模型的基础。

以下是典型的 <code>ls -l</code> 输出以及如何解读权限字符串:

-rwxr-xr--  1 alice  developers  4096 Feb 20 deploy.sh
 |||  |||  |||
 |||  |||  ||+-- 其他人: r-- (只读 = 4)
 |||  |||  +--- 其他人: 无写入
 |||  ||+------ 组: r-x (读取 + 执行 = 5)
 |||  +-------- 组: 无写入
 ||+----------- 所有者: rwx (读取 + 写入 + 执行 = 7)
 |+------------ 所有者: 写入
 +------------- 所有者: 读取

 权限数字: 754

2. 理解权限数字(八进制表示法)

Linux 将每组权限表示为 0 到 7 的单个八进制数字。数字由授予的权限值相加计算:读取 = 4写入 = 2执行 = 1。某类别无权限时值为 0。像 755 这样的三位数编码了所有三个类别:所有者 (7 = rwx)、组 (5 = r-x)、其他人 (5 = r-x)。

以下是八进制值的 <strong>chmod 速查表</strong>,涵盖每种可能的单位组合。记住这八个值,你就能即时解码任何 <strong>linux 文件权限</strong>数字:

八进制符号含义
0---No permission
1--xExecute only
2-w-Write only
3-wxWrite + Execute
4r--Read only
5r-xRead + Execute
6rw-Read + Write
7rwxRead + Write + Execute

要计算完整的权限数字,分别计算每个数位。例如,所有者读+写 (4+2=6)、组读取 (4)、其他人无权限 (0) 得到 640

3. chmod 权限参考表

下面是一个综合参考表,展示最常用的 chmod 权限组合。收藏此 chmod 速查表以便在配置服务器、Docker 容器或 CI/CD 流水线时快速查阅。

八进制符号含义典型用途
777rwxrwxrwx所有人完全访问仅临时调试;生产环境绝不使用
755rwxr-xr-x所有者完全;组/其他人读+执行目录、可执行脚本、Web 服务器文档根
750rwxr-x---所有者完全;组读+执行;其他人无共享项目目录、组内可执行文件
700rwx------仅所有者完全访问~/.ssh 目录、私有脚本
666rw-rw-rw-所有人读+写;无执行很少使用;临时共享文件
644rw-r--r--所有者读+写;组/其他人读HTML、CSS、PHP 文件、配置文件、普通文档
640rw-r-----所有者读+写;组读;其他人无日志文件、与组共享的敏感配置
600rw-------仅所有者读+写SSH 私钥、.env 文件、数据库凭据
400r--------仅所有者只读SSL 证书、只读机密文件
775rwxrwxr-x所有者完全;组完全;其他人读+执行共享上传目录、团队项目文件夹

4. 如何使用 chmod 命令

chmod 命令用于更改文件和目录权限。它支持两种语法模式:数字(八进制)模式一次设置所有九个权限位,而符号模式可以在不影响其他权限的情况下添加或删除特定权限。两种模式都是开发者日常工作的必备技能。

数字模式

数字模式中,你提供一个三位(或四位用于特殊权限)八进制数字:

chmod 755 script.sh          # rwxr-xr-x
chmod 644 config.json        # rw-r--r--
chmod 600 id_rsa             # rw-------
chmod 400 cert.pem           # r--------
chmod -R 755 /var/www/html   # Recursive on directory

符号模式

符号模式使用字母指定谁、什么操作和哪些权限。语法为 chmod [ugoa][+-=][rwxXst]

  • 谁: u (用户/所有者)、g (组)、o (其他人)、a (所有)
  • 操作符: + (添加权限)、- (移除权限)、= (精确设置)
  • 权限: r (读取)、w (写入)、x (执行)、X (仅当目录或已可执行时执行)
chmod u+x script.sh          # Add execute for owner
chmod g-w file.txt           # Remove write from group
chmod o+r document.pdf       # Add read for others
chmod a+x run.sh             # Add execute for all
chmod u=rwx,go=rx dir/       # Owner=rwx, group+others=rx (755)
chmod go-rwx secret.key      # Remove all from group+others

递归 chmod

使用 chmod -R 递归更改权限。常见模式是使用 find 对目录和文件分别设置:

# Set directories to 755 and files to 644 (web server standard)
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;

# Make all .sh files executable
find /opt/scripts -name "*.sh" -exec chmod 755 {} \;

使用我们的 chmod 计算器生成你需要的精确命令:

Chmod Calculator →

5. 开发者常用 chmod 模式

不同类型的文件需要特定的权限设置。设置错误是部署失败、SSH 错误和安全漏洞最常见的原因之一。以下是每个开发者都应了解的权威 chmod 模式参考。

Web 服务器文件

对于 Apache 和 Nginx Web 服务器,标准约定是文件 644目录 755。这允许 Web 服务器进程读取文件和遍历目录,同时防止未授权修改:

# Web server document root
chmod 755 /var/www/html
chmod 644 /var/www/html/index.html
chmod 644 /var/www/html/style.css
chmod 644 /var/www/html/.htaccess

# PHP / application files
chmod 644 /var/www/html/app/*.php
chmod 755 /var/www/html/app/storage

脚本和可执行文件

任何你想直接运行的文件(shell 脚本、Python 脚本、编译后的二进制文件)都需要执行位。共享脚本使用 755,私有脚本使用 700

# Shared executable scripts
chmod 755 deploy.sh
chmod 755 /usr/local/bin/my-tool

# Private scripts (owner only)
chmod 700 backup-db.sh
chmod 700 cleanup.sh

SSH 密钥和配置

SSH 对权限非常严格。如果你的密钥文件权限过于宽松,SSH 会拒绝使用它并报错 "Permissions are too open"。以下是必需的设置:

chmod 700 ~/.ssh                 # SSH directory
chmod 600 ~/.ssh/id_rsa          # Private key
chmod 600 ~/.ssh/id_ed25519      # Private key (Ed25519)
chmod 644 ~/.ssh/id_rsa.pub      # Public key
chmod 600 ~/.ssh/authorized_keys # Authorized keys
chmod 600 ~/.ssh/config          # SSH config file

环境和机密文件

包含 API 密钥、数据库凭据和其他机密的文件必须锁定为仅所有者访问:

chmod 600 .env                   # Environment variables
chmod 600 .env.production        # Production secrets
chmod 600 database.yml           # Database credentials
chmod 600 credentials.json       # API credentials
chmod 400 ssl-cert.pem           # SSL certificate (read-only)

上传目录

Web 应用写入上传文件的目录需要组写入权限,以便 Web 服务器进程可以创建文件:

chmod 775 /var/www/html/uploads
chmod 775 /var/www/html/tmp
chmod 775 /var/www/html/cache

# Ensure web server group owns the directory
# chown www-data:www-data /var/www/html/uploads

6. 特殊权限:setuid、setgid、Sticky Bit

除了标准的九个权限位外,Linux 还支持三个特殊权限位来修改执行行为。它们表示为第四个(前导)八进制数字,并在 ls -l 输出中显示为特殊字符。

setuid (SUID) -- 4000

设置在可执行文件上时,进程以文件所有者的权限而非执行者的权限运行。经典示例是 /usr/bin/passwd,它需要 root 权限来修改 /etc/shadow,但必须允许任何用户运行。在 ls -l 输出中,SUID 在所有者执行位显示为 s-rwsr-xr-x)。如果执行位未设置,则显示为大写 S

setgid (SGID) -- 2000

在可执行文件上,SGID 使进程以文件的权限运行。在目录上更有用:新创建的文件自动继承目录的组而非创建者的主组。这对于所有文件必须属于同一组的共享团队目录至关重要。

Sticky Bit -- 1000

设置在目录上时,sticky bit 确保只有文件所有者目录所有者root 才能删除或重命名其中的文件,即使其他用户有写入权限。典型示例是 /tmp(权限 1777),所有用户都可以创建文件但不能删除其他人的文件。

设置特殊权限:

# SUID: run as file owner
chmod 4755 /usr/bin/passwd
chmod u+s /usr/bin/my-tool

# SGID: inherit group on directory
chmod 2755 /shared/project
chmod g+s /shared/project

# Sticky Bit: prevent deletion by others
chmod 1777 /tmp
chmod +t /shared/uploads

# Combine: SGID + standard permissions
chmod 2775 /team/shared-dir

# Find files with special permissions
find / -perm -4000 -type f 2>/dev/null  # Find SUID files
find / -perm -2000 -type f 2>/dev/null  # Find SGID files
find / -perm -1000 -type d 2>/dev/null  # Find sticky dirs

7. 文件权限最佳实践

文件权限是关键的防御层。遵循这些最佳实践将帮助你避免安全事件和部署问题。

遵循最小权限原则。仅授予所需的最少权限。从限制性开始(如 600),仅在需要时放宽。

生产环境中绝不使用 chmod 777。它意味着系统上的所有用户都可以读取、修改和执行文件。如果你的应用需要 777 才能工作,说明部署架构存在缺陷。

定期审计权限。使用 find / -perm -777 -type f 查找权限过于宽松的文件。将此纳入安全审查流程。

使用组代替世界可读权限。如果多个用户需要访问,创建共享组并设置组权限,而非向"其他人"开放文件。

谨慎使用递归 chmod。在错误的目录上运行 chmod -R 755 / 可能破坏系统。始终仔细检查路径并使用 find 定位特定文件类型。

记录权限要求。在部署脚本、Dockerfile 和 README 文件中包含 chmod 命令,确保始终应用正确的权限。

使用 umask 设置安全默认值。在 shell 配置中设置 umask 027,新文件默认以 640(文件)和 750(目录)创建。

要快速直观地确定正确的权限,请使用下方链接的 chmod 计算器工具。它让你切换复选框并实时查看八进制数字、符号表示和 ls -l 输出。

8. 常见问题

chmod 755 是什么意思?

chmod 755 设置文件权限,使所有者拥有完全访问权限(读+写+执行 = 7),而组和其他人仅有读取和执行权限(4+1 = 5)。符号表示为 rwxr-xr-x。它是可执行脚本、目录和 Web 服务器文档根的标准权限。

chmod 755 和 644 有什么区别?

chmod 755 (rwxr-xr-x) 向所有三个用户类别授予执行权限,适用于目录和可执行脚本。chmod 644 (rw-r--r--) 移除所有执行权限且仅向所有者授予写入权限,是 HTML、CSS、配置文件和文档等普通文件的标准。需要运行或遍历的使用 755,只需读取的使用 644。

如何在 Linux 中检查文件权限?

在终端运行 ls -la 命令查看详细文件信息,包括权限。第一列显示权限字符串(如 -rwxr-xr-x)。你也可以使用 stat 命令获取更详细的视图:stat filename 会同时显示八进制和符号表示的权限,以及所有者和组信息。

最安全的文件权限是什么?

最安全的标准权限是 000(除 root 外任何人都无法访问),但实际上 400(仅所有者只读)或 600(仅所有者读+写)是最实用的限制性权限。SSH 私钥使用 600,SSL 证书使用 400。最小权限原则要求始终从最严格的权限开始,仅在需要时添加访问权限。

可以在 Mac 上使用 chmod 吗?

可以。macOS 基于 BSD Unix,完全支持与 Linux 相同语法的 chmod 命令。你可以使用数字模式 (chmod 755 file) 和符号模式 (chmod u+x file)。权限工作方式与 Linux 完全相同。macOS 还通过 chmod +a 和 chmod -a 语法支持 ACL(访问控制列表)以实现更细粒度的访问控制。

使用我们的免费在线 chmod 计算器计算精确权限值。

Chmod Calculator →
还可以查看我们的 htaccess 生成器来配置 Apache 服务器。需要强密码?试试我们的密码生成器。
𝕏 Twitterin LinkedIn
这篇文章有帮助吗?

保持更新

获取每周开发技巧和新工具通知。

无垃圾邮件,随时退订。

试试这些相关工具

🔐Chmod Calculator.ht.htaccess Generator🔑Password Generator

相关文章

Linux 文件权限详解:chmod 777、755、644 的含义

理解 Linux 文件权限、chmod 命令和八进制表示法。通过实例学习 chmod 777、755、644 的含义。

Linux chmod、chown 和 chgrp:文件权限指南

Linux 文件权限完全指南:chmod 数字和符号模式、chown、chgrp、特殊权限(setuid、setgid、sticky bit)和 ACL。

SSH Keygen:Ed25519 vs RSA 完全指南

学习使用 ssh-keygen 生成 SSH 密钥。比较 Ed25519 和 RSA,了解密钥大小和 SSH 密钥管理最佳实践。