RH415 v7.5 综合练习题解题思路

2023-03-24
2023-04-01
12 min read
Hits

  本文是博主针对上一篇文章《RH415 v7.5 综合练习题解》给出的解题步骤所梳理出的一些解题思路。完全是博主自己的解题思路,未经官方或权威人士认证,不排除可能会有完全错误的内容,请各位留意,也敬请指正!

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

题目

在 servera 上创建 LUKS 加密设备,满足要求:

  1. 底层块设备为逻辑卷,名为 wallet。
  2. 逻辑卷使用 treasure 卷组中的所有可用空间
  3. 设备使用密钥 RedHat2022 加密
  4. 设备被 ext4 格式化
  5. 启动时,设备不需要自动解密或挂载。
  6. 设备中包含文本文件 test.txt,内容是 ex415test。

思路

  1. root@servera
  2. 首先划分逻辑卷:lvcreate -l+100%FREE treasure -n wallet
  3. 加密设备:crypt…… luksFormat /dev/mapper/tr……
  4. 打开设备并映射至 cryptedtest:crypt…… luksOpen /dev/mapper/tr…… cryptedtest
  5. 映射后格式化:mkfs.ext4 /dev/mapper/cr……
  6. 格式化以后要挂载,那么创建挂载目录:mkdir /mnt/cryptedtest
  7. 挂载加密块:mount /dev/mapper/cr…… /mnt/cr……
  8. 按题目最后要求,写入内容:echo "ex415test" > /mnt/cr……/test.txt

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

题目

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

  1. 设置新密码为:RedHat2022
  2. 不能丢失数据
  3. 使用老密码不再能够解密

思路

  1. root@servera
  2. 题目是要删掉老密码,那么先看老密码在几号槽 crypt…… luksDump /dev/mapper/SK…… 可以看到 0 号槽有密码
  3. 设置新密码:crypt…… luksAddKey /dev/mapper/SK……
  4. 按提示先输入老密码 RedHat4Security,再输入新密码 RedHat2022
  5. 不能丢失数据,所以千万别再格式化,直接删 0 号槽老密码:crypt…… luksKillSlot /dev/mapper/SK…… 0
  6. 按提示输入新密码 RedHat2022
  7. 结束,不放心可以按第一步再查看一下 0 号槽还有没有密码

Configure NBDE - 配置 NBDE

题目

  1. 配置 serverd 成为 NBDE 密钥服务器
  2. 配置 servera:
    1. 在 vg SECURITY_VG 中创建 256MB 的逻辑卷 Clevis_LV
    2. 利用此逻辑卷,创建一个名为 RH415_data、密码为RedHat2022 的加密设备。
    3. 设备被 ext4 格式化
    4. 将加密设备 RH415_data 的 NBDE 密钥服务器的密码设置为 RedHat2022
    5. 配合 NBDE 将加密设备 RH415_data 永久挂载到 /mnt/data
    6. 挂载点中包含文本文件 test.txt,内容是 ex415test。
    7. 确保两个节点上都启用了防火墙。

思路

  1. serverd 是密钥服务器,所以我们需要给它
    1. 装上 tang
    2. 激活 tang
    3. 激活防火墙
    4. 放通 80 端口
    5. 重启防火墙生效
  2. root@serverd
  3. 安装 tang:yum install -y tang
  4. 激活 tang:systemctl enable --now tangd.socket
  5. 防火墙激活命令同上,除了最后改为 firewalld.service
  6. 防火墙开放 80 端口:firewall-cmd --per…… --add-service=http
  7. 重启防火墙:firewall-cmd --reload
  8. serverd 就搞定了,接着 root@servera
  9. 按要求创建逻辑卷:lvcreate -L 256MiB SE…… -n Clevis_LV
  10. 和第一题一样用 luks 加密:crypt…… luksFormat /dev/mapper/SE……
  11. 继续打开并映射:crypt…… luksOpen /dev/mapper/SE…… RH415_data
  12. 继续格式化:mkfs.ext4 /dev/mapper/RH……
  13. 继续创建挂载目录:mkdir /mnt/data
  14. 继续挂载:mount /dev/mapper/RH…… /mnt/data
  15. 接续写入内容:echo "ex415test" > /mnt/data/test.txt
  16. 执行完上述常规操作,接下来要 NBDE,那么就要
    1. 装 clevis*
    2. 激活 tang
    3. 防非根区输密码
    4. 编辑 /etc/crypttab
    5. 编辑 /etc/fstab
    6. reboot
  17. 先装 clevis*:yum install -y clevis*
  18. 装完激活 tang 服务器:clevis luks bind -d /dev/mapper/SE…… tang '{"url":"http://serverd.lab.example.com"}'
  19. 防止非根区提示输密码(现在就别管了记住就行了):systemctl enable clevis……
  20. 编辑 /etc/crypttab 加上一行,下面每一项之间空一格就行
    1. RH415_data
    2. /dev/mapper/SECURITY_VG-Clevis_LV
    3. none
    4. _netdev
  21. 还要编辑 /etc/fstab 也是加上一行,也是下面每一项之间空一格
    1. /dev/mapper/RH415_data
    2. /mnt/data
    3. ext4
    4. _netdev
    5. 0
    6. 0
  22. 然后 reboot 看能否自动解密 luks 就完事了,servera 应该是能直接到让你输入账号的地方
  23. 最后看一下题目最后一条,理论上也应该要看一下 servera 的防火墙是否正常运行,但是老师给的命令里没有这一条,有时间 systemctl status firewalld.service 看一眼咯

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

题目

在 servera 配置 AIDE 监控以下文件:

  1. 下载 http://content.example.com/rh415.cfg 并将其放置在 /etc 中
  2. 文件权限为 0664,属组为 root.root。
  3. AIDE 必须监控文件 /etc/rh415.cfg 的权限、所有权和时间戳变化
  4. AIDE 数据库位于 /var/lib/aide/aide.db.gz 中

思路

  1. root@servera
  2. 要放在 /etc,所以我们直接:cd /etc
  3. 下载文件:wget 题目链接
  4. 先改属组:chown root:root rh4……
  5. 再改权限:chmod 0644 rh4……
  6. 安装 aide:yum install -y aide
  7. 复制配置到 /tmp:cp /etc/aide.conf /tmp
  8. 删除与 rh415.cfg 无关配置(别管了,记住):sed -i '99,312d' /etc/aide.conf
  9. 要监控 everything,编辑 aide 配置 /etc/aide.conf 加上一行:/etc/rh415.cfg EVERYTHING
  10. 初始化 aide:aide --init
  11. 重命名老数据库:mv /var/lib/aide/aide…… 题目路径
  12. 完结,check 一下:aide --check 输出看上去棒棒的就行了

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

题目

在 servera 配置监控 /root/rockentries.txt, 关键字为 rh415,以监控该文件上的任何读取、写入、执行和追加事件。

思路

  1. 首先写入配置,来吧会的直接自己写,不会的赶紧背吧:echo "-w /root/rockentries.txt -p rwxa -k rh415" >> /etc/audit/rules.d/audit.rules(别勉强,也不是非要用 echo,打开文件再写也行的)
  2. audit 的规则写完一定要加载:augen…… --load
  3. 如果运行上述命令没有报错,那么其实本题已经完结了,当然你可以试一下监控 O 不 OK:cat /root/rock……
  4. 然后看看日志:ausearch -i -k rh415 有日志条目就 OK

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

题目

抱歉,这一题没有题目 hhh😂

思路

没有题目还能有什么思路,通过答案解析反推题目么,不如直接背咯

  1. root@emm 抱歉环境里没有 node2,随机应变吧
  2. 编辑 audit 配置 /etc/audit/rules.d/audit.rules 加上下面两行
    1. -w /topsecret.txt -p w -k vault
    2. -a always,exit -F auid=1201 -F auid=1202 -F auid!=0 -F uid!=0 -F euid!=0
  3. 简单注释一下(希望你能通过记住注释写出命令🙂)
    1. 审计 topsecret.txt 文件的写入,审计过滤关键字为 vault
    2. 对用户 george(auid=1201)与 michael(auid=1202)进行审计,用户 root 除外 -F auid!=0 -F uid!=0 -F euid!=0
  4. 还是那句话 audit 的规则写完一定要加载:augen…… --load
  5. 最后一行没报错就万事大吉

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

题目

在 serverb 上配置审计服务:

  1. 审计 /usr/local/bin/payroll 的执行,审计过滤关键字为 payday。
  2. 对用户 bob 与 mary 进行审计,用户 fred 除外。

思路

  1. 肯定 audit,那么直接编辑 /etc/audit/rules.d/audit.rules 写入下面两行咯
    1. -w /usr/local/bin/payroll -p x -k payday
    2. -a always,exit -F auid=1001 -F auid=1002 -F auid!=1003 -F uid!=1003 -F euid!=1003
  2. 重要的事情说第三遍 audit 的规则写完一定要加载:augen…… --load
  3. 没有报错就完结

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

题目

配置 servera 和 serverb:当对非 root 用户的 4 次连续失败登录后(本地登录或 ssh 登录),用户锁定 2 分钟

思路

  1. root@servera
  2. 直接上 authconfig:authconfig --enablefaillock --faillockargs="deny=4 fail_interval=120 unlock_time=120" --update
  3. root@serverb
  4. 再来一遍:authconfig --enablefaillock --faillockargs="deny=4 fail_interval=120 unlock_time=120" --update
  5. 然后查看一下两个 auth-ac 有没有这条配置,也可以用普通用户账号验证下。各位等保的同事,这就不用我再多说什么了吧🙂

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

题目

serverb 拥有 3 个 USB 存储设备

  1. 配置序列号为 GREG-456 的 U 盘:
    1. 包含单个分区,以 ext4 分区格式化。
    2. 分区卷标为 GREG-456
    3. 此分区可以挂载,但不需要永久挂载。
  2. 配置 USBGuard:
    1. Block 序列号为 CURTIS-123 的 U 盘
    2. Reject 序列号为 XYZ-ABC-789 的 U 盘
    3. 新 USB 设备默认被 Block
    4. usbadmin 用户可以 list 设备和策略,但是不可以修改。
    5. 日志记录到 auditd

思路

  1. 首先安装 usbguard、usbutils、udisks2:yum install -y usbguard usbutils udisks2
  2. 紧接着生成默认的 USB 限制规则:usbguard gene…… > /etc/usbguard/rules.conf
  3. 激活 usbguard 服务:systemctl enable --now usbguard.service
  4. 给硬盘加标签:parted -s 硬盘 mklabel 标签
  5. 给硬盘分区:parted -s 硬盘 mkpart primary ext4 2048s 16383s
  6. 格式化硬盘并添加卷标:mkfs.ext4 -L 卷标 硬盘
  7. 创建挂载目录:mkdir /mnt/usbguard
  8. 挂载分区:mount /dev/sbd1 /mnt/usbguard
  9. 列举所有设备:usbguard list-devices
  10. block 设备:usbguard block-device -p 几号
  11. reject 设备:usbguard reject-device -p 几号
  12. 编辑守护进程:vim /etc/usbguard/usbguard-daemon.conf
    1. 新插入的设备默认为 block:InsertedDevicePolicy=block
    2. 守护进程接受来自 root 的 IPC 连接:IPCAllowedUsers=root
    3. 日志记录使用 auditd:AuditBackend=LinuxAudit
  13. 允许 usbadmin 用户列举 USB 设备、侦听异常事件,并列举 USB 授权策略等:usbguard add-user usbadmin --policy=list --exceptions=listen --devices=list,listen

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

题目

在 serverd 上有一个用户名为:kmoon,密码为 redhat。

为 serverd 配置登录访问控制,要求:

  1. root 用户可以从任何地方 SSH 登录 serverd
  2. kmoon 用户只可以使用 SSH 从 serverb 登录 serverd
  3. 其他所有用户均不允许登录 serverd

思路

  1. root@serverd
  2. 编辑登陆访问控制策略:vim /etc/security/access.conf
  3. 最后一行的“-:ALL:ALL”删除前面的井号,然后在前面新增两行
    1. +:root:ALL
    2. +:kmoon:172.25.250.11
  4. 更新:authconfig --enablepamaccess --update

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

题目

在 serverb 上配置密码复杂度策略:

  1. 密码最小长度 12 位
  2. 小写字符最少 4 位
  3. 大写字符最少 4 位
  4. 数字字符最少 3 位
  5. 特殊字符最少 1 位
  6. 用户最多只有 5 次机会尝试输入密码

思路

各位等保的同事,这题就不需要思路了吧?

  1. root@serverb
  2. 编辑 /etc/security/pwquality.conf
    1. l 小写 u 大写 d 数字 o 符号
  3. 编辑 /etc/pam.d/system-auth
  4. 编辑 /etc/pam.d/password-auth
  5. 当前题目只要改一个 retry=5 考试见机行事

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

题目

  1. 配置 serverb 上的审计规则使用 US DOD’s Red Hat Enterprise Linux 7 Security Technical Implementation Guide (STIG)
  2. Auditd 的 backlog buffer 为 16384
  3. 如果磁盘空间低于 400MB 发送邮件给 root
  4. 永不审计 crond 服务(守护进程)

思路

  1. root@serverb
  2. 拷贝 audit 配置:cp /usr/share/doc/audit……/rules/30-st…… /etc/audit/rules.d/ 记不住路径现场 ls+cd
  3. 先做题目最后一条要求
  4. 编辑 audit 配置 /etc/audit/rules.d/audit.rules 加入如下一行
    1. -a never,user -F subj_type=crond_t
  5. 第四遍 audit 的规则写完一定要加载:augen…… --load
  6. 继续编辑 auditd 配置 /etc/audit/auditd.conf
    1. freq = 16384
    2. space_left = 400
    3. space_left_action = EMAIL
    4. admin_space_left = 399
    5. admin_space_left_action = EMAIL
  7. 配置完 reboot

Enable SELinux - 启用 SELinux【root@serverc】

题目

  1. 在 serverc 上有一个 Web 服务器,提供:
    1. HTML content: http://serverc:8001
    2. CGI script content: http://serverc:8001/cgi-bin/hello.cgi
  2. 根据以下要求配置 serverc:
    1. SELinux 设为 Enforcing 模式
    2. 防火墙允许 ssh 和 8001 端口

思路

  1. 开启 SELinux:vim /etc/selinux/config,将 SELINUX 参数设置为 enforcing
  2. reboot 然后在系统引导时按“e”,在 console=tty0 行最后添加 rd.break
  3. mount -o remount,rw /sysroot
  4. chroot /sysroot
  5. touch /.autorelabel
  6. exit 两次
  7. SELinux 防火墙允许 8001 端口:semanage port -a -t http_port_t -p tcp 8001
  8. 启动系统防火墙:systecmctl enable --now firewalld.service
  9. 系统防火墙永久放行 8001:firewall-cmd --per…… --add-port=8001/tcp
  10. 重启防火墙:firewall-cmd --reload
  11. 重启 httpd 服务:systemctl restart httpd.service
  12. SELinux 添加上下文标签:semanage fcon…… -a -t httpd_sys_content_t '/custom(/.*)?'
  13. rest…… -R -v /custom
  14. 更改目录的权限:chcon -R -t httpd_sys_script_exec_t /custom/www/cgi-bin
  15. curl http://serverc:8001/curl http://serverc:8001/cgi-bin/hello.cgi 显示都棒棒

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

题目

配置 serverc 节点,要求如下:

  1. SELinux 为 enforcing 模式
  2. sandra 用户分配给 SELinux 用户 sysadm_u
  3. SELinux 用户 sysadm_u 应具有 secadm_r 与 sysadm_r 角色
  4. sandra 用户可以使用 SSH 登录
  5. 默认的用户 login context 是 user_u
  6. sarah 和 sally 用户可以在 permissive 模式下 sudo 成为 root,并无密码的运行任意命令,但是在 enforcing 模式下则被禁止。
  7. sandra 用户可以在 enforcing 模式下 sudo 成为 root 并无密码运行任意命令

思路

  1. 首先确认 SELinux 模式:getenforce,看是否为“Enforcing”
  2. SELinux 用户 sysadm_u 应具有 secadm_r 与 sysadm_r 角色:semanage user sysadm_u --add -R secadm_r --add -R sysadm_r
  3. sandra 用户可以使用 SSH 登录:setseb…… -P ssh_s…… on
  4. 默认的用户 login context 是 user_u:semanage login -m -s user_u -r s0 __default__
  5. sarah 和 sally 用户根据题意应为 staff_u 组,sandra 为 sysadm_u 组:
    1. usermod -Z staff_u sarah
    2. usermod -Z staff_u sally
    3. usermod -Z sysadm_u sandra
  6. 所有用户免密提权
    1. echo "sarah ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/sarah
    2. echo "sally ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/sally
    3. echo "sandra ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/sandra
  7. 验证:
    1. 使用 sarah, sally 与 sandra 用户通过 ssh 登录 serverc
    2. 登录成功后使用 ‘id -Z’ 命令确认已映射为 selinux 用户

Configure Ansible - 配置 Ansible

题目

serverd 是控制节点,serverb 是受控节点,student 用户是 Ansible 管理员。

  1. student 用户从 serverd ssh 登录 serverb 不需要输入密码
  2. 在 serverb 上,student 用户执行特权命令不需输入密码。
  3. 在 serverd 上 student 用户家目录创建 Ansible 配置文件
  4. 在 serverd 上 student 用户家目录创建 Ansible 清单文件,包含 servers 组和 serverb主机。
  5. 默认状态下不启用特权升级
  6. student 用户必须能 ssh(无需任何其他 ssh 选项)从 serverd 免密登录 serverb。
  7. serverb 上 student 用户执行特权升级时,不需要输入密码。
  8. 可以使用 ping 模块在普通模式和 特权升级模式下进行测试

思路

  1. serverd 是控制节点,所以先 root@serverd
  2. 要用 ansible,那么肯定
    1. 安装 ansible
    2. 切换到 ansible 运维用户
    3. ssh-keygen
    4. ssh-copy-id
    5. 编辑 ansible 配置
    6. 编辑主机清单
  3. 安装 ansible:yum install -y ansible
  4. 切换到 ansible 用户 student:su - student
  5. 生成 SSH 密钥对:ssh-keygen
  6. 公钥拷贝至 student@serverb:ssh-copy-id student@serverb
  7. 编辑 andible 配置 ansible.cfg
    1. [defaults]
    2. inventory = ./inventory
    3. remote_user = student
    4. log_path = ansible.log
    5. [privilege_escalation]
    6. become = False
    7. become_user = root
    8. become_method = sudo
    9. become_ask_pass = False
  8. 编辑主机清单 inventory
    1. [servers] # 主机组
    2. serverb # 受管主机
  9. 好了 ansible 控制节点 serverd 配置完成,因为 student@serverb 要免密提权,所以我们 root@serverb
  10. 配置 student 免密提权:echo "student ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/student
  11. 配置完可以来回切换试一下是否生效,也可以直接 student@serverd 准备运行 ansible
  12. 要运行 ansible 首先要测试连接:ansible all -m ping
  13. 不要管 false,ping pong 即可
  14. 理论上此题 ansible 已经配置完成,按题目最后一条可以用 ping 测试,但是老师给出了其他测试命令
  15. ansible all -m command -a 'fdisk -l' -b 运行 OK
  16. ansible all -m command -a 'fdisk -l' 运行不 OK

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

题目

在 workstation 上进行扫描,生成报告,要求如下:

  1. 扫描使用 RHEL 7 Standard System Security Profile
  2. 扫描前不要对这个 profile 进行修改
  3. 进行修复前必须要完成扫描
  4. HTML 格式的扫描报告保存到 /root/scan-report.html
  5. XML 格式的扫描报告保存到 /root/scan-results.xml
  6. 使用 # upload /root/scan-report.html 和 # upload /root/scan-results.xml 命令上传报告到考试服务器(此步只在考试时候操作)

思路

  1. yum install -y *scap*
  2. scap-workbench &

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

题目

自定义 RHEL 7 Standard System Security Profile 后,准备修复 workstation,要求如下:

  1. 自定义 profile 名为 xccdf_org.ssgproject.content_profile_standard_ACME
  2. 开始修改时,取消选中所有规则。
  3. 需要安装防火墙
  4. 防火墙开机自动启动
  5. FTP 服务器开机不启动
  6. telnet 相关软件需要被删除
  7. 对 sudo 的访问被审计
  8. 自定义的 profile 保存为 /root/ACME-tailoring.xml
  9. 使用 # upload /root/ACME-tailoring.xml 命令上传到考试服务器(此步只在考试时候操作)

思路

  1. yum install -y *scap*
  2. scap-workbench &

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

题目

使用自定义的 profile 扫描 workstation:

  1. 扫描结果保存为 /root/tailoring-results.xml
  2. 使用 # upload /root/tailoring-results.xml 命令上传到考试服务器(此步只在考试时候操作)
  3. 依据扫描结果生成 Ansible 修复 playbook,保存为 /root/ACME-remediation.yml
  4. 使用 # upload /root/ACME-remediation.yml 命令上传到考试服务器(此步只在考试时候操作)

思路

  1. yum install -y *scap*
  2. scap-workbench &
Avatar

Hui.Ke

❤ Cyber Security | Safety is a priority.