Linux 是一个多用户(Multi-user)、多任务(Multi-task)操作系统。为了保证不同用户之间的数据安全,Linux 提供了一套完善的权限管理机制。
Linux 权限系统主要由以下几部分组成:
-
用户(User)
-
用户组(Group)
-
文件权限(rwx)
-
特殊权限(SUID、SGID、Sticky)
-
ACL(扩展权限)
本文重点介绍 Linux 最基础也是最重要的 用户与 rwx 权限模型。
一、Linux 用户体系
Linux 中,一切操作都是以用户身份进行的。
例如:
用户登录
│
▼
Shell(Bash)
│
▼
所有程序都以当前用户身份运行
查看当前用户:
whoami
例如:
root
查看当前 UID:
id
例如:
uid=1000(alice)
gid=1000(alice)
groups=1000(alice),27(sudo),100(users)
二、Linux 用户分类
Linux 用户主要分三类:
1、超级用户(Root)
root 是 Linux 中权限最高的用户。
特点:
-
UID = 0
-
可以访问任何文件
-
可以修改系统配置
-
可以管理所有用户
-
基本不受普通权限限制
查看:
id root
输出:
uid=0(root)
gid=0(root)
2、普通用户
例如:
alice
bob
tom
特点:
-
UID ≥ 1000(大多数发行版)
-
只能访问自己有权限访问的资源
例如:
useradd alice
查看:
id alice
uid=1001(alice)
gid=1001(alice)
3、系统用户
很多服务都会创建自己的用户:
mysql
www-data
nginx
postgres
redis
daemon
例如:
cat /etc/passwd
看到:
mysql:x:112:118:MySQL Server:/nonexistent:/bin/false
特点:
-
一般 UID <1000
-
不允许登录
-
用于运行后台服务
三、用户组(Group)
Linux 使用用户组管理权限。
例如:
alice
bob
tom
都属于:
dev
这样:
project/
Group=dev
三个用户都可以访问。
查看当前组:
groups
例如:
alice sudo docker dev
查看某用户:
id alice
uid=1000(alice)
gid=1000(alice)
groups=
1000(alice)
27(sudo)
999(docker)
四、Linux 用户信息文件
/etc/passwd
所有用户信息:
cat /etc/passwd
例如:
alice:x:1000:1000:Alice:/home/alice:/bin/bash
格式:
用户名
密码占位
UID
GID
描述
HOME目录
登录Shell
例如:
alice:x:1000:1000:Alice:/home/alice:/bin/bash
表示:
用户名:alice
UID:1000
GID:1000
HOME:/home/alice
Shell:/bin/bash
/etc/shadow
真正密码:
sudo cat /etc/shadow
例如:
alice:$6$xxxxx...
普通用户不能读取。
/etc/group
组信息:
cat /etc/group
例如:
docker:x:999:alice,bob
表示:
docker组
成员:
alice
bob
五、Linux 文件权限
查看:
ls -l
例如:
-rwxr-x--- 1 root dev 1024 Jun 18 test.sh
分解:
-rwxr-x---
可以分成:
-
rwx
r-x
---
分别表示:
文件类型
Owner
Group
Others
六、文件类型
第一位表示类型:
| 字符 | 类型 |
|---|---|
| - | 普通文件 |
| d | 目录 |
| l | 软链接 |
| c | 字符设备 |
| b | 块设备 |
| p | 管道 |
| s | Socket |
例如:
-rw-r--r--
普通文件。
drwxr-xr-x
目录。
lrwxrwxrwx
软链接。
七、rwx 权限
后九位:
rwxr-x---
分成:
rwx
r-x
---
分别表示:
Owner
Group
Others
每组三位:
r
w
x
r(Read)
读权限。
对于文件:
允许:
cat
less
more
cp
例如:
cat test.txt
没有 r:
Permission denied
目录:
r 表示:
可以查看目录内容。
例如:
ls dir
w(Write)
写权限。
文件:
允许:
修改内容
追加内容
删除内容(受目录权限影响)
例如:
echo hello >> file
目录:
w 表示:
允许:
创建文件
删除文件
重命名
例如:
touch a.txt
rm a.txt
x(Execute)
执行权限。
文件:
./run.sh
必须:
x
否则:
Permission denied
目录:
x 表示:
允许:
进入目录
cd dir
访问目录中的文件
例如:
没有 x:
cd dir
失败。
八、目录权限与文件权限的区别
很多初学者容易混淆目录和文件的 rwx 含义。
| 权限 | 文件 | 目录 |
|---|---|---|
| r | 读取文件内容 | 查看目录列表(ls) |
| w | 修改文件内容 | 创建、删除、重命名目录中的文件 |
| x | 执行文件 | 进入目录、访问目录中的对象 |
例如:
drwx------
表示:
Owner:
可以:
ls
cd
touch
rm
别人:
全部禁止。
九、数字权限(八进制)
1. 基础数字与权限对应表 (0 - 7)
Linux 将基本权限分为三种:读(r) 、写(w) 、执行(x) 。它们分别被赋予固定的权重值:4、2、1 。没有权限则记为 0。
| 数字 | 权限组合 | 字母表示 | 二进制 | 计算方式 | 说明 |
|---|---|---|---|---|---|
| 0 | 无权限 | --- |
000 | 0 | 不能读、不能写、不能执行 |
| 1 | 仅执行 | --x |
001 | 1 | 只能执行(对目录来说代表"进入") |
| 2 | 仅写入 | -w- |
010 | 2 | 只能写入/修改 |
| 3 | 写入 + 执行 | -wx |
011 | 2 + 1 | 可以修改并执行 |
| 4 | 仅读取 | r-- |
100 | 4 | 只能读取/查看 |
| 5 | 读取 + 执行 | r-x |
101 | 4 + 1 | 可以读取并执行 |
| 6 | 读取 + 写入 | rw- |
110 | 4 + 2 | 可以读取和修改(不能执行) |
| 7 | 读 + 写 + 执行 | rwx |
111 | 4 + 2 + 1 | 拥有所有基本权限 |
2. 完整的权限结构(3位数字)
一个完整的 3 位数字权限(如 755),分别代表三类用户的权限:
- 第 1 位数字 :所有者(User/Owner) 的权限
- 第 2 位数字 :所属组(Group) 的权限
- 第 3 位数字 :其他人(Others) 的权限
举例:754
7(rwx):所有者 可读、可写、可执行5(r-x):所属组 可读、可执行4(r--):其他人 仅可读
3. 最常见的权限组合示例
在实际工作中,你经常会遇到以下几种经典的权限组合:
| 数字 | 字母表示 | 常见用途 | 说明 |
|---|---|---|---|
| 644 | rw-r--r-- |
普通文件 | 所有者可读写,其他人只能读。最安全的默认文件权限。 |
| 755 | rwxr-xr-x |
目录 / 脚本 | 所有者全权限,其他人可读和进入/执行。最安全的默认目录权限。 |
| 600 | rw------- |
敏感配置文件 | 仅所有者可读写。常用于 SSH 私钥 (id_rsa)、数据库密码文件等。 |
| 700 | rwx------ |
私人目录 | 仅所有者可读写和进入。常用于用户的家目录。 |
| 777 | rwxrwxrwx |
共享目录 | 所有人可读写执行。极度危险,容易导致安全漏洞,应尽量避免使用。 |
| 711 | rwx--x--x |
Web 用户目录 | 所有者全权限,其他人只能进入(执行)。常用于 Web 服务器的用户主目录。 |
4. 进阶:特殊权限(4位数字)
有时候你会看到 4 位数字的权限(如 4755 或 1777),这里的第 1 位数字 代表特殊权限,后 3 位依然是常规权限。
| 特殊数字 | 权限名称 | 作用说明 | 典型应用场景 |
|---|---|---|---|
| 4 | SUID (Set User ID) | 当普通用户执行该文件时,临时获得文件所有者的权限。 | /usr/bin/passwd (权限为 4755),普通用户需要修改 /etc/shadow 密码文件,通过 SUID 临时获取 root 权限。 |
| 2 | SGID (Set Group ID) | 作用于文件 :执行时临时获得文件所属组的权限。 作用于目录 :在该目录下新建的文件,其所属组自动继承该目录的所属组。 | 团队协作目录,确保大家创建的文件都属于同一个组,方便互相修改。 |
| 1 | Sticky Bit (粘滞位) | 仅作用于目录 :虽然目录权限是 777(大家都能写),但用户只能删除属于自己的文件,不能删除别人的文件。 | /tmp 目录 (权限为 1777),公共临时目录,防止用户互相删除文件。 |
十、chmod 修改权限
数字方式:
chmod 755 file
符号方式:
chmod u+x file
增加:
chmod g+w file
删除:
chmod o-r file
全部:
chmod a+x file
说明:
| 符号 | 含义 |
|---|---|
| u | Owner |
| g | Group |
| o | Others |
| a | All |
十一、chown 修改所有者
修改用户:
chown alice file
修改用户和组:
chown alice:dev file
递归:
chown -R alice:dev project
十二、chgrp 修改所属组
修改组:
chgrp dev file
递归:
chgrp -R dev project
十三、权限判断规则
假设:
-rwxr-----
Owner:
alice
Group:
dev
当前用户:
bob
属于:
dev
Linux 判断顺序:
-
是否为 root(UID=0):是,则通常允许访问(部分能力如不可执行文件执行、只读文件系统等仍受限制)。
-
是否为文件 Owner:是,则使用 Owner 权限位。
-
是否属于文件所属 Group 或任一附加组:是,则使用 Group 权限位。
-
否则使用 Others 权限位。
注意:权限不会叠加。 一旦命中某一类(Owner、Group 或 Others),只检查该类权限。
例如:
Owner:rw-
Group:---
Others:r--
如果用户是文件 Owner,即使 Others 有 r 权限,也不能读取文件,因为 Owner 权限已经命中且没有读权限。
十四、权限检查实例
文件:
-rwxr-x---
Owner:
root
Group:
dev
| 用户 | 所属关系 | 最终权限 |
|---|---|---|
| root | Owner | rwx |
| alice(属于 dev) | Group | r-x |
| bob(不属于 dev) | Others | --- |
十五、常见权限场景
1. Shell 脚本无法执行
Permission denied
原因:
chmod +x script.sh
2. 无法进入目录
cd project
提示:
Permission denied
原因:
目录没有:
x
3. 能看到目录但不能进入
权限:
dr--r--r--
结果:
ls dir
可以(若父目录允许访问)。
cd dir
失败。
4. 能进入目录却不能列出内容
权限:
d--x--x--x
结果:
cd dir
可以。
ls dir
失败。
但如果已知文件名:
cat dir/test.txt
且文件本身有读权限,则可以访问。
十六、最佳实践
-
遵循最小权限原则 :仅授予完成工作所需的最小权限,避免使用
777。 -
目录通常使用
755或750,普通文件通常使用644或640;可执行程序根据需要设置为755。 -
共享项目优先使用用户组管理权限,而不是将文件频繁修改为不同 Owner。
-
需要更细粒度控制时使用 ACL,而不是创建大量重复的用户组。
-
理解目录权限比文件权限更重要 :文件能否删除、创建,主要取决于目录的
w和x权限,而不是文件自身的w权限。 -
定期检查权限 :使用
ls -l、id、groups、namei -l <path>等命令排查权限问题,必要时结合getfacl查看 ACL。