题目描述
将第二台机器的 ROOT 密码设置为 flectrag
, 您需要获得系统访问权限才能进行此操作。
核心命令[?]
e rd.break console=tty0 Ctrl+X mount -o remount,rw /sysroot/ chroot /sysroot/ echo flectrag | passwd --stdin root touch /.autorelabel exit reboot
详细解析[?]
破解 ROOT 密码的过程需要在系统引导阶段进行,由于在这个过程中系统尚未完全启动,因此无法通过 SSH 登录到系统中进行操作,只能通过控制台完成对系统的控制。
首先,找到考试环境中的 “VM Control”, 选择第 02 台机器(在编写本文时使用的实验环境里,第二台机器的名字为 “node2”)并点击 “OK” 按钮以启动第二台机器的控制面板,如图 01 所示:
之后选择 “Console_node2_VM”, 并点击 “OK” 按钮以打开第二台机器的控制台,如图 02 所示:
由于之前已经启动过实验环境,所以这里我们会看到第二台机器已经完成启动并提示输入用户名和密码以完成用户登录。如前面所述,由于破解 ROOT 密码需要在系统完成启动之前的引导过程中完成,因此,我们需要在显示控制台的窗口上点击 “Send key” 按钮,之后点击 “Ctrl+Alt+Del”, 这样就可以向第二台机器发送用于执行重启操作的 “Ctrl+Alt+Del” 快捷键了,如图 03 所示:
之后,在引导程序提示选择启动项的时候,选择默认的第一个启动项,并按下键盘上的 “e” 键(这个操作一定要快速完成,否则引导程序在等待几秒之后便会激活默认的第一个启动项并继续接下来的引导过程),如图 04 所示:
注:
[1]. 在 GRUB (GRand Unified Bootloader)系统启动引导时会有一个启动倒计时,倒计时结束时被选中的系统就会被启动,这个时候,我们只需要在键盘上按下除了“回车键 Enter”之外的任意一个按键就可以结束该倒计时,使系统启动引导程序暂停执行;
[2]. 在 GRUB 启动引导界面,一般有两个选项,第一行(包含 Linux 的内核版本号 “4.18.0-193.e18.x86_64” 和 Redhat 的发行版编号 “8.2” 以及 Redhat 的发行版名称 “Ootpa”——不同版本的 Redhat 系统中,此处显示的信息会有一些差别)用于正常启动 Redhat 操作系统,我们在执行下一步操作时也要选中这一行。第二行(包含 “0-rescue-“)用于启动 Redhat 系统的救援模式,执行系统修复。(除此之外,如果当前计算机上还安装有其他操作系统,这 GRUB 界面还会显示其他可供启动的操作系统。*)。
按下 “e” 键之后就进入到了启动项编辑界面,在这里编辑内核参数。将光标定位到 linux ($root)...
这一行的末尾(如果键盘上有 “End” 键,那么只需要按下该键即可将光标定位到这一行的末尾,当然,也可以使用方向键将光标移动到这一行的末尾。),空一个格后写入如下内容:
rd.break console=tty0
注:
[1].
rd.break
和console=tty0
这两个参数调换位置写入也可以可以的,例如写成这样:console=tty0 rd.break
.
内核参数编辑完成后,如图 05 所示:
之后,按下 “Ctrl+X” 组合键继续接下来的启动过程。
之后,在 switch_root:/#
提示符后面输入 mount
命令可以发现,此时的系统根目录 /sysroot/
并没有写入权限,如图 06 所示:
注:
[1]. 使用
cat /proc/mounts
命令也可以查看/sysroot/
目录的读写权限;[2]. 图 06 中的
ro
即表示 “read only(只读)”。
但是,我们修改 ROOT 用户的密码是需要向该目录下的文件写入数据的,因此,我们需要使用 mount
命令重新挂载 /sysroot/
目录并赋予其读写权限:
mount -o remount,rw /sysroot/
注:
[1].
mount
命令后面跟的-o
参数用于指定挂载文件系统时所使用的选项,例如remount
和rw
;[2].
remount
选项用于重新挂载已经挂载了的文件系统;[3].
rw
选项表示以“读(read)写(write)”方式挂载文件系统;[4].
/sysroot/
就是mount
命令要操作的目标文件系统。
之后,再次执行 mount
命令即可发现,/sysroot/
目录已经具有写入权限了,如图 07 所示:
接着,使用 chroot
命令将 /sysroot/
目录变成当前的根目录:
chroot /sysroot/
上述命令执行之后,光标前面的提示信息会由 switch_root:/#
变更为 sh-4.4#
.
接下来,我们就可以执行如下命令修改 ROOT 用户的密码了。
我们可以使用如下命令为 ROOT 用户设置密码(其中的 flectrag
就是题目要求我们设置的 ROOT 用户密码):
echo flectrag | passwd --stdin root
注:
[1]. 注意
passwd
命令后面跟的参数,写法是--stdin
, 而不是-stdin
;[2]. “stdin” 是 “standard input” 的简写,即“标准输入”。
当然,我们也可以使用如下方式为 ROOT 用户设置密码(使用下面的方式设置密码的时候,由于不能以明文方式看到输入的密码,所以有可能造成误操作,但在生产环境中,使用下面的方式设置密码具有更高的安全性):
passwd root
之后,将要设置的密码 flectrag
输入两遍即可。
上述两种设置 ROOT 用户密码的方式在执行成功之后都会返回如下信息:
passwd: all authentication tokens updated successfully.
接着,我们需要在根目录 /
下创建一个名为 .autorelabel
的隐藏文件,以便在系统重启的时候给 SELinux 的文件系统自动重新打文件安全标签(“autorelabel” 即 “auto re label”, 自动重打标签)
touch /.autorelabel
!!!注意 !!!
创建的是 “autorelabel”, 而不是 “autorelable”.
为了可靠起见,可以使用如下命令做一下同步,当然,这一步操作并不是必须的:
sync
退回到上一级目录:
exit
执行完上述命令之后,光标前面的提示信息会由 sh-4.4#
变到 switch_root:/#
.
最后,重启系统:
reboot
接下来就慢慢等待系统自动执行完毕接下来的操作即可。待系统重新完成开机之后,可以尝试使用上面设置的密码登录实验环境中的第二台机器,以作验证,并未接下来的题目做准备。