文章目录
- 1.shell的运行原理
- 2.用户的分类
- 3.用户的切换
- 4.权限的访问属性
- 5.权限的修改
-
- [5.1 chmod](#5.1 chmod)
- [5.2 chown](#5.2 chown)
- [5.3 chgrp](#5.3 chgrp)
- 6.常见问题
-
- [6.1 umask掩码的作用?](#6.1 umask掩码的作用?)
- [6.2 如何防止文件被删除?](#6.2 如何防止文件被删除?)
- [6.3 目录权限的区分](#6.3 目录权限的区分)
- 希望读者们多多三连支持
- 小编会继续更新
- 你们的鼓励就是我前进的动力!
Linux
权限是系统通过对文件 / 目录设置读(r
)、写(w
)、执行(x
)权限,分别管控文件所有者、所属组及其他用户对其的访问操作,以保障系统安全
1.shell的运行原理

对于 Linux
来说,我们输入的命令行本质上就是在输入字符串,指令的本质就是调用在特定路径下存放的可执行文件,所有的指令最终都要在 OS
(操作系统)内执行,但是 OS
的使用难度比较高,用户一般很难直接使用 OS
和他打交道,所以在用户输入的指令和 OS
之间设置了一层命令行解释器
命令行解释器会将命令翻译给核心(kernel
)处理,同时将翻译后的结果给到使用者
存在的意义:
- 进行命令行解释
- 保护
OS
,对于用户的非法请求直接拦截,起到过滤器的效果
2.用户的分类

用户一般分为:
root
:超级用户- 普通用户:我们新建的用户,即
adduser
由于某些情况下,比如下载依赖的时候就需要切换到 root
账号才能下载,可以使用 su
指令进行切换
超级用户的命令提示符是 #
,普通用户的命令提示符是 $
3.用户的切换
- root用户切换普通用户
bash
[root@hcss-ecs-6aa4 ~]# su zzh_test
[zzh_test@hcss-ecs-6aa4 root]$
su user
表示切换到普通用户,也可以使用exit
或 ctrl+d
退出 root
账号,普通用户切换普通用户同理
- 普通用户切换root用户
bash
[zzh_test@hcss-ecs-6aa4 ~]$ su -
Password:
Last login: Wed Jul 9 09:07:24 CST 2025 from IP on pts/0
Last failed login: Wed Jul 9 22:23:47 CST 2025 from IP on ssh:notty
There were 4128 failed login attempts since the last successful login.
[root@hcss-ecs-6aa4 ~]#
或
bash
[zzh_test@hcss-ecs-6aa4 ~]$ su
Password:
[root@hcss-ecs-6aa4 zzh_test]#
su
后面不加 user
默认表示切换到 root
用户,su -
也是切换到 root
用户,但是会显示登录时的时间、IP
等信息

关键差异对比
特性 | su (无 - ) |
su - (带 - ) |
---|---|---|
环境变量 | 保留当前用户的环境变量 | 加载目标用户的环境变量 |
工作目录 | 保持当前目录 | 切换到目标用户的主目录 |
用户体验 | 部分命令可能因环境变量不匹配而无法正常工作(如找不到命令) | 完全进入目标用户的环境,命令路径正常 |
使用场景 | 临时执行特定命令,无需完整环境 | 需要以目标用户身份进行完整操作 |
例如,若要以root
身份执行单个命令,可直接用 su -c "command" root
;若要完整登录root
环境,则用 su -
🔥值得注意的是:
bash
[zzh_test@hcss-ecs-6aa4 ~]$ sudo whoami
[sudo] password for zzh_test:
root
我们如果想要对特定指令进行 root
身份运行又不想登录那么麻烦的话,可以用 sudo
进行提权,那么以后就可以使用 sudo command
的方式在 root
身份下快速执行命令
但是这种使用方式就会有疑问,因为输入的是普通账户的密码就能使用 root
的权限,那么这样岂不是显得 su
很没用,人人都可以用 root
了?
其实不是这样的,目前我们用 adduser
新建的用户,没有办法执行 sudo
,系统不信任你,除非你添加到系统信任的白名单里才能执行以上操作
关于这部分知识到了后面会做介绍
4.权限的访问属性

一件事是否允许被执行,取决于权限的属性,相当于一个人的身份
bash
-rwxrw-r-- 1 zzh_test zzh_test 44 Jun 29 20:41 text1
看一个例子,该代码展示的是一个文件的详细信息
r
表示可读w
表示可写x
表示可执行-
对应权限位置,表示没有权限
对于文件和目录来说,rwx
的意思稍微有些区别:
r
对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限w
对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限x
对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
但是这么一长串表示什么意思呢?

在 Linux
里分为三种身份:拥有者
,所属组
,其他人
(即除了拥有者,所属组以外的)
举个例子讲解下所属组的具体作用:
假设有甲和乙分别在同一家公司的
A
和B
组,他们虽然在不同组但是负责同一项目,由于公司竞争机制,所以他们并不想所做的成果被互相看到,比如甲刚做好一个部分不想给乙看到,那么他可以直接设置该文件的其他人权限为---
,但是这就无法给老板看成果了,因此就需要所属组,可以理解为白名单,把老板拉到这个所属组里,让老板有权限进行操作
回到这个例子上:
bash
-rwxrw-r-- 1 zzh_test zzh_test 44 Jun 29 20:41 text1
- 第一位表示文件类型,之前讲过,
-
表示文件,d
表示文件夹 2-4
位表示拥有者的权限,对于该例子表示拥有者可读可写可执行
5-7
位表示所属组的权限,对于该例子表示所属组成员可读可写
8-10
位表示其他人的权限,对于该例子表示其他人可读
再往后看,第一个 zzh_test
表示文件所属用户,第二个 zzh_test
表示文件所属用户组
🔥值得注意的是:
Linux
系统中,文件名都是我们自己取的,例如test.c
,加上.c
是为了方便我们知道这是个C
语言文件,对于Linux
系统来说这个文件名后缀没有直接意义,系统识别类型主要还是通过第一位的符号- 创建用户时会默认创建一个同名的基本组,用户所属组的名字和用户名相同,默认情况下该用户会被包含在这个所属组中,即
zzh_test
用户默认是包含在zzh_test
所属组的
5.权限的修改
5.1 chmod
bash
[zzh_test@hcss-ecs-6aa4 ~]$ ll text1
---------- 1 zzh_test zzh_test 44 Jun 29 20:41 text1
[zzh_test@hcss-ecs-6aa4 ~]$ chmod u+rwx,g+rw,o+r text1
[zzh_test@hcss-ecs-6aa4 ~]$ ll text1
-rwxrw-r-- 1 zzh_test zzh_test 44 Jun 29 20:41 text1
chmod
用于设置文件的访问权限,只有文件的拥有者和 root
才可以改变文件的权限,-R
递归修改目录文件的权限
+
:向权限范围增加权限代号所表示的权限-
:向权限范围取消权限代号所表示的权限=
:向权限范围赋予权限代号所表示的权限
用户符号:
u
:拥有者g
:拥有者同组用o
:其它用户a
:所有用户
🔥值得注意的是:
也可以通过 chmod 000 text1
的方式来修改权限,即将所有角色的权限取消,但一般修改不同角色的权限时用八进制,比如 chmod 420 text1

5.2 chown
bash
[root@hcss-ecs-6aa4 zzh_test]# ll text1
-rwxrw-r-- 1 zzh_test zzh_test 44 Jun 29 20:41 text1
[root@hcss-ecs-6aa4 zzh_test]# chown root text1
[root@hcss-ecs-6aa4 zzh_test]# ll text1
-rwxrw-r-- 1 root zzh_test 44 Jun 29 20:41 text1
chown
用于修改文件的拥有者,此命令只能由 root
使用,-R
递归修改文件或目录的所有者
5.3 chgrp
bash
[zzh_test@hcss-ecs-6aa4 ~]$ charge other_group text1
修改文件或目录的所属组,-R
递归修改文件或目录的所属组
假设你是用户 zzh_test
,属于 zzh_group
和 dev_group
两个组,你有一个自己的文件 text1
(所有者是 zzh_test
)。你可以把 text1
的所属组改成 zzh_group
或 dev_group
(因为你是这两个组的成员),但不能改成 root
组或 other_group
(如果你不在这些组里),会提示权限不足
6.常见问题
6.1 umask掩码的作用?

系统会为新文件默认分配权限(通常文件是 666
,目录是 777
),而 umask
会 "屏蔽" 掉其中某些权限,最终权限 = 默认权限 - umask
权限

其实实际权限的计算是通过位运算实现的,但是为了计算简便直接相减也是可以的
例如:若 umask
为 022
,则新文件权限为 666 - 022 = 644
(即 -rw-r--r--
),新目录权限为 777 - 022 = 755
(即 drwxr-xr-x
)
-
默认情况下,系统创建文件和目录的权限可能过于宽松(如文件
666
、目录777
),这会导致所有用户都能读写甚至执行文件,存在安全风险。通过umask
屏蔽不必要的权限,确保文件和目录仅拥有完成任务所需的最低权限。例如,日志文件通常只需所有者可写,其他用户只读(644
),此时umask
可设为022
-
每次创建文件时手动指定权限(如
chmod
)繁琐且易出错,umask
提供了自动化的默认权限设置机制。团队协作规范:团队环境中,统一的umask
配置可确保所有成员创建的文件权限一致,避免因权限混乱导致的协作问题
6.2 如何防止文件被删除?
bash
[root@localhost ~]# chmod +t /home/ # 加上粘滞位
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作
我们知道对于一个目录来说,other
只要具有 w
权限就可以对文件进行修改删除,但是常常我们只希望别人写入,而不是删除,为了实现只可写的权限,可以使用粘滞位 chmod +t
,即 x
的位置被替换成 t
此时该目录下的文件只能由
root
删除- 该目录的所有者删除
- 该文件的所有者删除
🔥值得注意的是: 一个文件能否被删除,并不由文件本身决定的,是由文件所处的目录权限决定的。因此粘滞位是给目录设置的,目录设置了粘滞位,文件除了上述所说的角色,其他人就无法删除了
6.3 目录权限的区分
目录的可执行权限是表示你可否在目录下执行命令:
- 如果目录没有
-x
权限,则无法对目录执行任何命令,甚至无法cd
进入目,即使目录仍然有-r
读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件) - 如果目录具有
-x
权限,但没有-r
权限,则用户可以执行命令,可以cd
进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls
命令,但仍然没有权限读出目录下的文档(可以执行和可以实现是两码事)
希望读者们多多三连支持
小编会继续更新
你们的鼓励就是我前进的动力!
