RHCSA8-EX200 试题解析记录

RHCSA8-EX200


更新日志

勘误:leancode@189.cn

建议完成时间:40分钟

合计共 25 题,已核验 25 题。

【更新】修正了几处错误,语言表达更为严谨

【更新】新增的题型


前置信息

您的机器是 domain10.example.com 域的一个成员。 domain10.example.com 域内的所有系统在 172.20.10.0/255.255.255.0 子网内,并且所有在这个子网内的系统都属于 domain10.example.com 域。

虚拟机的网络配置应该如下:
主机名: system1.domain10.example.com
IP地址: 172.24.10.150
子网掩码: 255.255.255.0
网关 :172.24.10.100
名称服务: 172.24.10.250

虚拟机的 root 密码是 migwhisk

请确保所有修改和服务配置在重新启动之后仍然能够生效,而无需人工干预。所有考试用的虚拟机实例必须能重启之后进入正确的多用户级别,而无需人工协助。如果考试用的虚拟机系统不能启动或不能正常启动,将被评零分。

Red Hat Enterprise Linux 操作系统版本对应的分发包可以通过YUM在下面的链接中找到: http://repo.domain1.example.com/rhel80

Root 密码破解

  • 在 System1 和 System2 上完成

image-20230222141211871

  • 在此界面光标移动至第一行 摁下 E

image-20230222141359818

  • 将光标标记到第四行末尾插入 console=tty0 rd.break 按下 Ctrl + X 进行启动

image-20230222141642083

引导至如下界面

image-20230222141843171

1
2
3
4
5
6
7
mount -orw,remount /sysroot	# 以读写形式重挂载系统根分区 
chroot /sysroot # 修改 root 家目录
echo 1104 | passwd --stdin root # 修改 root 密码
touch /.autorelabel # 重新标记 SELinux 标签
exit
exit
# 等待标签修改完成后,自动重启

image-20230222142535884

配置网络和主机名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看当前网络配置文件和网卡设备
nmcli c s
nmcli d s
# 直接修改现有配置文件
nmcli connection mod "Wired connection 1" ipv4.adderess 172.24.10.150/24 ipv4.gateway 172.24.10.100 ipv4.dns 172.24.10.250 method man autoconnect yes
nmcli con up "Wired connection 1"

# or 新增配置文件
nmcli con add con-name static ifname ens160 type ethernet ipv4.addresses 172.24.10.150/24 ipv4.gateway 172.24.10.100 ipv4.dns 172.24.10.250 ipv4.method man autoconnect yes
nmcli con up static

ip a show ens160
# 修改主机名
hostnamectl set-hostname system1.domain.example.com
# 验证
hostnamectl

配置 YUM 仓库

YUM 存储库已可以从 http://repo.domain10.example.com/rhel80/BaseOShttp://repo.domain10.example.com/rhel80/AppStream 使用配置您的系统,以将这些位置用作默认存储库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
> cat > /etc/yum.repo.d/redhat.repo <<EOF
[BaseOS]
name = BaseOS
enabled = 1
gpgcheck = 0
baseurl = http://repo.domain10.example.com/rhel80/BaseOS

[AppStream]
name = AppStream
enabled = 1
gpgcheck = 0
baseurl = http://repo.domain10.example.com/rhel80/AppStream
EOF
> yum clean all
> yum makecache
> yum repolist

调试 SELINUX

非标准端口 82 上运行的 Web 服务器在提供内容时遇到问题。根据需要调试并解决问题,使其满足以下条件:

  1. 系统上的 Web 服务器能够提供 /var/www/html 中所有现有的 HTML 文件(注:不要删除或以其他方式改动现有的文件内容)
  2. Web 服务器在端口 82 上提供此内容
  3. Web 服务器在系统启动时自动启动
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
# 修改配置文件(修改如下行)
> grep SELINUX /etc/selinux/config
SELINUX=enforcing
# 修改即时 selinux 状态
> setenforce 1
# 安装提供 semanage 的软件包
> yum provides semanage
> yum -y install policycoreutils-python-utils
# 修改安全上下文
> semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
# 即时恢复安全上下文
> restorecon -RvF /var/www/html/
> semanage port -l | grep http
# 分配端口 82
> semanage port -a -t http_port_t -p tcp 82
# 启动服务
> systemctl enable httpd
> systemctl restart httpd
# 本机自测试
> curl localhost:82
# 防火墙放行端口
firewall-cmd --add-port=82/tcp
# 永久
firewall-cmd --add-port=82/tcp --per
# 在system2 再次检查⼀下
> curl 172.24.10.150:82

创建用户账户

创建下列用户、组和组成员资格:

  1. 创建 sysmgrs 组
  2. 创建用户 natasha ,作为次要组从属于 sysmgrs
  3. 创建用户 harry ,作为次要组从属于 sysmgrs
  4. 创建用户 sarah ,无权访问系统上的交互式 Shell 且不是 sysmgrs 的成员
  5. natasha,harry,sarah 的密码都是 123
1
2
3
4
5
6
7
groupadd sysmgrs
useradd natasha -G sysmgrs
useradd harry -G sysmgrs
useradd sarah -s /sbin/nologin
echo 123 | passwd --stdin natasha
echo 123 | passwd --stdin harry
echo 123 | passwd --stdin sarah

配置 Cron 计划任务

配置 cron 作业,该作业每隔 5 分钟运行并执行以下命令:

  • logger "EX200 in progress",以用户 natasha 身份运行
  • 14:23分执行 /bin/echo enjia
1
2
3
4
5
6
7
8
# 启动服务
> systemctl enable crond --now
# 添加计划任务
> crontab -e -u natasha
*/5 * * * * logger "EX200 in progress"
23 14 * * * /bin/echo enjia
# 列出任务
> crontab -l -u natasha

创建协作目录

  1. 创建目录 /home/managers
  2. /home/managers 的所属组是 sysmgrs
  3. 目录可以被组成员读取,写入,访问,任何其他用户无权限
  4. /home/managers 中创建的文件自动将组所有权设置到 sysmgrs 组
1
2
3
4
5
6
7
8
9
10
11
12
13
# 创建目录
mkdir /home/managers
# 修改用户组
chown :sysmgrs /home/managers
# or
chgrp sysmgrs /home/managers
# 修改权限
chmod g=rwx,p=--- /home/managers
# setGID
chmod g+s /home/managers
# 验证
ll -d /home/managers
# As drwxrws---

配置 NTP

配置 NTP 服务器为 host.domain10.example.com

1
2
3
4
5
6
7
8
9
10
11
# 添加行
cat >> /etc/chrony.conf <<EOF
server host.domain10.example.com iburst
EOF
# 重启服务
systemctl restart chronyd
systemctl enable chronyd
# 验证同步(可能不会立即看到效果)
chronyc sources
# 不解析域名(更快)
chronyc -n sources

配置 autofs

以按照如下所述自动挂载远程用户的主目录:

  1. 挂载远程用户的主目录
  2. host.domain10.example.com NFS /rhel 此文件系统包含用户 user1 预配置的主目录
  3. user1 的主目录是 xx.example.com:/rhel/user1
  4. user1 的主目录应自动挂载到本地 /rhel 下的 /rhel/user1
  5. 主目录必须可提供其用户写入
  6. user1 的密码是 123
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安装软件支持
yum -y install nfs-utils autofs
# 编辑 auto.master 配置文件,让 /rhel 的 autofs 主目录根据 /etc/auto.user1 配置文件进行自动挂载
cat >> /etc/auto.master <<EOF
/rhel /etc/auto.user1
EOF
# 挂载点是 user1,以读写权限形式挂载,挂载的文件系统是 host.domain10.example.com 提供的nfs共享,该共享是/rhel/user1
cat > /etc/auto.user1 <<EOF
user1 -rw host.domain10.example.com:/rhel/user1
EOF
# 重启服务
systemctl restart autofs
systemctl enable autofs
# 验证
su - user1
df -Th /rhel/user1

配置文件权限

将文件 /etc/fstab 复制到 /var/tmp/fstab。配置/ var/tmp/fstab 的权限以满足如下条件:

  1. 文件 /var/tmp/fstab 自 root 用户所有
  2. 文件 /var/tmp/fstab 属于组 root
  3. 文件 /var/tmp/fstab 应不能被任何人执行
  4. 用户 natasha 能够读取和写入 /var/tmp/fstab
  5. 用户 harry 无法写入或读取 /var/tmp/fstab
  6. 所有其他用户(当前或未来)能够读取 /var/tmp/fstab
1
2
3
4
5
6
cp /etc/fstab /var/tmp/fstab
chown root:root /var/tmp/fstab
chmod a-x /var/tmp/fstab
chmod o=r-- /var/tmp/fstab
setfacl -m u:natasha:rw /var/tmp/fstab
setfacl -m u:harry:--- /var/tmp/fstab

配置用户账户

配置用户 user2,其用户 ID 为 3388。此用户的密码应当为 123。

1
2
useradd user2 -u 3388
echo 123 | passwd --stdin user2

查找文件

  • 查找 owner 为 user3 的所有文件并将其副本放入 /root/dfiles 目录

  • 在/usr/bin目录下创建 repwis 脚本

  • 查找 /usr 目录下的所有文件并将文件名字的名字记录在 /root/myfiles/find-file1.txt 文本文件中 文件应该满足:

    • 大于3M

    • 小于5M

    • 该文件有setgid特殊权限

  • 查找/usr目录下的所有文件并将文件名字的名字记录在/root/myfiles/find-file2.txt文本文件中 文件应该满足:

    • 大于30k
    • 小于50k
    • 该文件有setuid特殊权限
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
# 创建目标
mkdir /root/dfiles
mkdir /root/myfiles
touch /root/myfiles/find-file1.txt
touch /root/myfiles/find-file2.txt
touch /usr/bin/repwis
#
find / -user user3 -exec cp -a {} /root/dfiles \;
# 题型1
cat > /usr/bin/repwis <<EOF
#!/bin/sh
find /usr -size +3M -size -5M -perm /g+s > /root/myfiles/find-file1.txt
find /usr -size +30k -size -50k -perm /u+s > /root/myfiles/find-file2.txt
EOF
# 题型2 (2选1)
cat > /usr/bin/repwis <<EOF
#!/bin/sh
find /usr -size +3M -size -5M -perm /g+s -exec basename {} > /root/myfiles/find-file1.txt
find /usr -size +30k -size -50k -perm /u+s -exec basename {} > /root/myfiles/find-file2.txt
EOF
# 赋权,执行脚本
chmod +x /usr/bin/repwis
/usr/bin/repwis
# 校验结果
ll /root/dfiles
cat /root/myfiles/find-file1.txt
cat /root/myfiles/find-file2.txt

查找字符串

查找文件 /usr/share/rhel.xml 中包含字符串 re 的所有行。将所有这些行的副本按原始顺序放在文件 /root/files 中

1
2
3
touch /root/files
grep re /usr/share/rhel.xml > /root/files
cat /root/files

文件归档

  • 创建一个名为 /root/books.tar.gz 的 tar 存档

    • 其应包含 /usr/local 的 tar 存档
  • 使用 gzip 进行压缩

  • 创建一个名为 /root/books.tar.bz2 的 tar 存档

    • 其应包含 /usr/local 的 tar 存档
    • 使用 bzip2 进行压缩
1
2
3
4
yum -y install tar bzip2
tar -zcvf /root/books.tar.gz /usr/local
tar -jcvf /root/books.tar.bz2 /usr/local
ll

调整逻辑卷大小

将逻辑卷 vo 及其文件系统的大小调整到 180MiB。确保文件系统内容保持不变。

注:分区大小很少与请求的大小完全相同,因此可以接受范围为 167MiB 到 193MiB的大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 检查逻辑卷
lvs
# 检查卷组
vgs
# 逻辑卷扩容
lvextend /dev/vg-exam/vo1 -L 180M
lvextend /dev/vg-exam/vo2 -L 180M
# 检查结果
lvs
# 查看当前挂载状态
df -Th /mnt/vo2 /mnt/vo1
# ext4 扩容
resize2fs /dev/vg-exam/vo1
# xfs 扩容
xfs_growfs /mnt/vo2
# 验证
df -Th /mnt/vo2 /mnt/vo1

添加交换分区

向您的系统添加一个额外的交换分区 567MiB。交换分区应在系统启动挂载。不要删除或以任何方式改动系统上的任何现有交换分区。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fdisk /dev/vdb
n p +567M t 82 w
ls /dev/vdb*
# 刷新分区表
partprobe
# 格式化
mkswap /dev/vdb2
# 永久挂载
cat >> /etc/fstab <<EOF
/dev/vdb2 swap swap defaults 0 0
EOF
# 重加载 swap
swapon -a
# 检查结果
free -m

创建逻辑卷

根据如下要求,创建新的逻辑卷

  1. 逻辑卷取名为 np
  2. 属于 npgroup 卷组
  3. 大小为 45 个扩展块
  4. npgroup 卷组中逻辑卷的扩展块大小应当为 20MiB
  5. 使用 ext3 文件系统格式化新逻辑卷
  6. 该逻辑卷应在系统启动时自动挂载到 /mnt/np下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 新建分区
fdsik /dev/vdb
n p 3 +1G w
#
ls /dev/vdb*
# 创建物理卷
pvcreate /dev/vdb3
# 创建逻辑卷组
vgcreate -s 20M nproup /dev/vdb3
vgs
# 创建逻辑卷
lvcreate -n np -l 45 npgroup
lvs
# 创建挂载点
mkdir /mnt/np
# 格式化
mkfs.ext3 /dev/npgroup/np
# 永久挂载
cat >> /etc/fstab <<EOF
/dev/npgroup/np /mnt/np ext3 defaults 0 0
EOF
# 查看挂载情况
mount -a
df -Th

创建 VDO 卷

根据如下要求,创建新的 VDO 卷:

  1. 使用未分区的磁盘
  2. 该卷的名称为 vdoname
  3. 该卷的逻辑大小为 80G
  4. 该卷使用 xfs文系统格式化
  5. 该卷挂载到 /vbark下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装软件
yum -y install vdo
# 创建 VDO
vdo create --name=vdoname --device=/dev/vdc --vdoLogicalSize=80G
# 格式化
mkfs.xfs /dev/mapper/vdoname
# 创建挂载点
mkdir /vbark
# 持续性挂载
cat >> /etc/fstab <<EOF
/dev/mapper/vdoname /vbark xfs _netdev 1 2
EOF
# 检查结果
mount -a
df -Th

配置系统调优

为您的系统选择建议的 tuned 配置集并将它设为默认设置

1
2
3
4
5
6
# 显示建议
tuned-adm recommend
# 调整配置集
tuned-adm profile virtual-guest
# 验证
tuned-adm list

容器(2合1)

配置容器以使其自启动

用 registry 服务器提供的 rlogserver 镜像创建容器

  • 容器仓库服务器为http://utility.example.com:5000

    • 用户名为 gls 密码为 glshxwyz
  • 配容器使其以 systemd 服务形式运行,并只面向用户 elovodo

    • elovodo 用户的密码为 1
  • 服务名为 container_logserver.service,并在系统重新引导后自动启动

配置持久存储

  • 配置主机系统日志使在系统重新引导后保留数据并自动重新启动日志记录服务
  • 将 /var/log/journal 目录及任何子目录下的任何 .journal 复制到 /home/elovodo/container_journal
  • 配置服务使其在主机系统重新引导后自动挂载 /home/elovodo/container_journal到 /var/log/journal
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
30
31
32
33
34
35
# 修改配置文件/etc/systemd/journald.conf 修改如下行
# 注意去掉前面的#
grep Storage /etc/systemd/journald.conf
# Storage=persistent
# 重启systemd-journald 服务
systemctl restart systemd-journald
# 文件复制
find /var/log/journal/ -name "*.journal" -exec cp -a {} /home/elovodo/container_journal/ \;
chown -R elovodo:elovodo /home/elovodo/container_journal/
# 以普通用户 SSH 登录(不能使用 su 替代)
ssh elovodo@localhost
# 登录容器的镜像仓库
podman login http://utility.example.com:5000
# 拉取镜像
podman search rlogserver
podman pull utility.example.com:5000/rlogserver
# 运行容器
podman run -itd -v /home/elovodo/container_journal:/var/log/journal:Z --name container_logserver utility.example.com:5000/rlogserver
# 创建普通用户 systemd 服务器配置文件目录
mkdir ~/.config/systemd/user -p
cd ~/.config/systemd/user
# 生成服务文件
podman generate systemd --new --files --name container_logserver
mv container-container_logserver.service container_logserver.service
# 停止并删除容器
podman stop container_logserver
podman rm container_logserver
# 开启普通⽤户使⽤systemd管理⾃⼰服务的权限
loginctl enable-linger
# 重载用户服务文件
systemctl --user daemon-reload
# 设置服务开机自启动
systemctl --user enable container_logserver --now
# 验证
podman ps -a

配置 UMASK

**附加:**修改 umask,让elovodo用户创建普通文件的权限为rw-------,让普通用户创建目录的权限为rwx------

1
2
3
4
5
6
7
# 在 elovodo 用户下操作
echo "umask 0077" >> ~/.bashrc
source .bashrc
# 测试
touch test1
mkdir test2
ls -l

修改密码有效期

修改 glsgreat 用户密码信息,设置最大有效期为120天,最小有效期为7天

1
2
chage -m 7 -M 120 glsgreat
chage -l glsgreat

配置超级用户

创建 glsgood 用户,要求 glsgood 用户可以像 root 那样执行管理员命令且不需要输入任何密码

1
2
3
4
5
6
7
8
9
10
# 修改配置文件/etc/sudoers
> vim /etc/sudoers
##Allow root to run any commands anywhere # 在此行之后新增行
glsgood ALL=(ALL) ALL
## Same thing without a password # 在此行之后新增行
glsgood ALL=(ALL) NOPASSWD: ALL
# 测试
su - glsgood
sudo id
# 无须输入密码显示为root

修改新用户密码有效期

修改所有新用户的密码有效期为20天

1
2
3
4
5
6
# 修改如下文件行
grep /etc/login.defs
PASS_MAX_DAYS 20
# 测试
useradd test123
chage -l test123