chmod 计算器,免费
Linux/Unix 文件权限的交互式计算器。
chmod 000 filename
常用权限
使用方法
- 勾选复选框来为所有者、用户组和其他人设置读、写、执行权限。
- 或直接输入 3 位数字值(例如 755)。
- 符号表示法和
chmod命令会实时更新。 - 点击复制命令以复制完整的 chmod 命令。
权限参考
| 数字 | 权限 | 符号 |
|---|---|---|
| 0 | 无权限 | --- |
| 1 | 仅执行 | --x |
| 2 | 仅写入 | -w- |
| 3 | 写入 + 执行 | -wx |
| 4 | 仅读取 | r-- |
| 5 | 读取 + 执行 | r-x |
| 6 | 读取 + 写入 | rw- |
| 7 | 读取 + 写入 + 执行 | rwx |
常见问题
chmod 755 是什么意思?
755 表示所有者可以读、写、执行(7),而用户组和其他人可以读和执行但不能写(5)。这是目录和脚本最常用的权限。
644 和 755 有什么区别?
644(rw-r--r--)允许所有者读写,其他所有人仅读 · 是文件的典型权限。755(rwxr-xr-x)多了执行权限 · 是目录和脚本的典型权限。
这也适用于目录吗?
适用。数字权限的工作方式相同。对于目录,「执行」表示可以进入该目录并访问其内容。
Unix九位权限模型
Unix类系统的每个文件和目录都带有一个「模式」,一个记录了「谁能做什么」的小整数。该模型自第六版Unix(1975年5月)起基本保持不变,最早的chmod手册条目出现在第一版Unix(1971年11月)中。它将九个权限位编码为三组读/写/执行三元组,分别对应文件的所有者、所属组和其他所有人:
Owner Group Others
r w x r w x r w x
4 2 1 4 2 1 4 2 1
三位二进制数恰好对应一个八进制数字,因为三位可以编码2³ = 8个不同值(0-7)。权重4、2、1分别对应2²、2¹、2⁰。读(4)+写(2)+执行(1)的任意组合均可不冲突地产生每类8个可能的数字,这就是完整的八进制到符号的映射关系。因此,chmod 755的含义是:所有者具有rwx(4+2+1=7)权限,所属组具有r-x(4+1=5)权限,其他人也具有r-x权限。
在ls -l输出中看到的10字符字符串是相同数据加上最前面表示文件类型的一列:普通文件为-,目录为d,符号链接为l,字符设备为c,块设备为b,命名管道为p,套接字为s。其余九个字符是权限三元组。
符号表示法:chmod u+x file
八进制模式一次性覆写全部九个位。符号模式是非破坏性的,只翻转您指定的位。语法为who+op+perm:
- who:
u为用户/所有者,g为所属组,o为其他用户,a为所有人(= ugo)。 - op:
+添加权限,-移除权限,=精确设置权限(并清除其余权限)。 - perm:
r、w、x,以及特殊字母X(仅在目标是目录或至少对某个类别已可执行时才添加执行权限)、s(setuid/setgid)、t(粘滞位/限制删除)。也可以从另一个类别复制权限,用u、g、o,例如g=u将组权限设置为与所有者相同。
常用示例:
chmod u+x script.sh:仅为所有者添加执行权限。chmod g-w shared.log:移除所属组的写权限。chmod a=rw note.txt:将所有人设置为读/写权限,清除所有人的执行权限。chmod o= secret.key:清除「其他用户」的所有权限位。chmod -R u+rwX,go+rX /var/www:递归授予所有者完全访问权限,其他人只读;大写X仅对目录或某个类别已有执行权限的文件添加执行位,避免意外使每个文本文件都变为可执行文件。
数字模式是明确且幂等的(chmod 755始终代表相同的九个位)。符号模式是精准的(chmod g+w仅翻转一个位)。生产脚本倾向于使用数字模式以便在审计日志中清晰可读;在命令行操作的运维人员则倾向于使用符号模式进行增量调整。
常见模式及其用途
| 模式 | 符号表示 | 典型用途 |
|---|---|---|
| 755 | rwxr-xr-x | 公开可执行文件和标准目录,/usr/bin/*,Web文档根目录,Git工作树 |
| 644 | rw-r--r-- | 标准普通文件、配置文件、源代码、文档 |
| 700 | rwx------ | 私有目录,~/.ssh,不应被他人查看的个人文档 |
| 600 | rw------- | 私有文件,~/.ssh/id_rsa,~/.gnupg/*,密码文件 |
| 444 | r--r--r-- | 所有人只读,固定参考数据,Cargo注册表索引 |
| 750 | rwxr-x--- | 所有者完全权限,所属组读取/遍历,其他人无权限,组共享服务目录 |
| 777 | rwxrwxrwx | 几乎总是错误的。见下文。 |
为什么chmod 777几乎总是错误的
将文件设为777会使其对所有人可读、可写、可执行。机器上的任何用户(包括无特权服务账户和任何被入侵的进程)都能读取文件内容、修改文件并执行它。教程中「试试chmod 777,直到能用为止」的建议是一种安全反模式,已导致无数真实安全事故:被篡改的世界可写配置文件、成为篡改向量的世界可写Web目录、允许伪造日志的世界可写日志文件、允许任意代码执行的世界可执行目录。
如果权限错误阻碍了您,正确的解决方法几乎总是使用chown更改文件的所有者,或使用chgrp更改其所属组,从而让需要访问权限的用户实际拥有或共同拥有该文件,而不是为所有人移除访问控制。
特殊位:setuid、setgid、粘滞位
在模式前面添加第四个八进制数字可解锁三个特殊位,均为早期Unix设计的遗留物:
- 4xxx,setuid(设置用户ID)。在可执行文件上设置时,程序以文件所有者的权限运行,而非调用者的权限。经典示例是
passwd:所有用户都可以运行它,但正因为它是setuid-root,才能写入/etc/shadow。setuid是重要的安全攻击面,现代Linux日益以文件能力(通过setcap授予更细粒度的权限位)取代它,许多发行版也在逐步移除setuid位。 - 2xxx,setgid(设置组ID)。在可执行文件上,以文件的组权限运行;在目录上,内部创建的文件继承目录的组而非创建者的主组,适用于共享项目目录。
- 1xxx,粘滞位。在目录上,无论目录本身的写权限如何,只有文件所有者(或root)才能删除或重命名其中的文件。典型用途是
/tmp:对所有用户可写,但粘滞位防止用户删除彼此的文件。
当这些位被设置时,ls -l输出会将执行字符替换为s、S、t或T(大写字母表示该位已设置但底层执行位未设置)。
umask:chmod的逆操作
chmod设置现有文件的权限。umask通过充当减法掩码来决定新建文件的默认权限。计算方式:新建普通文件的基础值为666(rw-rw-rw-),新建目录为777,再减去umask中设置的位。常见值:
- umask 022(大多数Linux发行版的默认值),去除组和其他用户的写权限。新建文件权限为644,新建目录为755。
- umask 002(部分共享开发环境的默认值),仅去除其他用户的写权限。新建文件权限为664,目录为775。适用于开发团队希望互相读写文件的场景。
- umask 077(常见于私有服务器和注重安全的配置),去除组和其他用户的所有权限。新建文件权限为600,目录为700。
不带参数输入umask可显示当前值。在Shell初始化文件(~/.bashrc、~/.zshrc)或/etc/login.defs中设置,可应用于整个会话。
文件与目录:x的不同含义
相同的r/w/x位在目录上的含义与在文件上有微妙的区别:
- 目录的读权限:列出其内容。没有读权限,若有执行权限仍可访问目录内的已知文件名,但
ls不可用。 - 目录的写权限:在其中创建、删除或重命名条目。注意:这与文件自身的写权限无关。目录写权限加上粘滞位(1xxx)是实现受控多用户共享目录(如
/tmp)的关键。 - 目录的执行权限:遍历目录(
cd进入,访问其中的命名条目)。没有执行权限的目录实际上是死路。许多微妙的「权限被拒绝」问题正源于此:您对某个深层目录有读权限,但对其某个父目录没有执行权限,因此无法到达它。
递归chmod与find模式
chmod -R 755 /var/www对目录树中的每个文件和目录应用相同的模式,这几乎总是错误的,因为文件和目录需要不同的模式(如文件用644,目录用755)。正确的惯用写法是使用find:
find /var/www -type f -exec chmod 644 {} +
find /var/www -type d -exec chmod 755 {} +
或者,等价地,使用GNU chmod的大写X:chmod -R u=rwX,go=rX /var/www仅对目录以及已在某个类别有执行权限的文件添加执行位,这正是通常想要的结果。
符号链接、ACL及Linux如何扩展权限模型
两点值得了解的细化:
- 符号链接有自己的模式(始终为777),但会被忽略。
chmod默认跟踪链接并修改目标。在BSD上使用chmod -h,在GNU上使用chmod --no-dereference可对链接本身进行操作,但很少有理由这样做。 - POSIX ACL(
setfacl、getfacl)在基本模型上增加了按用户和按组的条目。文件可以在不改动标准模式位的情况下向特定用户授予写权限。带有ACL的文件,ls -l显示时会在末尾加上+。macOS、大多数Linux文件系统和BSD都支持ACL;它们是可选的,许多系统管理员倾向于坚持使用更简单的经典模式。 - Windows NTFS ACL更为丰富,具有按用户/按组的条目,支持明确的允许/拒绝位和可继承的继承关系。
chmod模型无法直接对应。Cygwin和WSL在NTFS上对其进行了不完整的模拟。
更多问题
为什么我的SSH密钥被拒绝,提示「权限过于开放」?
因为OpenSSH客户端拒绝使用组或其他用户可读的私钥,其逻辑是任何他人可读的东西都不应作为凭据。解决方法是chmod 600 ~/.ssh/id_rsa(以及对目录本身执行chmod 700 ~/.ssh)。~/.gnupg/和大多数其他凭据存储适用相同的逻辑。
chmod和chown有什么区别?
chmod更改模式位,即所有者/组/其他用户可以做什么。chown更改所有者是谁。通常两者都需要:文件「错误用户无法读取」通常不需要开放权限,而是需要将文件的所有者更改为需要访问权限的用户。请先尝试chown myuser:mygroup file。
日志文件应该使用666权限吗?
几乎不应该。世界可写的日志文件允许任何进程(包括以低权限用户运行的被入侵服务)伪造日志条目或清空日志。标准做法是使日志目录对特定日志组(Debian上为adm,BSD上为wheel等)可写,并将相关服务加入该组;或使用logrotate加上日志守护进程(rsyslog、systemd-journald)来处理文件所有权。
本计算器是否考虑了特殊位?
不考虑,它只涵盖基础九位权限位(标准3位模式)。对于setuid(4xxx)、setgid(2xxx)或粘滞位(1xxx),需要手动在前面添加前导数字。绝大多数日常chmod操作使用3位模式,从不涉及特殊位。
有任何内容会被发送至服务器吗?
不会。切换↔八进制↔符号的转换是纯算术运算,在您的浏览器中计算。本页面加载完成后可离线使用。