Linux 用户与权限(rwx)详解
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 aliceuid=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 aliceuid=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 xr(Read)
读权限。
对于文件:
允许:
cat less more cp例如:
cat test.txt没有 r:
Permission denied目录:
r 表示:
可以查看目录内容。
例如:
ls dirw(Write)
写权限。
文件:
允许:
修改内容 追加内容 删除内容(受目录权限影响)例如:
echo hello >> file目录:
w 表示:
允许:
创建文件 删除文件 重命名例如:
touch a.txt rm a.txtx(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 | 仅执行 |
| 001 | 1 | 只能执行(对目录来说代表“进入”) |
2 | 仅写入 |
| 010 | 2 | 只能写入/修改 |
3 | 写入 + 执行 |
| 011 | 2 + 1 | 可以修改并执行 |
4 | 仅读取 |
| 100 | 4 | 只能读取/查看 |
5 | 读取 + 执行 |
| 101 | 4 + 1 | 可以读取并执行 |
6 | 读取 + 写入 |
| 110 | 4 + 2 | 可以读取和修改(不能执行) |
7 | 读 + 写 + 执行 |
| 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 |
| 普通文件 | 所有者可读写,其他人只能读。最安全的默认文件权限。 |
755 |
| 目录 / 脚本 | 所有者全权限,其他人可读和进入/执行。最安全的默认目录权限。 |
600 |
| 敏感配置文件 | 仅所有者可读写。常用于 SSH 私钥 ( |
700 |
| 私人目录 | 仅所有者可读写和进入。常用于用户的家目录。 |
777 |
| 共享目录 | 所有人可读写执行。极度危险,容易导致安全漏洞,应尽量避免使用。 |
711 |
| Web 用户目录 | 所有者全权限,其他人只能进入(执行)。常用于 Web 服务器的用户主目录。 |
4. 进阶:特殊权限(4位数字)
有时候你会看到 4 位数字的权限(如4755或1777),这里的第 1 位数字代表特殊权限,后 3 位依然是常规权限。
特殊数字 | 权限名称 | 作用说明 | 典型应用场景 |
|---|---|---|---|
4 | SUID(Set User ID) | 当普通用户执行该文件时,临时获得文件所有者的权限。 |
|
2 | SGID(Set Group ID) | 作用于文件:执行时临时获得文件所属组的权限。 | 团队协作目录,确保大家创建的文件都属于同一个组,方便互相修改。 |
1 | Sticky Bit(粘滞位) | 仅作用于目录:虽然目录权限是 777(大家都能写),但用户只能删除属于自己的文件,不能删除别人的文件。 |
|
十、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:
aliceGroup:
dev当前用户:
bob属于:
devLinux 判断顺序:
是否为 root(UID=0):是,则通常允许访问(部分能力如不可执行文件执行、只读文件系统等仍受限制)。
是否为文件 Owner:是,则使用 Owner 权限位。
是否属于文件所属 Group 或任一附加组:是,则使用 Group 权限位。
否则使用 Others 权限位。
注意:权限不会叠加。一旦命中某一类(Owner、Group 或 Others),只检查该类权限。
例如:
Owner:rw- Group:--- Others:r--如果用户是文件 Owner,即使 Others 有r权限,也不能读取文件,因为 Owner 权限已经命中且没有读权限。
十四、权限检查实例
文件:
-rwxr-x---Owner:
rootGroup:
dev| 用户 | 所属关系 | 最终权限 |
|---|---|---|
| root | Owner | rwx |
| alice(属于 dev) | Group | r-x |
| bob(不属于 dev) | Others | --- |
十五、常见权限场景
1. Shell 脚本无法执行
Permission denied原因:
chmod +x script.sh2. 无法进入目录
cd project提示:
Permission denied原因:
目录没有:
x3. 能看到目录但不能进入
权限:
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。
