RHCSA 第三天学习笔记
内容简介:切换用户(su)、用户提权(sudo)、权限管理(chmod、chown、特殊权限)、umask 默认权限、网络配置(nmcli、nmtui)、控制启动流程与重置 root 密码。
一、切换用户(su)
切换用户的三种方式
1. su - 用户名(切换用户并加载环境配置,推荐)
[root@localhost ~]# su - user01
[user01@localhost ~]$ pwd
/home/user01
2. su 用户名(只切换用户,不加载环境配置)
[root@localhost ~]# su user01
[user01@localhost root]$ pwd
/root
3. ssh 用户名@localhost/主机名/主机IP

注意点1:使用
su -切换用户后,返回之前用户时,不要来回使用su -进行切换,而是要使用exit退出。
注意点2:
su和su -的区别——su只是切换了用户,没有加载用户的配置环境;而su -不仅切换了用户,还加载了用户对应的配置环境(主要指 bashrc 和 profile,即用户个人的配置文件.bash_profile和.bashrc)。
当普通用户权限不够时,可以使用 su - root 切换到管理员,然后由管理员执行。
二、用户提权 sudo
目的:让普通用户获取到管理员的权限。
普通用户想要获取管理员权限,首先要由 root 用户授权,授权在 /etc/sudoers 或者 visudo 里进行添加:
[root@localhost ~]# vim /etc/sudoers # 或者 visudo(配置文件里面有例子)

配置完提权对应的文件后,普通用户敲的命令前面加上 sudo 即可获取管理员权限。
配置说明:
- 如果第二个
ALL的位置上是NOPASSWD: ALL,执行时不需要密码 - 如果用户名前面有
%,那么代表的是组
注意:把用户加入到 root 组里面,并不会获取到管理员的权限。如果想要让用户获取到管理员权限,应该加入到 wheel 组中。
图1:执行命令时不需要密码

图2:执行命令时需要密码

普通用户使用管理员权限执行命令:
sudo 要执行的操作
sudo useradd user01 # 比如创建用户user01
强调:普通用户是不能直接使用 sudo 来提权的,必须先由 root 用户将普通用户规范到
/etc/sudoers文件或者 visudo 中,然后普通用户才可以使用 sudo 提权。
练习:创建一个普通用户 jiance1,密码设置为 HOF1na2dhpuP,然后对 jiance1 做提权操作,在 jiance1 用户下创建一个用户 containers。
三、权限管理(基本权限)
权限管理是针对普通用户来进行的,在权限管理中要首先确定用户,然后再看用户的权限!
目的:通过对不同的用户设置不同的权限来限制某些用户的行为,从而保证系统的安全。
1. 查看用户针对文件的权限
ls -l
- 文件所有者
u(user) - 文件所属组
g(group) - 其他用户
o(other)

文件类型标识(第一个字符):
| 标识 | 含义 | 示例 |
|---|---|---|
- | 普通文件 | |
d | 目录 | |
l | 软链接 | |
b | 块设备 | 磁盘 |
c | 字符设备 | 鼠标、键盘 |
2. rwx 三种基本权限
| 权限 | 普通文件 | 目录 |
|---|---|---|
| r 读 | 能否查看文件里的内容 | 能否查看目录下文件信息,受影响的命令:ls 等 |
| w 写 | 能否修改文件里的内容 | 能否在此目录下删除或者创建文件,受影响的命令:rm、mkdir、touch 等 |
| x 执行 | 运行脚本时需要用到执行权限,一般情况下为保证系统安全,普通文件不给执行权限 | 能否将此目录作为用户的当前工作目录,受影响的命令:cd。对于目录而言,一般会给目录赋予执行权限 |
如果用户没有相应的权限,那么就会用 - 代替。
3. ls -l 输出字段详解
以 -rw-r--r--. 1 root root 0 Feb 14 11:42 txt 为例:
-rw-r--r--:权限位(文件所有者rw-、文件所属组r--、其他用户r--).:ACL 权限的标识符,.代表没有设置 acl 权限,+代表设置了 acl 权限1:如果对象是普通文件,代表硬链接数;如果对象是目录,代表子目录数root:文件所有者root:文件所属组0:文件的大小Feb 14 11:42:文件最后一次修改的时间txt:文件名
名词解释:
- 文件所有者:一般情况下,谁创建这个文件,他就是文件的所有者
- 文件所属组:一般情况下,文件所有者的主组,就是文件的所属组
- 其他用户:如果一个用户既不是文件所有者,也不在文件所属组内,那么他就是其他用户
权限数值对应关系:r=4 w=2 x=1
4. chmod 修改权限——符号法
命令格式:
chmod who(u,g,o) what(+,-,=) which(r,w,x) 文件路径
示例:
chmod o=rw 1.txt # 给其他用户精确赋予rw权限
chmod u+rw 文件名称 # 给文件所有者加上rw权限
chmod u-r Desktop # 去掉文件所有者的读权限
对文件 anaconda-ks.cfg 的文件所属组加上 rw 权限,现象如下图:

参数说明:
- who:代表要修改的用户——
u(文件所有者)、g(文件所属组)、o(其他用户)、a(所有用户) - what:要进行的操作——
+(赋予权限)、-(去除权限)、=(精确赋予权限) - which:代表要操作的权限——
r、w、x、X(只针对目录赋予执行权限,普通文件不会赋予执行权限)

递归设置权限:
如果想要给目录下所有的文件设置权限,可以使用 -R 选项:
chmod -R 权限设置 目录路径



题目:创建一个 B 目录,然后在 B 目录下创建文件 2.txt、3.txt、4.txt 同时创建目录 C,想通过一个命令给 A 目录下所有文件的所有用户 w 权限。
5. chmod 修改权限——数值法
chmod ### 文件路径
每一个 # 代表一个数值:第一个 # 代表文件所有者的权限,第二个 # 代表文件所属组的权限,第三个代表其他用户的权限。
数值表示法:将 rwx 转换成对应的数值,有此权限就加上对应的值。r=4 w=2 x=1,没有权限就是 0。
000(rwx) → 2的2次方 2的1次方 2的0次方 → 4 2 1
示例:
chmod 761 1.txt # 等价于 u+rwx g+rw o+x
示例分析:
-rw-rw-r-- root root 1.txt
文件所有者的权限为 rw- = 4+2+0 = 6
文件所属组的权限为 rw- = 4+2+0 = 6
其他用户的权限为 r-- = 4+0+0 = 4
即:chmod 664 1.txt

练习:在目录 jiance 下创建文件 1.html、2.html、3.html,要求目录的所有用户权限为读写执行,此目录下的 1.html 文件所有者有写、执行的权限,1.html 其他用户有读写权限,1.html 文件所属组只有读的权限。
分析:
chmod 346(所有者=3,所属组=4,其他=6)




四、chown 修改文件所属关系
修改文件的所有者和所属组(-R 可以对目录进行批量修改):
chown 文件所有者 文件路径名 # 修改文件的所有者
chown :文件所属组 文件路径 # 修改文件的所属组
chown 文件所有者:文件所属组 文件路径 # 同时修改文件的所有者和所属组



五、特殊权限
特殊权限是除了 rwx 三种基础权限以外的第四种权限。
| 特殊权限 | 文件 | 目录 |
|---|---|---|
| suid(u+s) | 设置了 suid 权限的文件,在文件所有者的执行位置上用 s 代表,执行权限用 s 的大小写表示:小写 s 代表有执行权限,大写 S 代表没有执行权限。注意:suid 一般设置的文件对象为二进制文件(命令文件),设置 suid 后,运行命令时不会以运行命令的用户身份执行,而是以文件的所有者的用户身份来执行此命令。 | 无影响 |
| sgid(g+s) | 设置了 sgid 权限的文件,在文件所属组的执行位置上用 s 代表,小写 s 代表有执行权限,大写 S 代表没有执行权限。设置 sgid 后,运行命令时以文件的所属组的身份来执行此命令。 | 设置了 sgid 权限的目录,在此目录下创建的新目录或文件会自动继承该目录的所属组 |
| sticky(o+t) | 无效果 | 设置了 sticky 权限的目录,在其他用户的执行权限位置上用 t 表示,t 代表有执行权限,T 代表没有执行权限。凡是设置 sticky 权限的目录,除了 root 用户和文件的所有者以外,其他用户没有权限删除该文件。目的:防止用户误删文件。 |
示例:
chmod g+s 1.txt

针对目录的文件所属组设置第四种权限,在该目录下创建新的目录会自动继承,例子如下:

特殊权限的数值表示
suid=4 sgid=2 sticky=1
加上特殊权限后,### 就变成 ####,第一位即为特殊权限位。
chmod 1740 1.txt # 1代表sticky位(这里只是格式示例)
六、find 根据文件权限查找
find 查找范围 -perm u=rwx # 精确查找:文件所有者是rwx权限,所属组和其他用户没有权限
find 查找范围 -perm -u=rw # 模糊查找:文件所有者含有rw权限,所属组和其他用户权限没有要求
find 查找范围 -perm -g=r # 文件所属组含有r权限
find 查找范围 -perm g=r # 文件所属组等于r权限(精确)

find / -perm -u=rwx

示例:在 /etc 查找含有特殊权限 sgid 的文件
find /etc -perm -2000
find /etc -perm -g=s
七、umask 默认权限
默认权限:
- 文件的默认权限:
rw-r--r--(644) - 目录的默认权限:
rwxr-xr-x(755)
umask 计算原理(以 umask=022 为例):
777 = rwx rwx rwx
022 = --- -w- -w-
-----------------
文件 = rw- r-- r-- (644)
目录 = rwx r-x r-x (755)
- 目录的默认权限:由最大权限
rwxrwxrwx减去 umask 对应的权限 - 文件的默认权限:最大权限
rwxrwxrwx先去掉 x 变成rw-rw-rw-,然后再减去 umask 对应的权限
如何修改 umask 的值
临时修改:在终端中写入 umask 要减去的权限值
永久生效:
- 全局生效:将 umask 权限数值写入
/etc/bashrc - 针对某个用户生效:将 umask 权限数值写入
/home/用户名/.bashrc
八、IP 地址基础
- 子网掩码:
255.255.255.0等价于/24 - IP 地址:32 位的二进制,点分十进制的写法,分为 4 段,例如
192.168.1.1 192.168.1.0/24是一个网段;主机地址范围 0-255(0 和 255 不可以使用)- 网关的概念:例如
192.168.91.2;DNS:114.114.114.114 - IP 地址的获取方式:静态(手工配置)、动态 IP(自动获取 DHCP)

从上图可以得知此虚机所属网段:192.168.91.0/24,网关是:192.168.91.2
IP 地址的相关解释说明
以 192.168.182.131 为例:
IP 地址分为 2 个部分:第一部分网络地址(同一网段下主机的网络地址是一样的,由掩码确定),第二部分主机地址(本例中主机地址范围为 0~255)。
不能使用的地址:
192.168.182.0:代表子网地址,不能使用192.168.182.255:代表广播地址,不能使用192.168.182.1:被 vmnet8 虚拟网卡使用了192.168.182.2:被网关用掉了- 还有冲突的地址不能使用
九、网络管理(nmcli、nmtui)
配置 IP 之前首先明白:
- IP 地址的获取方式:是动态 IP 还是静态 IP
- 静态 IP:首先要考虑网关是多少(
192.168.91.2),然后子网掩码多少(24),根据网关和子网掩码配置 IP 地址,然后还要 DNS 服务器 IP 地址(114.114.114.114)
网关、子网以及子网掩码的查看:

1. nmtui 图形化配置
相关信息清楚之后进行 IP 的配置:
nmtui



配置完成之后退出然后进行激活,激活指令如下:
nmcli connection up ens160 # 激活网络配置(如果网卡名称是两个单词以上需要用到"")


注意:地址配置成功之后,在使用 VM 虚拟机的情况下,如果 Windows 能正常上网,而虚拟机无法上网,那么首先要考虑 VM 相关的服务有没有开启(任务管理器 → 服务 → 右击打开服务 → 找到 vm 开头的服务,确定是否都在运行状态)。
2. 常用网络查看命令
ping 网络地址 # 查看网络的连通性
ifconfig 或者 ip addr # 查看ip地址
nmcli device # 查看网络设备
nmcli connection show # 查看网络连接信息
route -n # 在联网状态下查看路由表信息(查看网关)
在红帽 9 中用来管理网络的命令是
nmcli。

3. 纯命令行进行 IP 配置
(1)动态 IP 地址配置:
nmcli connection add con-name "0215" type ethernet ifname ens160 autoconnect yes
add:添加网络连接con-name:网络连接名type:网络的类型ifname:对应的网卡名autoconnect:启用自动连接
(2)静态网络连接的设置:
nmcli connection add con-name "0215s" type ethernet ifname ens160 autoconnect yes \
ipv4.method manual ipv4.addresses 192.168.182.166/24 \
ipv4.gateway 192.168.182.2 ipv4.dns 114.114.114.114
ipv4.method:设置 IP 地址获取方式(manual 为手动/静态)ipv4.addresses:设置 IP 地址ipv4.gateway:设置网关地址ipv4.dns:设置 DNS 地址
(3)修改网络连接信息:
注意:修改网络连接用的是
modify
nmcli connection modify 0215 ipv4.addresses 192.168.182.167/24
(4)删除网络连接:
nmcli connection delete 0215
注意:如果出现多个网络连接名一样,那么可以使用 uuid 进行删除。
(5)查看网络连接的具体信息(可以利用 grep 进行内容的筛选):
nmcli connection show 网络连接名 | grep "ipv4"
补充:直接修改配置文件
/etc/NetworkManager/system-connections/ens160.nmconnection
# 直接修改连接的配置信息
# 记住改完之后要进行 nmcli connection reload 配置的重新导入
# 然后激活配置文件 nmcli connection up 连接名
十、课后练习(附参考答案)
练习1:清理删除用户后的残留文件
创建用户 user02,uid 为 6666,密码为 2,然后删除时,忘记使用
-r,现在要求把残留的文件找出并删除。
# 1. 创建用户,指定uid为6666,密码为2
useradd -u 6666 user02
echo 2 | passwd --stdin user02
# 2. 误操作:删除用户时忘记加 -r(残留家目录和邮件池)
userdel user02
# 3. 查找残留文件(用户已删,属主会显示为UID而不是用户名)
find / -uid 6666 2>/dev/null
# 4. 手动删除残留(家目录 + 邮件池是重点)
rm -rf /home/user02
rm -rf /var/spool/mail/user02
要点:
userdel -r会连同家目录和邮件池一起删除;忘了-r就得用find / -uid <uid>把无主文件揪出来手动清理。
练习2:数值法修改权限
用数值法,修改 1.txt 的权限,要求文件所有者有 rwx,文件所属组只有 r 的权限,其他用户没有任何权限。
chmod 740 1.txt
# 所有者 rwx = 4+2+1 = 7
# 所属组 r = 4
# 其他用户 无 = 0
练习3:无法交互登录的用户提权操作
创建用户 user03,该用户无法以交互的方式登录终端。然后尝试使用
su -命令切换到此用户,如果失败,那么改为可登录的方式。密码为 1,切换到 user03 用户,要求在此用户下,创建用户 user04。
# 1. 创建用户,指定shell为 /sbin/nologin(无法交互登录)
useradd -s /sbin/nologin user03
echo 1 | passwd --stdin user03
# 2. 尝试切换 —— 失败,提示:This account is currently not available.
su - user03
# 3. 改为可登录的shell
usermod -s /bin/bash user03
# 4. 再次切换 —— 成功
su - user03
# 5. 在user03下创建user04(普通用户需先用visudo授权sudo)
sudo useradd user04
要点:能否登录由
/etc/passwd中该用户的登录 shell 决定,/sbin/nologin拒绝交互登录;普通用户创建用户必须借助sudo提权。
十一、控制启动流程(补充内容)
对应 RHCSA 核心考点:RHEL 启动过程、systemd target、重置丢失的 root 密码。
1. RHEL 的启动过程
完整启动链条如下:
- 通电自检:计算机通电,系统固件(BIOS 或者 UEFI)进行开机自检(POST),并开始进行部分硬件的初始化工作。
- 搜索启动设备:系统固件按照一定的顺序在可能存放可启动环境的设备中按序查找。
- 加载 boot loader:系统固件在可启动的设备(一般为硬盘)中读取 boot loader,然后将系统控制权转交给它。RHEL 及大多数 Linux 系统使用的 boot loader 为 GRUB2(GRand Unified Bootloader version 2)。
- 显示启动菜单:GRUB2 根据配置文件加载并显示菜单,从中选择需要启动的内核或系统类型:
- BIOS 固件环境:
/boot/grub2/grub.cfg - UEFI 固件环境:
/boot/efi/EFI/redhat/grub.cfg grub.cfg文件是通过/etc/grub.d目录中的文件、/etc/default/grub配置文件以及grub2-mkconfig命令进行配置和生成的。
- BIOS 固件环境:
- 加载内核到内存:选择了合适的内核之后(默认 5 秒倒计时确认,超时自动选择默认值),boot loader 从磁盘中加载 kernel 和 initramfs 到内存中。initramfs 包含了启动时所有必要的硬件内核模块、初始化脚本等文件内容;在 RHEL9 中,initramfs 自身就是一个可用的 Linux 系统环境。
- 移交控制权给内核:boot loader 将系统控制权交给 kernel,同时传递内核选项以及 initramfs 文件位置。
- 启动 PID 1:kernel 加载 initramfs 中的硬件内核模块并初始化相关硬件。initramfs 中包含一个
/sbin/init程序,以 PID 为 1 进行启动。RHEL9 中/sbin/init实际上是指向 systemd 的链接。 - 挂载真实根文件系统:initramfs 中的 systemd 执行
initrd.target中的所有 unit,包括将磁盘上的根文件系统挂载在/sysroot目录下。 - 切换根目录:kernel 将根文件系统从 initramfs 切换到
/sysroot目录,开始访问硬盘上的数据,随后 systemd 使用磁盘中的 systemd 程序重新加载。 - 启动默认 target:重新从硬盘中启动的 systemd 查找系统默认 target(
/etc/systemd/system/default.target),启动该 target 中的所有 unit。所有 unit 启动完毕之后,RHEL 系统启动完成。
RHEL 的关机和重启:
poweroff # 实际是 systemctl poweroff 的软链接(底层调用)
reboot # 实际是 systemctl reboot 的软链接(底层调用)
2. systemd 中的 target
target 是用于包含或描述一组/多组具体 unit 的一种方式。RHEL9 中常见的 target:
| target | 含义 |
|---|---|
graphical.target | 支持多用户、图形化界面(需安装图形化程序)和命令行界面的访问与登录 |
multi-user.target | 支持多用户和命令行界面的访问与登录(绝大多数 Linux 系统正常运行的状态) |
rescue.target | 单用户模式(root 用户),系统基本初始化完成,仅支持 root 用户登录 |
emergency.target | initramfs 加载完毕,并将系统的根分区以只读模式挂载在根目录上 |
注意:只有
graphical.target和multi-user.target表示系统正常启动;rescue.target和emergency.target都表示系统并没有真正完整启动起来,只是激活了系统的部分功能。
查看 target 的依赖关系:
systemctl list-dependencies rescue.target
查看所有的 target(target 之间也可能存在包含关系):
systemctl list-units --type target --all
3. target 的切换与默认级别
# 热切换 target(切换过程中会根据设定启动或关闭相关unit,只有部分target支持热切换)
systemctl isolate graphical.target # 命令行环境 → 图形化界面环境
systemctl isolate multi-user.target # 图形化界面环境 → 纯命令行环境
# 查看/设置默认启动级别
systemctl get-default # 获取systemd默认激活的target
systemctl set-default multi-user.target
# 设置后系统重启就不再进入图形化界面,保持在纯命令行界面环境中
4. 重置丢失的 root 用户密码(RHCSA 必考)
背景:
- RHEL6 或更早版本:可以将系统启动到 runlevel 1 的运行时环境,此环境提供不需要输入密码的 root shell。
- RHEL9 中,最基本的级别为
emergency.target或rescue.target,这两个级别都需要 root 密码才能登录。 - RHEL7 或更高版本:可以通过 initramfs 环境进行特定操作,进入具有 root 权限的 shell 环境。
RHEL9 具体操作步骤:
① 重启系统,等待进入 boot loader 的菜单界面,使用方向键打断自动的倒计时选择。
② 将光标移动到特定的内核条目上:
注意:RHEL7/RHEL8 选择平常正常启动时的内核即可;RHEL9 中必须选择包含 rescue 的内核条目(RHEL9 中其他内核选项的 initramfs root shell 也被 root 密码加密了,需要提供 root 密码才能访问)。

③ 按 e 键进入 boot loader 对应的启动配置内容,在内核命令行(以 linux 开头的行)末尾添加 rd.break 选项——此选项会在 initramfs 移交控制权给硬盘上的 Linux 系统之前进行中断操作。

④ 按 Ctrl + X 组合键,按照修改之后的配置启动系统,系统在转移控制前中断;敲下回车,就可以获得 initramfs 提供的 root 用户身份的 shell。

⑤ 接下来进行相关操作:
# 1. 重新挂载 /sysroot 为可读写(默认是只读挂载)
mount -o remount,rw /sysroot
# 2. chroot 切换根目录到 /sysroot,等效于进入硬盘上的 Linux 系统
chroot /sysroot
# 3. 修改root密码
passwd root
# 4. 创建 /.autorelabel 文件(启用了SELinux的系统必须执行!
# 用于通知SELinux处理此阶段操作导致的文件context数据丢失)
touch /.autorelabel
# 5. 两次exit:先退出chroot环境,再退出initramfs环境
exit
exit

之后系统恢复正常启动流程,SELinux 会因为 /.autorelabel 文件进行必要的处理工作,等待系统自动重启或恢复到正常运行环境即可。
扩展:在这个环境中,不光可以重置 root 密码,还能:
- 将系统无法正常启动过程中生成的日志数据导出
- 修改
/etc/fstab中写错的挂载条目,确保系统可以正常启动前提:内核和对应的 initramfs 可以正常工作。如果此环境也无法使用,只能通过安装镜像中的 Live CD 模式(即安装 Linux 系统时使用的系统环境)来尝试救援系统。

134

被折叠的 条评论
为什么被折叠?



