Linux 权限实战:从概念到命令,搞定文件访问控制的核心逻辑

文章目录
前言:
一. 先理清:Linux 权限的核心逻辑
1.1 两类用户(人):超级用户与普通用户
1.2 三类访问者:文件权限的 “身份标签”
1.3 三种基本权限:读、写、执行
二. 权限的两种表示法:符号与数字
2.1 符号表示法:精准调整单个权限
2.2 数字表示法:快速设置所有权限
三. 权限实战:修改与验证
3.1 修改权限:chmod命令
3.2 修改所有者与所属组:chown与chgrp
3.3 验证权限:模拟不同用户操作
结尾:
前言:
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击人工智能教程跳转到网站。”

在 Linux 系统中,“权限” 是保障文件安全、划分用户操作边界的核心机制。你是否遇到过 “普通用户删不掉自己创建的文件”“root 用户才能修改系统配置” 这类问题?其实都是权限在背后起作用。这篇文章结合 理论知识与实战命令示例,从权限的基本概念讲到实操技巧,帮你搞懂 Linux 权限的逻辑与用法。

一. 先理清:Linux 权限的核心逻辑
Linux 作为多用户操作系统,通过 “谁能操作” 和 “能做什么操作” 两大维度控制文件访问,核心是 “按角色(身份)分配权限”。

1.1 两类用户(人):超级用户与普通用户
Linux 中用户分为两种,权限差异极大:

超级用户(root):命令提示符为#,可执行系统中任何操作(如删除系统文件、修改权限),不受限制;
普通用户:命令提示符为$,仅能操作自己权限范围内的文件(如修改自己的文档),受严格限制。
添加用户的操作(删除的话之前讲过,这里就不演示了):

[root@VM-4-4-centos lesson5]# adduser Lotso
[root@VM-4-4-centos lesson5]# passwd Lotso
Changing password for user Lotso.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
运行项目并下载源码
bash
1
2
3
4
5
6
通过su,su-命令可切换用户,示例:

su:只进行“身份切换”,不改变当前的工作环境(环境变量、工作目录等)。

su -:进行“完整的登录切换”,会模拟一次完整的登录过程,包括切换工作目录和加载目标用户的环境变量。

# 普通用户whb切换到root(需输入root密码)
[whb@bite-alicloud ~]$ su root
Password:
[root@bite-alicloud ~]# whoami # 验证当前用户
root

# root切换到普通用户whb(无需密码)
[root@bite-alicloud ~]# su whb
[whb@bite-alicloud ~]$ whoami
whb

#su
[zhangsan@server ~]$ pwd
/home/zhangsan
[zhangsan@server ~]$ su
Password: # 输入root密码
[root@server zhangsan]# pwd # 注意:提示符显示还在zhangsan的目录
/home/zhangsan

#su-
[zhangsan@server ~]$ pwd
/home/zhangsan
[zhangsan@server ~]$ su -
Password: # 输入root密码
[root@server ~]# pwd # 已经切换到root的家目录
/root
运行项目并下载源码
bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
当然还有个指令是sudo,这个是不用切换用户,短暂的对普通用户进行提权,但是前提是该用户在白名单里(很好的解决了权限滥用的问题,想要使用提权操作必须root授权,这样其实也方便快速找到是谁出了问题) :

sudo vs su 主要区别对比:

特性 sudo su
认证方式 使用当前用户密码 使用目标用户密码
权限粒度 可精细控制每个命令 获得完整的目标用户会话
日志记录 有详细的命令日志 只有切换用户记录
默认行为 执行单条命令 开启新的shell会话
配置文件 /etc/sudoers 无独立配置
安全性 更高(最小权限原则) 较低(全权访问)
使用场景 临时执行特权命令 需要长时间以目标用户工作
示例:

# 初始状态
[haha_118@bite-aticloud ~]$ lt
total 4
drw.rw.r-x 2 haha_118 haha_118 4096 Oct 22 19:01 dir
-rw-rw-r-- 1 haha_118 haha_118 0 Oct 22 19:01 haha.txt

# 切换到 root 用户,输入root的密码
[haha_118@bite-aticloud ~]$ su -
Password:
[root@bite-aticloud ~]# whoami
root

# root 用户操作,检查并编辑 sudoers 文件,将haha_118 用户添加到了 sudoers 配置
#这个具体的操作后面再讲
[root@bite-aticloud ~]# ls /etc/sudoers /etc/sudoers
[root@bite-aticloud ~]# vim /etc/sudoers

# 返回普通用户,使用 sudo 权限
[root@bite-aticloud ~]# logout
[haha_118@bite-aticloud ~]$ whoami
haha_118
[haha_118@bite-aticloud ~]$ sudo touch test.txt
[sudo] password for haha_118:
运行项目并下载源码
bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

1.2 三类访问者:文件权限的 “身份标签”
每个文件 / 目录都有三类 “访问者(角色,身份)”,对应不同的权限范围,这是权限控制的核心:

u(User,所有者):文件的创建者(如hello.txt的所有者是whb),对文件权限拥有最高控制权;
g(Group,所属组):文件归属的用户组(如hello.txt属于whb组),同组用户共享组权限;
o(Others,其他用户):既不是所有者也不在所属组的用户(如系统中的Lotso用户),权限最严格。
通过ls -l可直接查看文件的 “身份标签”,示例:

# 格式:文件类型 权限 硬链接数 所有者 所属组 大小 时间 文件名
[whb@bite-alicloud ~]$ ls -l hello.txt
-rw-rw-r-- 1 whb whb 29 Oct 22 20:56 hello.txt
# 解读:所有者=whb,所属组=whb,其他用户
运行项目并下载源码
bash
1
2
3
4
表达:hello.txt文件的拥有者是whb,具有读写的权限。所属组是whb,具有读写的权限。others其它用户具有读的权限。

补充:链接文件和块设备举例

 

1.3 三种基本权限:读、写、执行
Linux 为文件 / 目录定义了三种基本权限,不同权限对应不同操作能力,且对 “文件” 和 “目录” 的含义不同:

权限符号 数字值 对文件的作用 对目录的作用
r(读) 4 查看文件内容(如cat) 列出目录内文件(如ls)
w(写) 2 修改文件内容(如vim,echo) 创建/删除/移动目录内文件(如touch)
x(执行) 1 运行文件(如./script.sh) 进入目录(如cd)
-(无) 0 无法查看文件内容 无法列出目录内容或进入目录
带了x的不一定就是可执行了,还需要它本身就是一个可执行文件才行。

整体图示理解:

二. 权限的两种表示法:符号与数字
权限有 “符号表示法”(直观易懂)和 “数字表示法”(高效简洁)两种,实际使用中可根据场景选择。

2.1 符号表示法:精准调整单个权限
格式:chmod [访问者][±=][权限] 文件名,其中:
+:增加权限,-:删除权限,=:强制设置权限;
访问者:u(所有者)、g(所属组)、o(其他用户)、a(所有用户)。
操作示例:

# 1. 给所有者(u)增加执行(x)权限
[whb@bite-alicloud ~]$ chmod u+x hello.txt
[whb@bite-alicloud ~]$ ls -l hello.txt
-rwxrw-r-- 1 whb whb 29 Oct 22 20:56 hello.txt # u权限从rw-变为rwx

# 2. 给所属组(g)删除写(w)权限
[whb@bite-alicloud ~]$ chmod g-w hello.txt
[whb@bite-alicloud ~]$ ls -l hello.txt
-rwxr--r-- 1 whb whb 29 Oct 22 20:56 hello.txt # g权限从rw-变为r--

# 3. 给其他用户(o)增加读+写权限(o+rw)
[whb@bite-alicloud ~]$ chmod o+rw hello.txt
[whb@bite-alicloud ~]$ ls -l hello.txt
-rw----rw- 1 whb whb 29 Oct 22 20:56 hello.txt # 其他用户权限变为rw-

# 4. 给其他用户(o)强制设置读+写(rw)权限
[whb@bite-alicloud ~]$ chmod o=rw hello.txt
[whb@bite-alicloud ~]$ ls -l hello.txt
-rwxr--rw- 1 whb whb 29 Oct 22 20:56 hello.txt # o权限从r--变为rw-
运行项目并下载源码
bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2.2 数字表示法:快速设置所有权限
由于r=4、w=2、x=1,可将三类访问者的权限用 “三位八进制数字” 表示(所有者 + 所属组 + 其他用户),格式:chmod 数字权限 文件名。

常见权限组合及示例(参考):

数字权限 符号权限 含义(所有者-所属组-其他用户) 适用场景
755 rwxr-xr-x 所有者:读+写+执行,组和其他:读+执行 可执行脚本、公共目录
644 rw-r–r– 所有者:读+写,组和其他:只读 普通文档、配置文件
700 rwx------ 所有者:读+写+执行,组和其他:无权限 私密文件、个人脚本
600 rw------- 所有者:读+写,组和其他:无权限 敏感配置(如密钥文件)
777 rwxrwxrwx 所有用户:读+写+执行 临时共享目录(谨慎使用)
400 r-------- 仅所有者可读,其他无权限 只读私密文件(如证书)
示例:

# 数字法:将hello.txt权限设为600(仅所有者读写)
[whb@bite-alicloud ~]$ chmod 600 hello.txt
[whb@bite-alicloud ~]$ ls -l hello.txt
-rw------- 1 whb whb 29 Oct 22 20:56 hello.txt # 权限重置为rw-------
运行项目并下载源码
bash
1
2
3
4
整体图示理解:
补充:身份匹配只匹配一次,比如whb又是文件的所有者又是所属组,那如果他所有者的权限没有w(写),就算所属组的权限有写也没用,只匹配一次。

三. 权限实战:修改与验证
掌握了权限的 “身份” 和 “表示法”,接下来通过chmod(改权限)、chown(改所有者)、chgrp(改所属组)三大命令实战操作,并验证效果。

3.1 修改权限:chmod命令
chmod是修改权限的核心命令,支持符号法和数字法(前面其实已经用过了),且可通过-R递归修改目录权限(含子目录和文件)。
示例 1:修改单个文件权限

# 符号法:给hello.txt的所有用户(a)增加读权限
[whb@bite-alicloud ~]$ chmod a+r hello.txt
[whb@bite-alicloud ~]$ ls -l hello.txt
-rw-rw-r-- 1 whb whb 29 Oct 22 20:56 hello.txt # 所有用户均有读权限

# 数字法:将hello.txt权限设为600(仅所有者读写)
[whb@bite-alicloud ~]$ chmod 600 hello.txt
[whb@bite-alicloud ~]$ ls -l hello.txt
-rw------- 1 whb whb 29 Oct 22 20:56 hello.txt
运行项目并下载源码
bash
1
2
3
4
5
6
7
8
9
示例 2:递归修改目录权限

# 递归设置test目录及其子文件权限为755(所有者全权限,其他只读+执行)
[whb@bite-alicloud ~]$ chmod -R 755 test
[whb@bite-alicloud ~]$ tree -p test # 查看目录内权限
test
├── [drwxr-xr-x] subdir
│ └── [-rwxr-xr-x] script.sh
└── [-rwxr-xr-x] readme.txt
运行项目并下载源码
bash
1
2
3
4
5
6
7
3.2 修改所有者与所属组:chown与chgrp
chown:修改文件 / 目录的所有者(需 root 权限或文件所有者);
chgrp:修改文件 / 目录的所属组(需 root 权限或文件所有者)。
chown需要别人接受才行,上面的chmod不用(这个相当于改自己的东西,chown相当于给别人东西得经过别人接受)。当然如果是root账户的话不受限制或者使用sudo,chgrp的话分情况来看。

操作示例:

# 1. root将hello.txt的所有者改为zpw(普通用户无此权限)
[root@bite-alicloud ~]$ chown zpw hello.txt
[root@bite-alicloud ~]$ ls -l hello.txt
-rw------- 1 zpw whb 29 Oct 22 20:56 hello.txt # 所有者从whb变为zpw

# 2. 普通用户whb直接修改(无sudo,权限不足,报错)
[whb@bite-alicloud ~]$ chown whb hello.txt
chown: changing ownership of 'hello.txt': Operation not permitted

# 3. 普通用户whb用sudo修改hello.txt的所有者为litao(需输入whb自己的密码,且whb已在sudoers配置中)
[whb@bite-alicloud ~]$ sudo chown litao hello.txt
[sudo] password for whb: # 输入whb的密码
[whb@bite-alicloud ~]$ ls -l hello.txt
-rw------- 1 litao zhangsan 29 Oct 22 20:56 hello.txt # 所有者从zpw变为litao

# 4. 修改hello.txt的所属组为zhangsan(需root或所有者)
[root@bite-alicloud ~]$ chgrp zhangsan hello.txt
[root@bite-alicloud ~]$ ls -l hello.txt
-rw------- 1 zpw zhangsan 29 Oct 22 20:56 hello.txt # 所属组从whb变为zhangsan

# 5. 假设whb是hello.txt的所有者,且属于zhangsan组(主组或附加组)
[whb@bite-alicloud ~]$ chgrp zhangsan hello.txt
[whb@bite-alicloud ~]$ ls -l hello.txt
-rw-rw-r-- 1 whb zhangsan 29 Oct 22 20:56 hello.txt # 所属组从原组变为zhangsan

# 6. 普通用户whb(此时他不是文件的所有者,且目标组不在自身组列表中)用sudo修改hello.txt的所属组为whb组
[whb@bite-alicloud ~]$ sudo chgrp whb hello.txt
[whb@bite-alicloud ~]$ ls -l hello.txt
-rw------- 1 litao whb 29 Oct 22 20:56 hello.txt # 所属组从zhangsan变为whb
运行项目并下载源码
bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
关于所属组的一些补充:
这里关于添加组啥的操作就不演示了,文末的思维导图里有,大家感兴趣也可以自己下去查阅学习一下,现在来说组操作其实用的也比较少了。

3.3 验证权限:模拟不同用户操作
权限是否生效,需通过不同用户的实际操作验证。以 “目录写权限导致文件被删” 为例,理解权限的实际影响:

# 1. root设置/home目录为777(所有用户可写)
[root@bite-alicloud ~]$ chmod 777 /home
[root@bite-alicloud ~]$ ls -ld /home
drwxrwxrwx. 3 root root 4096 Oct 22 15:58 /home

# 2. root在/home创建root.c(所有者为root)
[root@bite-alicloud ~]$ touch /home/root.c
[root@bite-alicloud ~]$ ls -l /home/root.c
-rw-r--r--. 1 root root 0 Oct 22 15:59 /home/root.c

# 3. 普通用户litao删除root.c(因/home有写权限,成功删除)
[root@bite-alicloud ~]$ su - litao
[litao@localhost ~]$ rm /home/root.c
rm: remove regular empty file '/home/root.c'? y # 确认删除
[litao@localhost ~]$ ls /home/root.c # 验证删除
ls: cannot access '/home/root.c': No such file or directory
运行项目并下载源码
bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
小问题:
这里我们会发现一个很奇怪的事,我普通用户又不是root.c的所有者,也不是所属组,作为others呢也没有写的权限,到那时我能删掉这个root.c文件,这是因为我对目录有写的权限,具体原因大家可以结合本文1.3的部分来理解。但是我们这样可以随便删掉root或者别人的文件也是比较不合理的吧,我们该怎么去解决呢?我们在下一篇文章中来揭晓吧~

结尾:
🍓 我是草莓熊 Lotso!若这篇技术干货帮你打通了学习中的卡点:
👀 【关注】跟我一起深耕技术领域,从基础到进阶,见证每一次成长
❤️ 【点赞】让优质内容被更多人看见,让知识传递更有力量
⭐ 【收藏】把核心知识点、实战技巧存好,需要时直接查、随时用
💬 【评论】分享你的经验或疑问(比如曾踩过的技术坑?),一起交流避坑
🗳️ 【投票】用你的选择助力社区内容方向,告诉大家哪个技术点最该重点拆解
技术之路难免有困惑,但同行的人会让前进更有方向~愿我们都能在自己专注的领域里,一步步靠近心中的技术目标!
运行项目并下载源码
html
1
2
3
4
5
6
7

结语:Linux 权限并非复杂的 “技术壁垒”,而是一套围绕 “身份 - 权限 - 操作” 构建的清晰规则 —— 从区分root与普通用户的权限边界,到用u/g/o给文件贴 “身份标签”,通过r/w/x定义具体操作能力,再用chmod/chown/chgrp调整权限。每一步都是为了在 “复用” 与 “安全” 间找到平衡,最终实现 “谁能做什么” 的精准控制。
————————————————
版权声明:本文为CSDN博主「草莓熊Lotso」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/2503_91389547/article/details/153752671

阅读剩余
THE END