上一篇我们掌握了vim进阶操作,解决了文件查看与编辑的核心需求。今天,我们进入 Linux 系统的核心安全基石——用户与权限体系。
很多新手刚接触 Linux 时都会有这些困惑:
- Linux为什么普通用户改不了系统文件,总会提示「Permission denied」?
这些问题的答案,都在今天的内容里。用户与权限是 Linux 多用户架构的核心设计,实现资源隔离和权限管控,是所有 Linux 操作的基础。
本篇我们不讲复杂命令,先把用户、用户组、权限三大核心概念讲透,帮你建立认知框架,看懂终端权限信息。
一、核心认知:为什么 Linux 必须有用户与权限体系?
在讲具体概念前,我们先搞懂一个核心问题:Windows 日常使用很少关注用户和权限,为什么 Linux 要把这套体系做得这么严格?
答案很简单:Linux 从诞生之初就是为「多用户、多任务」场景设计的。
- 安全隔离:限制不同用户的操作边界,普通用户无法修改系统核心文件,哪怕误操作也不会搞崩整个系统;恶意程序也会受限于用户权限,无法破坏系统。
- 权限可控:精准控制每个用户、每个程序对文件/目录的访问权限,实现「最小权限原则」——只给完成任务必需的权限,不给多余权限。
- 资源分配:多用户同时使用系统时,可通过用户/组隔离不同用户的资源,避免互相干扰,同时实现团队协作的权限共享。
二、Linux 用户(User)全解
1. 什么是 Linux 用户?
Linux 中的 用户(User),是系统识别操作主体的唯一标识,你执行的每一个命令、访问的每一个文件,都必须以某个用户的身份进行,系统会根据这个用户的权限,判断你能不能执行这个操作。
每个用户都有一个唯一的 用户ID(UID,User ID),系统底层是通过 UID 识别用户,而不是用户名,用户名只是给人看的、方便记忆的别名。
2. Linux 用户的三大类型
Linux 系统中的用户,按权限和用途分为三类,每一类都有明确的使用边界,新手必须分清:
| | | |
|---|
| | | 拥有系统的完全控制权,可执行任何操作、修改任何文件,权限不受限制 |
| | | 不是给人登录使用的,比如 nginx、mysql、sshd 这些服务,都会创建对应的系统用户运行,限制服务的权限,避免服务被攻击后影响整个系统 |
| | | 权限受严格限制,只能操作自己家目录(/home/用户名)、系统授权的目录/文件,无法修改系统核心配置 |
新手必懂的关键说明
- root 用户的红线:root 权限无限制,误操作(比如
rm -rf /)会直接摧毁系统,绝对不要用 root 用户执行日常操作,仅在需要修改系统配置、安装软件时临时切换(较新发行版有提示)。 - 系统用户的误区:很多新手看到系统里有很多不认识的用户,以为是异常账号,其实这些都是系统服务对应的系统用户,是正常的,不要随意删除/修改。
- 普通用户的家目录:每个普通用户都有一个专属家目录,路径为
/home/用户名,比如用户 zhangsan 的家目录是 /home/zhangsan,用户在自己的家目录里拥有完全权限,其他普通用户默认无法访问。
3. 快速查看用户信息的基础命令
这里先给2个新手必学的查看命令,不用修改,仅用于验证认知,下一篇会详解用户管理命令:
# 1. 查看当前登录的用户名whoami# 2. 查看当前用户的UID、GID、所属组信息id
示例输出:
[zhangsan@anolis8 ~]$ whoamizhangsan[zhangsan@anolis8 ~]$ iduid=1000(zhangsan) gid=1000(zhangsan) groups=1000(zhangsan),10(wheel)
这里的 uid=1000 就说明这是一个普通用户,gid=1000 是用户的主组ID,接下来我们就讲用户组。
三、Linux 用户组(Group)全解
1. 什么是 Linux 用户组?
用户组(Group),是一组具有相同权限的用户的集合,核心作用是批量管理用户权限,简化权限配置。
举个很容易理解的例子:
公司有一个开发团队,5个开发人员,都需要访问服务器上的 /data/project 项目目录,拥有读写权限。
- 如果没有用户组,你需要给5个用户分别配置目录的读写权限,有人入职/离职都要重新修改,非常麻烦;
- 如果有用户组,你只需要创建一个
dev 开发组,把5个用户都加入这个组,给 dev 组配置目录的读写权限即可,后续人员变动只需要修改组内成员,权限自动生效。
和用户类似,每个用户组也有一个唯一的 组ID(GID,Group ID),系统通过 GID 识别用户组。
2. 用户组的两大类型:主组 vs 附加组
每个 Linux 用户必须有且仅有一个主组(Primary Group),同时可以加入0个或多个附加组(Supplementary Group,也叫附属组),这是新手最容易搞混的概念,必须分清:
(1)主组(私有组)
- 每个用户创建时,系统会默认创建一个和用户名同名的用户组,作为该用户的主组;
- 核心规则:用户创建新文件/目录时,文件的默认所属组,就是用户的主组;
(2)附加组(附属组)
- 核心作用:给用户赋予额外的权限,用户会继承所属所有附加组的权限;
还是用上面的例子理解:
用户 zhangsan 的主组是 zhangsan,他加入了 dev 开发组、test 测试组这两个附加组。
- 他可以访问
dev 组、test 组有权限访问的所有文件/目录。
四、Linux 文件权限核心
搞懂了用户和用户组,我们终于可以进入最核心的权限体系了。Linux 的权限设计遵循UGO 模型,所有的权限规则都围绕这个模型展开。
1. 权限的三大归属对象(UGO)
Linux 中,每一个文件/目录,都精准定义了三类操作主体的权限,也就是 UGO:
- U = User(所有者):文件/目录的拥有者,默认是创建这个文件的用户,可修改;
- G = Group(所属组):文件/目录所属的用户组,组内的所有用户,都拥有该组对应的权限;
- O = Other(其他用户):既不是所有者、也不是所属组内的用户,系统里的其他所有用户。
⚠️ 特殊说明:超级用户 root 不受任何权限规则限制,无论文件怎么设置权限,root 都拥有完全的读写执行权限。
2. 三大基础权限类型:r、w、x
Linux 给每一类归属对象,都定义了三种基础权限:读(r,read)、写(w,write)、执行(x,execute)。
这里有一个新手90%会踩的坑:这三种权限,对「文件」和「目录」的作用是完全不同的,必须分开记,绝对不能混为一谈!
| | | |
|---|
| | 可读取文件的内容(比如 cat、less 查看文件) | 可列出目录内的文件列表(比如 ls 查看目录里的内容) |
| | 可修改、编辑、删除文件的内容(比如 vim 编辑文件) | 可在目录内新增、删除、重命名、移动文件/子目录(⚠️ 重点:目录有w权限,才能删除里面的文件,和文件本身的权限无关) |
| | 可将文件作为可执行程序运行(比如 shell 脚本、二进制程序) | 可进入该目录(比如 cd 命令进入目录),这是目录访问的基础权限,没有x权限,r和w权限都无法生效 |
新手必记的关键避坑点
- 目录的x权限是基础:一个目录哪怕给了r和w权限,没有x权限,你既不能cd进入,也不能列出里面的文件,更不能增删文件,完全无法使用。
- 文件能否删除,看所在目录的w权限:哪怕一个文件是只读权限(r--),只要你对它所在的目录有w和x权限,你依然可以删除这个文件。
- 脚本有r权限不一定能执行:shell 脚本必须有x执行权限,才能直接运行,只有r权限只能查看内容,无法执行。
3. 权限的两种表示方法
Linux 权限有两种标准表示方法:符号表示法和数字表示法,两者完全等价,可互相转换,日常使用中都会用到,必须掌握。
(1)符号表示法
就是我们在终端里用 ls -l 看到的 rwxr-xr-x 这种格式,一共9个字符,分为3组,从左到右依次对应:所有者权限(U)、所属组权限(G)、其他用户权限(O),每组3个字符,固定为 rwx 的顺序,没有对应的权限就用 - 填充。
举个例子:rwxr-xr--
- 第1-3位
rwx:所有者(U)拥有读、写、执行权限; - 第4-6位
r-x:所属组(G)拥有读、执行权限,没有写权限; - 第7-9位
r--:其他用户(O)只有读权限,没有写、执行权限。
再举个例子:rw-r--r--
- 所有者:读、写权限,无执行权限(普通文件最常用的权限);
(2)数字表示法
用3个0-7的数字,分别对应所有者、所属组、其他用户的权限,是日常配置权限最常用的方式,核心规则是给每个权限分配一个固定的数字:
每组的权限数字,就是该组拥有的权限对应的数字之和,每组的数字范围是0-7。
计算示例(新手跟着算一遍就会)
新手必记的常用权限与场景
| | |
|---|
| | 普通文件(配置文件、文本文件、图片等),所有者可读写,其他人只读,最常用的文件权限 |
| | 目录、可执行文件(脚本、二进制程序),所有者可读写执行,其他人可读可执行,最常用的目录/可执行文件权限 |
| | 敏感文件(ssh私钥、用户密码文件),只有所有者可读写,其他人完全无权限,极致安全 |
| | 敏感目录(用户家目录),只有所有者可完全操作,其他人完全无权限 |
| | 所有用户拥有完全权限,绝对禁止在生产环境使用,有严重的安全风险 |
五、实操入门:看懂终端里的权限信息
学完了概念,我们用一个实操示例,把所有知识点串起来,教你看懂 ls -l 命令的输出,这是新手必须掌握的基础技能。
1. 执行查看命令
我们在之前的 /tmp 测试目录下,执行 ls -l 命令,查看文件的详细信息,示例输出如下:
[zhangsan@anolis8 tmp]$ ls -ltotal 4-rw-r--r--. 1 zhangsan dev 220 Mar 5 10:00 test.txtdrwxr-xr-x. 2 zhangsan dev 40 Mar 5 10:00 project-rwxr-xr-x. 1 root root 120 Mar 5 10:00 start.sh
2. 逐段拆解输出内容
我们以第一行的 test.txt 为例,把每一段内容对应到我们学的概念上,从左到右一共7段,逐位拆解:
- 第1位:文件类型,
- 代表普通文件,d 代表目录(第二行的project就是目录),l 代表软链接; - 第2-10位:就是我们学的9位UGO符号权限,这里的
rw-r--r--,对应数字权限644; - 末尾的
.:代表该文件开启了SELinux安全上下文,新手暂时不用关注。
- ② 硬链接数
- ③ 所有者(User):该文件的所有者是
zhangsan 用户,对应UGO模型的U。 - ④ 所属组(Group):该文件的所属组是
dev 用户组,对应UGO模型的G。 - ⑤ 文件大小:文件的字节数,test.txt 大小是220字节。
- ⑥ 最后修改时间
- ⑦ 文件名/目录名
3. 结合权限规则解读
- 对于
test.txt:所有者 zhangsan 可以读写,dev 组内的用户只能读,其他用户只能读; - 对于
project 目录:所有者 zhangsan 可以进入、增删文件、列出内容,dev 组内的用户可以进入、列出内容,不能增删文件; - 对于
start.sh 脚本:只有 root 用户可以修改,其他所有用户都可以读和执行。
六、新手避坑指南(高频错误合集)
- 绝对不要随便给文件/目录 777 权限:777意味着所有用户都能修改、删除、执行你的文件,生产环境给777权限,相当于把系统完全暴露,有极高的被入侵风险,遇到权限不足的问题,先找原因,不要直接用777解决。
- 不要用 root 用户日常操作:root 权限无限制,一个误操作就可能删除系统文件,导致系统崩溃,日常使用普通用户,需要管理员权限时用
sudo 临时提权(后续会讲)。 - 不要搞混文件和目录的权限规则:重点记住「目录的x权限是进入的基础」「文件能否删除看所在目录的w权限」,这两个是新手最容易踩的坑。
- 不要随意修改系统目录的权限:比如
/etc、/bin、/sbin、/root 这些系统核心目录,修改权限会导致系统服务无法启动,甚至无法登录系统。 - 不要用Windows的权限逻辑套Linux:Linux的权限是严格的UGO三层模型,和Windows的ACL权限完全不同,先建立Linux的权限认知,再进行操作。
七、本篇总结
- Linux 的用户与权限体系,继承自 UNIX 的多用户设计,核心是安全隔离与权限可控,是 Linux 系统的安全基石。
- Linux 用户分为超级用户(root,UID=0)、系统用户(UID 1-999)、普通用户(UID 1000+),日常操作必须用普通用户。
- 用户组分为主组和附加组,核心作用是批量管理用户权限,每个用户只能有一个主组,可加入多个附加组。
- Linux 权限遵循 UGO 模型,精准定义所有者、所属组、其他用户三类主体的权限,核心权限为读(r)、写(w)、执行(x),文件和目录的权限作用完全不同。
- 权限有符号和数字两种表示法,r=4、w=2、x=1,常用权限为文件644、目录755,绝对禁止生产环境使用777权限。
- 通过
ls -l 命令可查看文件的完整权限信息,看懂权限位是所有权限操作的基础。
文 / 零距技术仓记录每一次真实的折腾 (#^.^#)🚀 想看到更多实用折腾技巧?👉 先关注💬 评论区说说你的经历或想看的内容👍 点赞表示支持🔁 顺手分享给也在折腾的人,让大家都少踩坑 😎