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)
|+------------ 所有者: 写入
+------------- 所有者: 读取
权限数字: 7542. 理解权限数字(八进制表示法)
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 | --x | Execute only |
2 | -w- | Write only |
3 | -wx | Write + Execute |
4 | r-- | Read only |
5 | r-x | Read + Execute |
6 | rw- | Read + Write |
7 | rwx | Read + Write + Execute |
要计算完整的权限数字,分别计算每个数位。例如,所有者读+写 (4+2=6)、组读取 (4)、其他人无权限 (0) 得到 640。
3. chmod 权限参考表
下面是一个综合参考表,展示最常用的 chmod 权限组合。收藏此 chmod 速查表以便在配置服务器、Docker 容器或 CI/CD 流水线时快速查阅。
| 八进制 | 符号 | 含义 | 典型用途 |
|---|---|---|---|
777 | rwxrwxrwx | 所有人完全访问 | 仅临时调试;生产环境绝不使用 |
755 | rwxr-xr-x | 所有者完全;组/其他人读+执行 | 目录、可执行脚本、Web 服务器文档根 |
750 | rwxr-x--- | 所有者完全;组读+执行;其他人无 | 共享项目目录、组内可执行文件 |
700 | rwx------ | 仅所有者完全访问 | ~/.ssh 目录、私有脚本 |
666 | rw-rw-rw- | 所有人读+写;无执行 | 很少使用;临时共享文件 |
644 | rw-r--r-- | 所有者读+写;组/其他人读 | HTML、CSS、PHP 文件、配置文件、普通文档 |
640 | rw-r----- | 所有者读+写;组读;其他人无 | 日志文件、与组共享的敏感配置 |
600 | rw------- | 仅所有者读+写 | SSH 私钥、.env 文件、数据库凭据 |
400 | r-------- | 仅所有者只读 | SSL 证书、只读机密文件 |
775 | rwxrwxr-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 计算器生成你需要的精确命令:
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.shSSH 密钥和配置
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/uploads6. 特殊权限:setuid、setgid、Sticky Bit
除了标准的九个权限位外,Linux 还支持三个特殊权限位来修改执行行为。它们表示为第四个(前导)八进制数字,并在 ls -l 输出中显示为特殊字符。
设置在可执行文件上时,进程以文件所有者的权限而非执行者的权限运行。经典示例是 /usr/bin/passwd,它需要 root 权限来修改 /etc/shadow,但必须允许任何用户运行。在 ls -l 输出中,SUID 在所有者执行位显示为 s(-rwsr-xr-x)。如果执行位未设置,则显示为大写 S。
在可执行文件上,SGID 使进程以文件的组权限运行。在目录上更有用:新创建的文件自动继承目录的组而非创建者的主组。这对于所有文件必须属于同一组的共享团队目录至关重要。
设置在目录上时,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 dirs7. 文件权限最佳实践
文件权限是关键的防御层。遵循这些最佳实践将帮助你避免安全事件和部署问题。
遵循最小权限原则。仅授予所需的最少权限。从限制性开始(如 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 →