RH415 v7.5 综合练习题解

2023-03-23
2023-03-24
8 min read
Hits

  本文是 RHCSS 培训课程 RH415 v7.5 的考试练习题,将此题库练习十遍,基本可通过考试。

练习前准备

[kiosk@foundation0 ~]$ rht-vmctl fullreset all     # 重置所有 kvm
[kiosk@foundation0 ~]$ su -     # 提权至 root
[root@foundation0 ~]# cd /home/kiosk/backup/ex415v7.5-prepare     # 进入练习环境准备目录 /home/kiosk/backup/ex415v7.5-prepare
[root@foundation0 ex415v7.5-prepare]# sh ex415v7.5-prepare.sh     # 运行练习环境准备脚本 ex415v7.5-prepare.sh

Create an encrypted volume - 创建一个加密卷【root@servera】

lvcreate -l+100%FREE treasure -n wallet     # 底层块设备逻辑卷 wallet 使用 treasure 卷组中的所有可用空间
cryptsetup luksFormat /dev/mapper/treasure-wallet     # 此处按提示输入大写“YES”,并使用密钥 RedHat2022 加密
cryptsetup luksDump /dev/mapper/treasure-wallet     # 查看 /dev/mapper/treasure-wallet 头部信息
cryptsetup luksOpen /dev/mapper/treasure-wallet cryptedtest     # 手动打开 LUKS 加密分区,并将其映射至 /dev/mapper 中的逻辑设备
lsblk --path     # 列出所有可用块设备
mkfs.ext4 /dev/mapper/cryptedtest     # 设备被 ext4 格式化
# 启动时,设备不需要自动解密或挂载
mkdir /mnt/cryptedtest     # 创建加密块挂载目录 /mnt/cryptedtest
mount /dev/mapper/cryptedtest /mnt/cryptedtest/     # 挂载加密块 /dev/mapper/cryptedtest 至挂载目录 /mnt/cryptedtest
df -Th | grep /mnt/cryptedtest     # 查看 /mnt/cryptedtest 空间占用情况
echo "ex415test" > /mnt/cryptedtest/test.txt     # 设备中包含文本文件 test.txt,内容是 ex415test

Manage LUKS keys - 管理 LUKS 密钥【root@servera】

servera 上的 LUKS 设备 SKUL_VG/Secure_LV 解密密码为:RedHat4Security,但是此密码已经不再安全。

cryptsetup luksDump /dev/mapper/SKUL_VG-Secure_LV     # 查看 /dev/mapper/SKUL_VG-Secure_LV 头部信息,可以看到 0 号槽位有一个老密码
cryptsetup luksAddKey /dev/mapper/SKUL_VG-Secure_LV     # 增加一个 LUKS 密码
    Enter any existing passphrase: <old_passphrase>     # 解密密码为:RedHat4Security
    Enter new passphrase for key slot: <new_passphrase>     # 设置新密码为:RedHat2022
# 使用老密码不再能够解密
cryptsetup luksKillSlot /dev/mapper/SKUL_VG-Secure_LV 0     # 删除第 0 号槽位的老密码
    Enter any remaining passphrase: <new_passphrase>     # 输入新密码 RedHat2022
cryptsetup luksDump /dev/mapper/SKUL_VG-Secure_LV     # 再次查看 /dev/mapper/SKUL_VG-Secure_LV 头部信息,可以发现已经移除了 0 号槽位的老密码

Configure NBDE - 配置 NBDE

root@serverd

# 配置 serverd 成为 NBDE 密钥服务器
yum install -y tang     # 安装 tang 软件包
systemctl enable --now tangd.socket      # 激活 tangd 服务 socket 并设置开机自启
systemctl status tangd.socket     # 查看 tangd 服务 socket 状态
systemctl enable --now firewalld.service     # 激活 firewalld 服务 socket 并设置开机自启
systemctl status firewalld.service     # 查看 firewalld 服务 socket 状态
firewall-cmd --permanent --add-service=http     # 防火墙放通 Tang 服务器所需的 http(80/TCP)端口
firewall-cmd --reload     # 重启防火墙
firewall-cmd --list-all | grep http     # 列举所有 http(80/TCP)端口的防火墙策略

root@servera

lvcreate -L 256MiB SECURITY_VG -n Clevis_LV     # 在 vg SECURITY_VG 中创建 256MB 的逻辑卷 Clevis_LV
# 利用此逻辑卷,创建一个名为 RH415_data、密码为 RedHat2022 的加密设备
cryptsetup luksFormat /dev/mapper/SECURITY_VG-Clevis_LV     # 此处按提示输入大写“YES”,并使用密钥 RedHat2022 加密
cryptsetup luksOpen /dev/mapper/SECURITY_VG-Clevis_LV RH415_data     # 手动打开 LUKS 加密分区,并将其映射至 /dev/mapper 中的逻辑设备
mkfs.ext4 /dev/mapper/RH415_data     # 设备被 ext4 格式化
# 将加密设备 RH415_data 的 NBDE 密钥服务器的密码设置为 RedHat2022 并配合 NBDE 将加密设备 RH415_data 永久挂载到 /mnt/data
mkdir /mnt/data     # 创建加密块挂载目录 /mnt/data
mount /dev/mapper/RH415_data /mnt/data     # 挂载加密块 /dev/mapper/RH415_data 至挂载目录 /mnt/data
df -Th | grep RH415_data     # 查看 RH415_data 空间占用情况
echo "ex415test" > /mnt/data/test.txt     # 挂载点中包含文本文件 test.txt,内容是 ex415test
yum install -y clevis*     # 安装 clevis* 相关软件包
clevis luks bind -d /dev/mapper/SECURITY_VG-Clevis_LV tang '{"url":"http://serverd.lab.example.com"}'     # 连接 tang 服务器
systemctl enable clevis-luks-askpass.path     # 启用 clevis-luks-askpass.path 以防止非根分区被提示输入密码
vim /etc/crypttab     # 输入如下一行并保存
RH415_data  /dev/mapper/SECURITY_VG-Clevis_LV  none  _netdev
vim /etc/fstab     # 输入如下一行并保存
/dev/mapper/RH415_data /mnt/data  ext4  _netdev  0 0
reboot     # 打开 servera 控制台检查启动过程是否具有 LUKS 设备的自动解密与挂载的过程

Configure intrusion detection - 配置 AIDE【root@servera】

# 下载 http://content.example.com/rh415.cfg 并将其放置在 /etc 中
cd /etc     # 切换至 /etc 目录
wget http://content.example.com/rh415.cfg     # 下载 http://content.example.com/rh415.cfg
chown root:root rh415.cfg     # 更改 rh415.cfg 文件属组为 root.root
chmod 0664 rh415.cfg     #  更改 rh415.cfg 文件权限为 0664
yum install -y aide     # 安装 aide 软件包
cp /etc/aide.conf /tmp     # 复制 /etc/aide.conf 文件至 /tmp 目录
sed -i '99,312d' /etc/aide.conf     # 删除与 rh415.cfg 文件无关的所有配置
# AIDE 必须监控文件 /etc/rh415.cfg 的权限、所有权和时间戳变化
vim /etc/aide.conf     # 输入如下一行并保存
/etc/rh415.cfg    EVERYTHING     # 监控 /etc/rh415.cfg 文件的 EVERYTHING
aide --init     # 初始化 aide 数据库
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz     #  AIDE 数据库位于 /var/lib/aide/aide.db.gz 中
aide --check     # 检查文件系统更改,显示如下两行表示正常
    AIDE, version 0.15.1
    ### All files match AIDE database. Looks okay!

Monitor file activity - 监控文件活动【root@servera】

echo "-w /root/rockentries.txt -p rwxa -k rh415" >> /etc/audit/rules.d/audit.rules     # 配置监控 /root/rockentries.txt, 关键字为 rh415,以监控该文件上的任何读取、写入、执行和追加事件
augenrules --load     # 加载上述审计规则
cat /etc/audit/audit.rules     # 查看 audit 审计规则是否包含上述配置
cat /root/rockentries.txt     # cat 命令触发 auditd 审计事件
ausearch -i -k rh415     # 输出 key 为 rh415 的日志

Monitor file modification - 监控文件修改(可选题)【root@node2】

grep recipes /etc/group     # 在 /etc/group 中搜索 recipes 组
    recipes : x : 5000:george,michael
id george     # 查看 george 用户 id 信息
    uid=1201(george) gid=1201(george) groups=1201(george),5000(recipes)
id michael     # 查看 michael 用户 id 信息
    uid=1202(michael) gid=1202(michael) groups=1202(michael),5000(recipes)
vim /etc/audit/rules.d/audit.rules     # 编辑 audit 审计规则
    -w /topsecret.txt -p w -k vault     # 审计 topsecret.txt 文件的写入,审计过滤关键字为 vault
    -a always,exit -F auid=1201 -F auid=1202 -F auid!=0 -F uid!=0 -F euid!=0     # 对用户 george 与 michael 进行审计,用户 root 除外
augenrules --load     # 加载上述审计规则
cat /etc/audit/audit.rules     # 查看 audit 审计规则是否包含上述配置

Monitor program execution - 监控程序执行(可选题)【root@serverb】

which payroll     # 查看 payroll 指令的绝对路径
    /usr/local/bin/payroll
id bob     # 查看 bob 用户 id 信息
    uid=1001(bob) gid=1001(bob) groups=1001(bob)
id mary     # 查看 mary 用户 id 信息
    uid=1002(mary) gid=1002(mary) groups=1002(mary)
id fred     # 查看 fred 用户 id 信息
    uid=1003(fred) gid=1003(fred) groups=1003(fred)
vim /etc/audit/rules.d/audit.rules     # 编辑 audit 审计规则
    -w /usr/local/bin/payroll -p x -k payday     # 审计 /usr/local/bin/payroll 的执行,审计过滤关键字为 payday
    -a always,exit -F auid=1001 -F auid=1002 -F auid!=1003 -F uid!=1003 -F euid!=1003     # 对用户 bob 与 mary 进行审计,用户 fred 除外
augenrules --load     # 加载上述审计规则
cat /etc/audit/audit.rules     # 查看 audit 审计规则是否包含上述配置

Track failed logins - 跟踪失败的登录【root@servera & serverb】

authconfig --enablefaillock --faillockargs="deny=4 fail_interval=120 unlock_time=120" --update     # 当对非 root 用户的 4 次连续失败登录后(本地登录或 ssh 登录),用户锁定 2 分钟
grep pam_faillock /etc/pam.d/system-auth-ac     # 查看 /etc/pam.d/system-auth-ac 中 pam_faillock 模块相关条目
grep pam_faillock /etc/pam.d/password-auth-ac     # 查看 /etc/pam.d/password-auth-ac 中 pam_faillock 模块相关条目
# 验证:使用普通用户账号连续4次登录失败被锁定2分钟

Restrict USB devices - 限制 USB 设备【root@node2】

yum install -y usbguard usbutils udisks2     # 安装 usbguard、usbutils、udisks2 软件包
usbguard generate-policy > /etc/usbguard/rules.conf     # 生成默认的 USB 限制规则
cat /etc/usbguard/rules.conf     # 查看默认 USB 限制规则
systemctl enable --now usbguard.service     # 激活 usbguard 服务并设置开机自启
lsusb -v | less     # 以 less 分页显示 USB 信息
# GREG-456 设备位于 Bus 001 Device 003: ID 46f4:0001
udisksctl status
    MODEL                     REVISION  SERIAL               DEVICE
    --------------------------------------------------------------------------
    VirtIO Disk                                              vda     
    QEMU QEMU HARDDISK        2.5+      CURTIS-123           sda     
    QEMU QEMU HARDDISK        2.5+      GREG-456             sdb     
    QEMU QEMU HARDDISK        2.5+      XYZ-ABC-789          sdc
parted -s /dev/sdb mklabel msdos     # 给 /dev/sdb 硬盘加上 msdos 标签
parted -s /dev/sdb mkpart primary ext4 2048s 16383s
# 使用 fdisk 命令确认起始与终末扇区
# 使用 fdisk 或 parted 命令分区都可以
udevadm settle     # 监视 udev 事件队列,并在所有事件全部处理完成之后退出
mkfs.ext4 -L GREG-456 /dev/sdb1
blkid | grep sdb1     # 查看 sdb1 块设备文件类型
mkdir /mnt/usbguard     # 创建加载目录 /mnt/usbguard
mount /dev/sdb1 /mnt/usbguard     # 挂载 /dev/sdb1 至挂载目录 /mnt/usbguard
df -Th | grep sdb1     # 查看 sdb1 空间占用情况
usbguard list-devices     # 列举所有设备
    6: allow id 1d6b:0002 serial "0000:00:04.0" name "EHCI Host Controller" hash "..." 
       parent-hash "VC8ZB6FZ51WMN42QA3CqGvK9+eLDu4jpdgzSwLFn+fs=" via-port "usb1" with-interface 09:00:00
    7: allow id 46f4:0001 serial "CURTIS-123" name "QEMU USB HARDDRIVE" hash "..."
       parent-hash "Nk/GTsYsILAzeLjPtZg0++medV8vhq/hd1Ew0r9Q/F8=" via-port "1-1" with-interface 08:06:50
    8: allow id 46f4:0001 serial "GREG-456" name "QEMU USB HARDDRIVE" hash "..." 
       parent-hash "Nk/GTsYsILAzeLjPtZg0++medV8vhq/hd1Ew0r9Q/F8=" via-port "1-2" with-interface 08:06:50
    9: allow id 46f4:0001 serial "XYZ-ABC-789" name "QEMU USB HARDDRIVE" hash "..."
       parent-hash "Nk/GTsYsILAzeLjPtZg0++medV8vhq/hd1Ew0r9Q/F8=" via-port "1-3" with-interface 08:06:50
    10: allow id 0627:0001 serial "42" name "QEMU USB Tablet" hash "..." 
       parent-hash "Nk/GTsYsILAzeLjPtZg0++medV8vhq/hd1Ew0r9Q/F8=" via-port "1-4" with-interface 03:00:00
usbguard block-device -p 7     # block 阻止第 7 个 设备授权
usbguard reject-device -p 9     # reject 取消第 9 个 设备授权并移除该设备
usbguard list-devices     # 再次列举所有设备
cat /etc/usbguard/rules.conf     # 确认 usbguard 规则
vim /etc/usbguard/usbguard-daemon.conf     # 编辑 USBGuard 守护进程配置文件
    InsertedDevicePolicy=block     # 插入的新设备默认为 block 阻止
    IPCAllowedUsers=root     # 守护进程接受来自 root 的 IPC 连接
    AuditBackend=LinuxAudit     # 日志记录使用 Linux Audit
usbguard add-user usbadmin --policy=list --exceptions=listen --devices=list,listen     # 允许 usbadmin 用户列举 USB 设备、侦听异常事件,并列举 USB 授权策略等

Configure login access control - 配置登录访问控制【root@serverd】

vim /etc/security/access.conf     # 修改登陆访问控制配置文件 /etc/security/access.conf
    +:root:ALL     # root 用户可以从任何地方 SSH 登录 serverd
    +:kmoon:172.25.250.11     # kmoon 用户只可以使用 SSH 从 serverb 登录 serverd
    -:ALL:ALL     # 其他所有用户均不允许登录 serverd
authconfig --enablepamaccess --update     # enable pam_access.so module

Configure password policy - 配置密码策略【root@serverb】

vim /etc/security/pwquality.conf     # 修改密码策略配置文件 /etc/security/pwquality.conf
    minlen = 12     # 密码最小长度 12 位
    lcredit = -4     # 小写字符最少 4 位
    ucredit = -4     # 大写字符最少 4 位
    dcredit = -3     # 数字字符最少 3 位
    ocredit = -1     # 特殊字符最少 1 位
# 用户最多只有 5 次机会尝试输入密码
vim /etc/pam.d/system-auth     # 修改如下一行并保存
    password    requisite     pam_pwquality.so try_first_pass local_users_only retry=5 authtok_type=
vim /etc/pam.d/password-auth     # 修改如下一行并保存
    password    requisite     pam_pwquality.so try_first_pass local_users_only retry=5 authtok_type=

Configure auditing - 配置审计功能【root@serverb】

cp /usr/share/doc/audit-2.8.1/rules/30-stig.rules /etc/audit/rules.d/
ls -l /etc/audit/rules.d/30-stig.rules
vim /etc/audit/rules.d/audit.rules
    -a never,user -F subj_type=crond_t     # 永不审计 crond 服务(守护进程)
    # man audit.rules 命令搜索 never 与 user
    # never: never to audit
    # user: userspace
    # crond daemon as progress has crond_t domain
augenrules --load     # 加载上述审计规则
vim /etc/audit/auditd.conf     # 编辑 audit 审计规则
    freq = 16384     # Auditd 的 backlog buffer 为 16384
    # 如果磁盘空间低于 400MB 发送邮件给 root
    space_left = 400
    space_left_action = EMAIL
    admin_space_left = 400
    admin_space_left_action = EMAIL
reboot     # 重启节点使 auditd 配置生效

Enable SELinux - 启用 SELinux【root@serverc】

HTML content: http://serverc:8001

CGI script content: http://serverc:8001/cgi-bin/hello.cgi

配置 serverc:SELinux 设为 Enforcing 模式

getenforce
    Disabled
vim /etc/selinux/config
    SELINUX=enforcing
reboot
# 练习环境: 打开 serverc 控制台 --> 按 "e" --> 修改只保留 console=tty0 该行最后添加 rd.break --> Ctrl-x
# 考试环境: 直接添加 rd.break
# switch_root# mount -o remount,rw /sysroot
# switch_root# chroot /sysroot
# sh# touch /.autorelabel
# sh# exit
# switch_root# exit
# 稍等片刻系统切换 Disabled 模式的 SELinux 为 Enforcing 模式的 SELinux
semanage port -a -t http_port_t -p tcp 8001     # 防火墙允许 ssh 和 8001 端口
systemctl enable --now firewalld.service
firewall-cmd --permanent --add-port=8001/tcp
firewall-cmd --reload
systemctl restart httpd.service
curl http://serverc:8001/     # 打开报错
ausearch -i -m AVC -ts boot | grep path
    type=AVC ... avc:  denied  { getattr } for  pid=1925 comm=httpd path=/custom/www/html/index.html 
    ... scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:default_t:s0 ...
    # 确认 apache httpd 的审计状态
ls -ldZ /custom
semanage fcontext -a -t httpd_sys_content_t '/custom(/.*)?'
restorecon -R -v /custom
ls -ldZ /custom
    drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /custom
chcon -R -t httpd_sys_script_exec_t /custom/www/cgi-bin
curl http://serverc:8001/
    It works!
curl http://serverc:8001/cgi-bin/hello.cgi
    Hello World

Configure SELinux confined users - 配置 SELinux 受限用户【root@serverc】

getenforce 
    Enforcing
semanage login -a -s sysadm_u sandra
semanage user sysadm_u --add -R secadm_r --add -R sysadm_r
setsebool -P ssh_sysadm_login on
# sysadm_u 具有 ssh_sysadm_login 布尔值
# 启用该布尔值以允许 sysadm_u 通过 ssh 登录
semanage login -m -s user_u -r s0 __default__
# 修改 __default__ selinux 用户
semanage login -a -s sysadm_u sandra
# 修改回 sysadm_u
usermod -Z user_u sarah
usermod -Z user_u sally
semanage login -a -s staff_u sarah
semanage login -a -s staff_u sally 
echo "sarah  ALL=(ALL)  NOPASSWD: ALL" > /etc/sudoers.d/sarah
echo "sally  ALL=(ALL)  NOPASSWD: ALL" > /etc/sudoers.d/sally
echo "sandra  ALL=(ALL)  NOPASSWD: ALL" > /etc/sudoers.d/sandra
semanage login -l
    Login Name           SELinux User         MLS/MCS Range        Service
    __default__          user_u               s0                   *
    root                 unconfined_u         s0-s0:c0.c1023       *
    sally                staff_u              s0-s0:c0.c1023       *
    sandra               sysadm_u             s0                   *
    sarah                staff_u              s0-s0:c0.c1023       *
    system_u             system_u             s0-s0:c0.c1023       *
    # 确认所有的 linux 用户映射为 selinux 用户
# 验证:
# 1. 使用 sarch, sally 与 sandra 用户通过 ssh 登录 serverc
# 2. 登录成功后使用 'id -Z' 命令确认已映射为 selinux 用户

Configure Ansible - 配置 Ansible

root@serverd

yum install -y ansible     # 安装 ansible 软件包
ssh-copy-id student@serverb     # 将公钥拷贝至 serverb 的 student 账户
su - student     # 切换至 student
ssh-keygen     # 使用 ssh-keygen 生成 ssh 密钥对
ssh-copy-id student@serverb     # 将公钥拷贝至 serverb 的 student 账户
vim ansible.cfg     # 编辑 ansible 配置文件 ansible.cfg
    [defaults]
    # 通用配置
    inventory = ./inventory
    # 主机清单文件为 ./inventory
    remote_user = student
    # ansible 受管主机登陆用户为 student
    log_path = ansible.log
    # 日志记录文件为 ansible.log
    
    [privilege_escalation]
    # 提权配置
    become = False
    # 不允许提权
    become_user = root
    # 提权至 root
    become_method = sudo
    # 提权使用命令
    become_ask_pass = False
    # sudo 免密提权
vim inventory     # 编辑 ansible 主机清单 inventory
    [servers]     # 主机组
    serverb     # 受管主机

root@serverb

echo "student  ALL=(ALL)  NOPASSWD: ALL" > /etc/sudoers.d/student     # 配置 student 免密提权
su - student     # 切换至 student
sudo su -     # 提权至 root

student@serverd

ansible all -m ping     # 测试所有受管主机连通性
    serverb | SUCCESS => {     # serverb 测试成功
      "changed": false,     # 无变化
      "ping": "pong"     # 与控制节点通信正常
    }
ansible all -m command -a 'fdisk -l' -b
ansible all -m command -a 'fdisk -l'
    serverb | FAILED | rc=2 >>     # serverb 运行失败
    [Errno 2] No such file or directory     # 报错无此文件或目录

Generate a compliance report - 生成合规扫描报告【ssh -X root@workstation】

yum install -y *scap*     # 安装 *scap* 软件包
scap-workbench &
    RHEL7 --> Load Content --> Profile --> Standard System Security Profile(13) --> 
    Scan --> Save Result --> HTML Report --> /root/scan-report.html --> Save Result --> 
    XCCDF Results --> /root/scan-results.xml
ls -lh

Customize a compliance profile - 自定义合规性配置文件【ssh -X root@workstation】

scap-workbench &
    RHEL7 --> Load Content --> Profile --> Standard System Security Profile(13) --> 
    Customize --> New Profile ID: xccdf_org.ssgproject.content_profile_standard_ACME --> 
    OK --> Deselect Everything --> Install firewalld + Verify firewalld Enabled + Disable vsftpd Service 
    + Telnet + Ensure auditd Collects Information on the Use of Privileged Commands - sudo --> 
    OK --> File --> Save Customization Only --> /root/ACME-tailoring.xml --> Save
ls -lh /root/ACME-tailoring.xml

Remediate a system - 修复系统【ssh -X root@workstation】

scap-workbench &
    RHEL7 --> Load Content --> File --> Load Customization File --> /root/ACME-tailoring.xml --> 
    Scan --> Save Result --> XCCDF Results --> /root/tailoring-results.xml --> Save
ls -lh /root/tailoring-results.xml
scap-workbench &
    RHEL7 --> Load Content --> File --> Load Customization File --> /root/ACME-tailoring.xml --> 
    Generate remediation role --> ansible --> /root/ACME-remediation.yml
ls -lh /root/ACME-remediation.yml
Avatar

Hui.Ke

❤ Cyber Security | Safety is a priority.