正在加载,请稍候…

Linux 文件权限详解:chmod 计算器与参考指南

掌握 Unix 和 Linux 文件权限,学习 rwx 表示法、八进制数值、特殊权限位(setuid、setgid、粘滞位),并使用我们的 chmod 计算器。

Linux 文件权限详解:chmod 计算器与参考指南

什么是 Unix 文件权限?

Unix 文件权限控制谁可以读取、写入和执行文件及目录。它们是 Unix 和 Linux 安全的基础,决定了哪些用户和组可以访问每个文件。

每个文件和目录都有三组权限,对应三类用户:所有者(用户)、组和其他人(其他人)。

Linux 文件权限详解:chmod 计算器与参考指南 插图

权限位

每个类别有三个权限位:

符号 对文件的意义 对目录的意义
r 4 读取文件内容 列出目录内容
w 2 修改文件 在目录中创建/删除文件
x 1 作为程序执行 进入目录(cd)
- 0 权限拒绝 权限拒绝

读取权限字符串

ls -l 命令以 10 个字符的字符串显示权限:

-rwxr-xr--  owner group  filename
│└──┴──┴──
│  │  │  └── 其他人:r--,只读(4)
│  │  └───── 组:r-x,读取+执行(5)
│  └──────── 所有者:rwx,完全访问(7)
└─────────── 文件类型:-(文件)、d(目录)、l(符号链接)

八进制表示法

权限通常用八进制(基数为 8)数字表示,每个数字代表一个类别(所有者、组、其他人):

权限  二进制  八进制
---   000     0
--x   001     1
-w-   010     2
-wx   011     3
r--   100     4
r-x   101     5
rw-   110     6
rwx   111     7

因此 chmod 755 表示:

7 = rwx(所有者:完全访问)
5 = r-x(组:读取和执行)
5 = r-x(其他人:读取和执行)

Linux 文件权限详解:chmod 计算器与参考指南 插图

常见权限模式

八进制 符号 用途
400 r-------- 只读,仅所有者(私钥文件)
600 rw------- 读写,仅所有者(SSH 私钥、.env 文件)
644 rw-r--r-- Web 文件(服务器可读,所有者可写)
664 rw-rw-r-- 团队共享文件
700 rwx------ 私有可执行文件或目录
755 rwxr-xr-x 标准可执行文件和公共目录
775 rwxrwxr-x 共享目录(组可写)
777 rwxrwxrwx 任何人可做任何事(生产环境避免)

chmod 命令

# 使用八进制表示法设置权限
chmod 755 script.sh
chmod 644 index.html
chmod 600 ~/.ssh/id_rsa

# 使用符号表示法设置权限
chmod u+x script.sh       # 为所有者添加执行权限
chmod g-w shared.txt      # 移除组的写入权限
chmod o=r public.txt      # 将其他人设置为只读
chmod a+r document.pdf    # 为所有人添加读取权限(a = all = ugo)

# 递归(应用于目录及其所有内容)
chmod -R 755 /var/www/html

特殊权限位

除了标准的 rwx 位,Unix 还有三个特殊权限位:

Linux 文件权限详解:chmod 计算器与参考指南 插图

Setuid(所有者执行位上的 s,八进制 4000)

可执行文件以所有者的权限运行,而非调用者的权限:

chmod 4755 /usr/bin/sudo
-rwsr-xr-x  (所有者执行位上的 s)

Setgid(组执行位上的 s,八进制 2000)

对于可执行文件:以组的权限运行。 对于目录:新文件继承目录的组:

chmod 2775 /shared/project
drwxrwsr-x

粘滞位(其他人执行位上的 t,八进制 1000)

对于目录:只有文件所有者可以删除自己的文件:

chmod 1777 /tmp
drwxrwxrwt  (t = 粘滞位)

这就是为什么每个人都可以写入 /tmp,但不能删除彼此的文件。

使用 umask 的默认权限

umask(用户文件创建掩码)决定新文件的默认权限。它从最大权限中减去:

文件默认最大值:       666(rw-rw-rw-)
目录默认最大值:       777(rwxrwxrwx)
典型 umask:           022
文件结果:             644(666 - 022)
目录结果:             755(777 - 022)

-> 试试 chmod 计算器