RHCSA 第三天学习笔记

RHCSA 第三天学习笔记

内容简介:切换用户(su)、用户提权(sudo)、权限管理(chmod、chown、特殊权限)、umask 默认权限、网络配置(nmcli、nmtui)、控制启动流程与重置 root 密码。


一、切换用户(su)

切换用户的三种方式

1. su - 用户名(切换用户并加载环境配置,推荐)

bash 复制代码
[root@localhost ~]# su - user01
[user01@localhost ~]$ pwd
/home/user01

2. su 用户名(只切换用户,不加载环境配置)

bash 复制代码
[root@localhost ~]# su user01
[user01@localhost root]$ pwd
/root

3. ssh 用户名@localhost/主机名/主机IP

注意点1 :使用 su - 切换用户后,返回之前用户时,不要来回使用 su - 进行切换,而是要使用 exit 退出。
注意点2susu - 的区别------su 只是切换了用户,没有加载用户的配置环境 ;而 su - 不仅切换了用户,还加载了用户对应的配置环境 (主要指 bashrc 和 profile,即用户个人的配置文件 .bash_profile.bashrc)。

当普通用户权限不够时,可以使用 su - root 切换到管理员,然后由管理员执行。


二、用户提权 sudo

目的 :让普通用户获取到管理员的权限。

普通用户想要获取管理员权限,首先要由 root 用户授权,授权在 /etc/sudoers 或者 visudo 里进行添加:

bash 复制代码
[root@localhost ~]# vim /etc/sudoers   # 或者 visudo(配置文件里面有例子)

配置完提权对应的文件后,普通用户敲的命令前面加上 sudo 即可获取管理员权限。

配置说明:

  • 如果第二个 ALL 的位置上是 NOPASSWD: ALL,执行时不需要密码
  • 如果用户名前面有 %,那么代表的是

注意 :把用户加入到 root 组里面,并不会 获取到管理员的权限。如果想要让用户获取到管理员权限,应该加入到 wheel 组中。

图1:执行命令时不需要密码

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

普通用户使用管理员权限执行命令:

bash 复制代码
sudo 要执行的操作
sudo useradd user01    # 比如创建用户user01

强调 :普通用户是不能直接使用 sudo 来提权的,必须先由 root 用户将普通用户规范到 /etc/sudoers 文件或者 visudo 中,然后普通用户才可以使用 sudo 提权。

练习 :创建一个普通用户 jiance1,密码设置为 HOF1na2dhpuP,然后对 jiance1 做提权操作,在 jiance1 用户下创建一个用户 containers。


三、权限管理(基本权限)

权限管理是针对普通用户 来进行的,在权限管理中要首先确定用户,然后再看用户的权限

目的:通过对不同的用户设置不同的权限来限制某些用户的行为,从而保证系统的安全。

1. 查看用户针对文件的权限

bash 复制代码
ls -l
  • 文件所有者 u(user)
  • 文件所属组 g(group)
  • 其他用户 o(other)

文件类型标识(第一个字符):

标识 含义 示例
- 普通文件
d 目录
l 软链接
b 块设备 磁盘
c 字符设备 鼠标、键盘

2. rwx 三种基本权限

权限 普通文件 目录
r 读 能否查看文件里的内容 能否查看目录下文件信息,受影响的命令:ls
w 写 能否修改文件里的内容 能否在此目录下删除或者创建文件,受影响的命令:rmmkdirtouch
x 执行 运行脚本时需要用到执行权限,一般情况下为保证系统安全,普通文件不给执行权限 能否将此目录作为用户的当前工作目录,受影响的命令:cd。对于目录而言,一般会给目录赋予执行权限

如果用户没有相应的权限,那么就会用 - 代替。

3. ls -l 输出字段详解

-rw-r--r--. 1 root root 0 Feb 14 11:42 txt 为例:

  1. -rw-r--r--:权限位(文件所有者 rw-、文件所属组 r--、其他用户 r--
  2. .:ACL 权限的标识符,. 代表没有设置 acl 权限,+ 代表设置了 acl 权限
  3. 1:如果对象是普通文件,代表硬链接数 ;如果对象是目录,代表子目录数
  4. root:文件所有者
  5. root:文件所属组
  6. 0:文件的大小
  7. Feb 14 11:42:文件最后一次修改的时间
  8. txt:文件名

名词解释:

  1. 文件所有者:一般情况下,谁创建这个文件,他就是文件的所有者
  2. 文件所属组:一般情况下,文件所有者的主组,就是文件的所属组
  3. 其他用户:如果一个用户既不是文件所有者,也不在文件所属组内,那么他就是其他用户

权限数值对应关系:r=4 w=2 x=1

4. chmod 修改权限------符号法

命令格式:

bash 复制代码
chmod who(u,g,o) what(+,-,=) which(r,w,x) 文件路径

示例:

bash 复制代码
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 :代表要操作的权限------rwxX(只针对目录赋予执行权限,普通文件不会赋予执行权限)

递归设置权限:

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

bash 复制代码
chmod -R 权限设置 目录路径

题目:创建一个 B 目录,然后在 B 目录下创建文件 2.txt、3.txt、4.txt 同时创建目录 C,想通过一个命令给 A 目录下所有文件的所有用户 w 权限。

5. chmod 修改权限------数值法

bash 复制代码
chmod ### 文件路径

每一个 # 代表一个数值:第一个 # 代表文件所有者的权限,第二个 # 代表文件所属组的权限,第三个代表其他用户的权限。

数值表示法 :将 rwx 转换成对应的数值,有此权限就加上对应的值。r=4 w=2 x=1,没有权限就是 0。

scss 复制代码
000(rwx)  →  2的2次方  2的1次方  2的0次方  →  4  2  1

示例:

bash 复制代码
chmod 761 1.txt    # 等价于 u+rwx g+rw o+x

示例分析:

ini 复制代码
-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 可以对目录进行批量修改):

bash 复制代码
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 用户和文件的所有者以外,其他用户没有权限删除该文件。目的:防止用户误删文件。

示例:

bash 复制代码
chmod g+s 1.txt

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

特殊权限的数值表示

ini 复制代码
suid=4  sgid=2  sticky=1

加上特殊权限后,### 就变成 ####第一位即为特殊权限位

bash 复制代码
chmod 1740 1.txt    # 1代表sticky位(这里只是格式示例)

六、find 根据文件权限查找

bash 复制代码
find 查找范围 -perm u=rwx     # 精确查找:文件所有者是rwx权限,所属组和其他用户没有权限
find 查找范围 -perm -u=rw     # 模糊查找:文件所有者含有rw权限,所属组和其他用户权限没有要求
find 查找范围 -perm -g=r      # 文件所属组含有r权限
find 查找范围 -perm g=r       # 文件所属组等于r权限(精确)
bash 复制代码
find / -perm -u=rwx

示例:在 /etc 查找含有特殊权限 sgid 的文件

bash 复制代码
find /etc -perm -2000
find /etc -perm -g=s

七、umask 默认权限

默认权限:

  • 文件的默认权限:rw-r--r--(644)
  • 目录的默认权限:rwxr-xr-x(755)

umask 计算原理(以 umask=022 为例):

ini 复制代码
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 要减去的权限值

永久生效:

  1. 全局生效 :将 umask 权限数值写入 /etc/bashrc
  2. 针对某个用户生效 :将 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.2DNS114.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 之前首先明白:

  1. IP 地址的获取方式:是动态 IP 还是静态 IP
  2. 静态 IP:首先要考虑网关是多少(192.168.91.2),然后子网掩码多少(24),根据网关和子网掩码配置 IP 地址,然后还要 DNS 服务器 IP 地址(114.114.114.114

网关、子网以及子网掩码的查看:

1. nmtui 图形化配置

相关信息清楚之后进行 IP 的配置:

bash 复制代码
nmtui

配置完成之后退出然后进行激活,激活指令如下:

bash 复制代码
nmcli connection up ens160    # 激活网络配置(如果网卡名称是两个单词以上需要用到"")

注意:地址配置成功之后,在使用 VM 虚拟机的情况下,如果 Windows 能正常上网,而虚拟机无法上网,那么首先要考虑 VM 相关的服务有没有开启(任务管理器 → 服务 → 右击打开服务 → 找到 vm 开头的服务,确定是否都在运行状态)。

2. 常用网络查看命令

bash 复制代码
ping 网络地址                # 查看网络的连通性
ifconfig 或者 ip addr        # 查看ip地址
nmcli device                 # 查看网络设备
nmcli connection show        # 查看网络连接信息
route -n                     # 在联网状态下查看路由表信息(查看网关)

在红帽 9 中用来管理网络的命令是 nmcli

3. 纯命令行进行 IP 配置

(1)动态 IP 地址配置:

bash 复制代码
nmcli connection add con-name "0215" type ethernet ifname ens160 autoconnect yes
  • add:添加网络连接
  • con-name:网络连接名
  • type:网络的类型
  • ifname:对应的网卡名
  • autoconnect:启用自动连接

(2)静态网络连接的设置:

bash 复制代码
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

bash 复制代码
nmcli connection modify 0215 ipv4.addresses 192.168.182.167/24

(4)删除网络连接:

bash 复制代码
nmcli connection delete 0215

注意:如果出现多个网络连接名一样,那么可以使用 uuid 进行删除。

(5)查看网络连接的具体信息(可以利用 grep 进行内容的筛选):

bash 复制代码
nmcli connection show 网络连接名 | grep "ipv4"

补充:直接修改配置文件

bash 复制代码
/etc/NetworkManager/system-connections/ens160.nmconnection
# 直接修改连接的配置信息
# 记住改完之后要进行 nmcli connection reload 配置的重新导入
# 然后激活配置文件 nmcli connection up 连接名

十、课后练习(附参考答案)

练习1:清理删除用户后的残留文件

创建用户 user02,uid 为 6666,密码为 2,然后删除时,忘记使用 -r,现在要求把残留的文件找出并删除。

bash 复制代码
# 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 的权限,其他用户没有任何权限。

bash 复制代码
chmod 740 1.txt
# 所有者 rwx = 4+2+1 = 7
# 所属组 r   = 4
# 其他用户 无 = 0

练习3:无法交互登录的用户提权操作

创建用户 user03,该用户无法以交互的方式登录终端。然后尝试使用 su - 命令切换到此用户,如果失败,那么改为可登录的方式。密码为 1,切换到 user03 用户,要求在此用户下,创建用户 user04。

bash 复制代码
# 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 的启动过程

完整启动链条如下:

  1. 通电自检:计算机通电,系统固件(BIOS 或者 UEFI)进行开机自检(POST),并开始进行部分硬件的初始化工作。
  2. 搜索启动设备:系统固件按照一定的顺序在可能存放可启动环境的设备中按序查找。
  3. 加载 boot loader :系统固件在可启动的设备(一般为硬盘)中读取 boot loader,然后将系统控制权转交给它。RHEL 及大多数 Linux 系统使用的 boot loader 为 GRUB2(GRand Unified Bootloader version 2)。
  4. 显示启动菜单 :GRUB2 根据配置文件加载并显示菜单,从中选择需要启动的内核或系统类型:
    • BIOS 固件环境:/boot/grub2/grub.cfg
    • UEFI 固件环境:/boot/efi/EFI/redhat/grub.cfg
    • grub.cfg 文件是通过 /etc/grub.d 目录中的文件、/etc/default/grub 配置文件以及 grub2-mkconfig 命令进行配置和生成的。
  5. 加载内核到内存 :选择了合适的内核之后(默认 5 秒倒计时确认,超时自动选择默认值),boot loader 从磁盘中加载 kernelinitramfs 到内存中。initramfs 包含了启动时所有必要的硬件内核模块、初始化脚本等文件内容;在 RHEL9 中,initramfs 自身就是一个可用的 Linux 系统环境。
  6. 移交控制权给内核:boot loader 将系统控制权交给 kernel,同时传递内核选项以及 initramfs 文件位置。
  7. 启动 PID 1 :kernel 加载 initramfs 中的硬件内核模块并初始化相关硬件。initramfs 中包含一个 /sbin/init 程序,以 PID 为 1 进行启动。RHEL9 中 /sbin/init 实际上是指向 systemd 的链接。
  8. 挂载真实根文件系统 :initramfs 中的 systemd 执行 initrd.target 中的所有 unit,包括将磁盘上的根文件系统挂载在 /sysroot 目录下。
  9. 切换根目录 :kernel 将根文件系统从 initramfs 切换到 /sysroot 目录,开始访问硬盘上的数据,随后 systemd 使用磁盘中的 systemd 程序重新加载。
  10. 启动默认 target :重新从硬盘中启动的 systemd 查找系统默认 target(/etc/systemd/system/default.target),启动该 target 中的所有 unit。所有 unit 启动完毕之后,RHEL 系统启动完成。

RHEL 的关机和重启:

bash 复制代码
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.targetmulti-user.target 表示系统正常启动rescue.targetemergency.target 都表示系统并没有真正完整启动起来,只是激活了系统的部分功能。

查看 target 的依赖关系:

bash 复制代码
systemctl list-dependencies rescue.target

查看所有的 target(target 之间也可能存在包含关系):

bash 复制代码
systemctl list-units --type target --all

3. target 的切换与默认级别

bash 复制代码
# 热切换 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.targetrescue.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

接下来进行相关操作:

bash 复制代码
# 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 系统时使用的系统环境)来尝试救援系统。

相关推荐
风曦Kisaki1 小时前
Kubernetes(K8s)笔记Day04:控制器(ReplicaSet 与Deployment),滚动更新及回滚,滚动更新策略,Pod 的 DNS 策略
linux·运维·笔记·docker·容器·kubernetes
code_whiter1 小时前
初阶linux2环境基础开发工具完整教程
linux
数聚天成DeepSData1 小时前
外贸海关进出口数据去哪免费下载?从统计到明细的查找指南
linux·服务器·开发语言·前端·网络·人工智能·自然语言处理
Huangjin007_1 小时前
【Linux 系统篇(十)】基础开发工具(五) —— 第一个系统程序 - 进度条
linux·运维·服务器
时空无限2 小时前
linux mellanox 网卡队列 irq rps 相关
linux·运维
kdxiaojie2 小时前
Linux 驱动研究 —— V4L2 (14)
linux·运维·笔记·学习
IMPYLH2 小时前
HTML 的 <dl> 元素
linux·windows·html
如若1232 小时前
Ubuntu 无 sudo 安装花生壳并实现 SSH 内网穿透:Conda 环境部署、冲突排查与自动启动
linux·运维·ubuntu·ssh·内网穿透
承渊政道3 小时前
Linux系统学习【掌握Ext系列⽂件系统的相关内容】
linux·运维·学习·文件系统·存储结构·inode