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 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 位数字的权限(如 47551777),这里的第 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 判断顺序:

  1. 是否为 root(UID=0):是,则通常允许访问(部分能力如不可执行文件执行、只读文件系统等仍受限制)。

  2. 是否为文件 Owner:是,则使用 Owner 权限位。

  3. 是否属于文件所属 Group 或任一附加组:是,则使用 Group 权限位。

  4. 否则使用 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

且文件本身有读权限,则可以访问。


十六、最佳实践

  1. 遵循最小权限原则 :仅授予完成工作所需的最小权限,避免使用 777

  2. 目录通常使用 755750,普通文件通常使用 644640 ;可执行程序根据需要设置为 755

  3. 共享项目优先使用用户组管理权限,而不是将文件频繁修改为不同 Owner。

  4. 需要更细粒度控制时使用 ACL,而不是创建大量重复的用户组。

  5. 理解目录权限比文件权限更重要 :文件能否删除、创建,主要取决于目录的 wx 权限,而不是文件自身的 w 权限。

  6. 定期检查权限 :使用 ls -lidgroupsnamei -l <path> 等命令排查权限问题,必要时结合 getfacl 查看 ACL。