RH415 v7.5 综合练习题解题思路
本文是博主针对上一篇文章《RH415 v7.5 综合练习题解》给出的解题步骤所梳理出的一些解题思路。完全是博主自己的解题思路,未经官方或权威人士认证,不排除可能会有完全错误的内容,请各位留意,也敬请指正!
Create an encrypted volume - 创建一个加密卷【root@servera】
题目
在 servera 上创建 LUKS 加密设备,满足要求:
- 底层块设备为逻辑卷,名为 wallet。
- 逻辑卷使用 treasure 卷组中的所有可用空间
- 设备使用密钥 RedHat2022 加密
- 设备被 ext4 格式化
- 启动时,设备不需要自动解密或挂载。
- 设备中包含文本文件 test.txt,内容是 ex415test。
思路
- root@servera
- 首先划分逻辑卷:
lvcreate -l+100%FREE treasure -n wallet
- 加密设备:
crypt…… luksFormat /dev/mapper/tr……
- 打开设备并映射至 cryptedtest:
crypt…… luksOpen /dev/mapper/tr…… cryptedtest
- 映射后格式化:
mkfs.ext4 /dev/mapper/cr……
- 格式化以后要挂载,那么创建挂载目录:
mkdir /mnt/cryptedtest
- 挂载加密块:
mount /dev/mapper/cr…… /mnt/cr……
- 按题目最后要求,写入内容:
echo "ex415test" > /mnt/cr……/test.txt
Manage LUKS keys - 管理 LUKS 密钥【root@servera】
题目
servera 上的 LUKS 设备 SKUL_VG-Secure_LV 解密密码为:RedHat4Security,但是此密码已经不再安全。
- 设置新密码为:RedHat2022
- 不能丢失数据
- 使用老密码不再能够解密
思路
- root@servera
- 题目是要删掉老密码,那么先看老密码在几号槽
crypt…… luksDump /dev/mapper/SK……
可以看到 0 号槽有密码 - 设置新密码:
crypt…… luksAddKey /dev/mapper/SK……
- 按提示先输入老密码 RedHat4Security,再输入新密码 RedHat2022
- 不能丢失数据,所以千万别再格式化,直接删 0 号槽老密码:
crypt…… luksKillSlot /dev/mapper/SK…… 0
- 按提示输入新密码 RedHat2022
- 结束,不放心可以按第一步再查看一下 0 号槽还有没有密码
Configure NBDE - 配置 NBDE
题目
- 配置 serverd 成为 NBDE 密钥服务器
- 配置 servera:
- 在 vg SECURITY_VG 中创建 256MB 的逻辑卷 Clevis_LV
- 利用此逻辑卷,创建一个名为 RH415_data、密码为RedHat2022 的加密设备。
- 设备被 ext4 格式化
- 将加密设备 RH415_data 的 NBDE 密钥服务器的密码设置为 RedHat2022
- 配合 NBDE 将加密设备 RH415_data 永久挂载到 /mnt/data
- 挂载点中包含文本文件 test.txt,内容是 ex415test。
- 确保两个节点上都启用了防火墙。
思路
- serverd 是密钥服务器,所以我们需要给它
- 装上 tang
- 激活 tang
- 激活防火墙
- 放通 80 端口
- 重启防火墙生效
- root@serverd
- 安装 tang:
yum install -y tang
- 激活 tang:
systemctl enable --now tangd.socket
- 防火墙激活命令同上,除了最后改为
firewalld.service
- 防火墙开放 80 端口:
firewall-cmd --per…… --add-service=http
- 重启防火墙:
firewall-cmd --reload
- serverd 就搞定了,接着 root@servera
- 按要求创建逻辑卷:
lvcreate -L 256MiB SE…… -n Clevis_LV
- 和第一题一样用 luks 加密:
crypt…… luksFormat /dev/mapper/SE……
- 继续打开并映射:
crypt…… luksOpen /dev/mapper/SE…… RH415_data
- 继续格式化:
mkfs.ext4 /dev/mapper/RH……
- 继续创建挂载目录:
mkdir /mnt/data
- 继续挂载:
mount /dev/mapper/RH…… /mnt/data
- 接续写入内容:
echo "ex415test" > /mnt/data/test.txt
- 执行完上述常规操作,接下来要 NBDE,那么就要
- 装 clevis*
- 激活 tang
- 防非根区输密码
- 编辑 /etc/crypttab
- 编辑 /etc/fstab
- reboot
- 先装 clevis*:
yum install -y clevis*
- 装完激活 tang 服务器:
clevis luks bind -d /dev/mapper/SE…… tang '{"url":"http://serverd.lab.example.com"}'
- 防止非根区提示输密码(现在就别管了记住就行了):
systemctl enable clevis……
- 编辑
/etc/crypttab
加上一行,下面每一项之间空一格就行- RH415_data
- /dev/mapper/SECURITY_VG-Clevis_LV
- none
- _netdev
- 还要编辑
/etc/fstab
也是加上一行,也是下面每一项之间空一格- /dev/mapper/RH415_data
- /mnt/data
- ext4
- _netdev
- 0
- 0
- 然后 reboot 看能否自动解密 luks 就完事了,servera 应该是能直接到让你输入账号的地方
- 最后看一下题目最后一条,理论上也应该要看一下 servera 的防火墙是否正常运行,但是老师给的命令里没有这一条,有时间
systemctl status firewalld.service
看一眼咯
Configure intrusion detection - 配置 AIDE【root@servera】
题目
在 servera 配置 AIDE 监控以下文件:
- 下载 http://content.example.com/rh415.cfg 并将其放置在 /etc 中
- 文件权限为 0664,属组为 root.root。
- AIDE 必须监控文件 /etc/rh415.cfg 的权限、所有权和时间戳变化
- AIDE 数据库位于 /var/lib/aide/aide.db.gz 中
思路
- root@servera
- 要放在 /etc,所以我们直接:
cd /etc
- 下载文件:
wget 题目链接
- 先改属组:
chown root:root rh4……
- 再改权限:
chmod 0644 rh4……
- 安装 aide:
yum install -y aide
- 复制配置到 /tmp:
cp /etc/aide.conf /tmp
- 删除与 rh415.cfg 无关配置(别管了,记住):
sed -i '99,312d' /etc/aide.conf
- 要监控 everything,编辑 aide 配置
/etc/aide.conf
加上一行:/etc/rh415.cfg EVERYTHING
- 初始化 aide:
aide --init
- 重命名老数据库:
mv /var/lib/aide/aide…… 题目路径
- 完结,check 一下:
aide --check
输出看上去棒棒的就行了
Monitor file activity - 监控文件活动【root@servera】
题目
在 servera 配置监控 /root/rockentries.txt, 关键字为 rh415,以监控该文件上的任何读取、写入、执行和追加事件。
思路
- 首先写入配置,来吧会的直接自己写,不会的赶紧背吧:
echo "-w /root/rockentries.txt -p rwxa -k rh415" >> /etc/audit/rules.d/audit.rules
(别勉强,也不是非要用 echo,打开文件再写也行的) - audit 的规则写完一定要加载:
augen…… --load
- 如果运行上述命令没有报错,那么其实本题已经完结了,当然你可以试一下监控 O 不 OK:
cat /root/rock……
- 然后看看日志:
ausearch -i -k rh415
有日志条目就 OK
Monitor file modification - 监控文件修改(可选题)【root@node2】
题目
抱歉,这一题没有题目 hhh😂
思路
没有题目还能有什么思路,通过答案解析反推题目么,不如直接背咯
- root@emm 抱歉环境里没有 node2,随机应变吧
- 编辑 audit 配置
/etc/audit/rules.d/audit.rules
加上下面两行- -w /topsecret.txt -p w -k vault
- -a always,exit -F auid=1201 -F auid=1202 -F auid!=0 -F uid!=0 -F euid!=0
- 简单注释一下(希望你能通过记住注释写出命令🙂)
- 审计 topsecret.txt 文件的写入,审计过滤关键字为 vault
- 对用户 george(auid=1201)与 michael(auid=1202)进行审计,用户 root 除外
-F auid!=0 -F uid!=0 -F euid!=0
- 还是那句话 audit 的规则写完一定要加载:
augen…… --load
- 最后一行没报错就万事大吉
Monitor program execution - 监控程序执行(可选题)【root@serverb】
题目
在 serverb 上配置审计服务:
- 审计 /usr/local/bin/payroll 的执行,审计过滤关键字为 payday。
- 对用户 bob 与 mary 进行审计,用户 fred 除外。
思路
- 肯定 audit,那么直接编辑
/etc/audit/rules.d/audit.rules
写入下面两行咯- -w /usr/local/bin/payroll -p x -k payday
- -a always,exit -F auid=1001 -F auid=1002 -F auid!=1003 -F uid!=1003 -F euid!=1003
- 重要的事情说第三遍 audit 的规则写完一定要加载:
augen…… --load
- 没有报错就完结
Track failed logins - 跟踪失败的登录【root@servera & serverb】
题目
配置 servera 和 serverb:当对非 root 用户的 4 次连续失败登录后(本地登录或 ssh 登录),用户锁定 2 分钟
思路
- root@servera
- 直接上 authconfig:
authconfig --enablefaillock --faillockargs="deny=4 fail_interval=120 unlock_time=120" --update
- root@serverb
- 再来一遍:
authconfig --enablefaillock --faillockargs="deny=4 fail_interval=120 unlock_time=120" --update
- 然后查看一下两个 auth-ac 有没有这条配置,也可以用普通用户账号验证下。各位等保的同事,这就不用我再多说什么了吧🙂
Restrict USB devices - 限制 USB 设备【root@node2】
题目
serverb 拥有 3 个 USB 存储设备
- 配置序列号为 GREG-456 的 U 盘:
- 包含单个分区,以 ext4 分区格式化。
- 分区卷标为 GREG-456
- 此分区可以挂载,但不需要永久挂载。
- 配置 USBGuard:
- Block 序列号为 CURTIS-123 的 U 盘
- Reject 序列号为 XYZ-ABC-789 的 U 盘
- 新 USB 设备默认被 Block
- usbadmin 用户可以 list 设备和策略,但是不可以修改。
- 日志记录到 auditd
思路
- 首先安装 usbguard、usbutils、udisks2:
yum install -y usbguard usbutils udisks2
- 紧接着生成默认的 USB 限制规则:
usbguard gene…… > /etc/usbguard/rules.conf
- 激活 usbguard 服务:
systemctl enable --now usbguard.service
- 给硬盘加标签:
parted -s 硬盘 mklabel 标签
- 给硬盘分区:
parted -s 硬盘 mkpart primary ext4 2048s 16383s
- 格式化硬盘并添加卷标:
mkfs.ext4 -L 卷标 硬盘
- 创建挂载目录:
mkdir /mnt/usbguard
- 挂载分区:
mount /dev/sbd1 /mnt/usbguard
- 列举所有设备:
usbguard list-devices
- block 设备:
usbguard block-device -p 几号
- reject 设备:
usbguard reject-device -p 几号
- 编辑守护进程:
vim /etc/usbguard/usbguard-daemon.conf
- 新插入的设备默认为 block:
InsertedDevicePolicy=block
- 守护进程接受来自 root 的 IPC 连接:
IPCAllowedUsers=root
- 日志记录使用 auditd:
AuditBackend=LinuxAudit
- 新插入的设备默认为 block:
- 允许 usbadmin 用户列举 USB 设备、侦听异常事件,并列举 USB 授权策略等:
usbguard add-user usbadmin --policy=list --exceptions=listen --devices=list,listen
Configure login access control - 配置登录访问控制【root@serverd】
题目
在 serverd 上有一个用户名为:kmoon,密码为 redhat。
为 serverd 配置登录访问控制,要求:
- root 用户可以从任何地方 SSH 登录 serverd
- kmoon 用户只可以使用 SSH 从 serverb 登录 serverd
- 其他所有用户均不允许登录 serverd
思路
- root@serverd
- 编辑登陆访问控制策略:
vim /etc/security/access.conf
- 最后一行的“-:ALL:ALL”删除前面的井号,然后在前面新增两行
- +:root:ALL
- +:kmoon:172.25.250.11
- 更新:
authconfig --enablepamaccess --update
Configure password policy - 配置密码策略【root@serverb】
题目
在 serverb 上配置密码复杂度策略:
- 密码最小长度 12 位
- 小写字符最少 4 位
- 大写字符最少 4 位
- 数字字符最少 3 位
- 特殊字符最少 1 位
- 用户最多只有 5 次机会尝试输入密码
思路
各位等保的同事,这题就不需要思路了吧?
- root@serverb
- 编辑
/etc/security/pwquality.conf
- l 小写 u 大写 d 数字 o 符号
- 编辑
/etc/pam.d/system-auth
- 编辑
/etc/pam.d/password-auth
- 当前题目只要改一个
retry=5
考试见机行事
Configure auditing - 配置审计功能【root@serverb】
题目
- 配置 serverb 上的审计规则使用 US DOD’s Red Hat Enterprise Linux 7 Security Technical Implementation Guide (STIG)
- Auditd 的 backlog buffer 为 16384
- 如果磁盘空间低于 400MB 发送邮件给 root
- 永不审计 crond 服务(守护进程)
思路
- root@serverb
- 拷贝 audit 配置:
cp /usr/share/doc/audit……/rules/30-st…… /etc/audit/rules.d/
记不住路径现场 ls+cd - 先做题目最后一条要求
- 编辑 audit 配置
/etc/audit/rules.d/audit.rules
加入如下一行- -a never,user -F subj_type=crond_t
- 第四遍 audit 的规则写完一定要加载:
augen…… --load
- 继续编辑 auditd 配置
/etc/audit/auditd.conf
- freq = 16384
- space_left = 400
- space_left_action = EMAIL
- admin_space_left = 399
- admin_space_left_action = EMAIL
- 配置完 reboot
Enable SELinux - 启用 SELinux【root@serverc】
题目
- 在 serverc 上有一个 Web 服务器,提供:
- HTML content: http://serverc:8001
- CGI script content: http://serverc:8001/cgi-bin/hello.cgi
- 根据以下要求配置 serverc:
- SELinux 设为 Enforcing 模式
- 防火墙允许 ssh 和 8001 端口
思路
- 开启 SELinux:
vim /etc/selinux/config
,将SELINUX
参数设置为enforcing
- reboot 然后在系统引导时按“e”,在
console=tty0
行最后添加rd.break
- mount -o remount,rw /sysroot
- chroot /sysroot
- touch /.autorelabel
- exit 两次
- SELinux 防火墙允许 8001 端口:
semanage port -a -t http_port_t -p tcp 8001
- 启动系统防火墙:
systecmctl enable --now firewalld.service
- 系统防火墙永久放行 8001:
firewall-cmd --per…… --add-port=8001/tcp
- 重启防火墙:
firewall-cmd --reload
- 重启 httpd 服务:
systemctl restart httpd.service
- SELinux 添加上下文标签:
semanage fcon…… -a -t httpd_sys_content_t '/custom(/.*)?'
rest…… -R -v /custom
- 更改目录的权限:
chcon -R -t httpd_sys_script_exec_t /custom/www/cgi-bin
curl http://serverc:8001/
且curl http://serverc:8001/cgi-bin/hello.cgi
显示都棒棒
Configure SELinux confined users - 配置 SELinux 受限用户【root@serverc】
题目
配置 serverc 节点,要求如下:
- SELinux 为 enforcing 模式
- sandra 用户分配给 SELinux 用户 sysadm_u
- SELinux 用户 sysadm_u 应具有 secadm_r 与 sysadm_r 角色
- sandra 用户可以使用 SSH 登录
- 默认的用户 login context 是 user_u
- sarah 和 sally 用户可以在 permissive 模式下 sudo 成为 root,并无密码的运行任意命令,但是在 enforcing 模式下则被禁止。
- sandra 用户可以在 enforcing 模式下 sudo 成为 root 并无密码运行任意命令
思路
- 首先确认 SELinux 模式:
getenforce
,看是否为“Enforcing” - SELinux 用户 sysadm_u 应具有 secadm_r 与 sysadm_r 角色:
semanage user sysadm_u --add -R secadm_r --add -R sysadm_r
- sandra 用户可以使用 SSH 登录:
setseb…… -P ssh_s…… on
- 默认的用户 login context 是 user_u:
semanage login -m -s user_u -r s0 __default__
- sarah 和 sally 用户根据题意应为 staff_u 组,sandra 为 sysadm_u 组:
usermod -Z staff_u sarah
usermod -Z staff_u sally
usermod -Z sysadm_u sandra
- 所有用户免密提权
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
- 验证:
- 使用 sarah, sally 与 sandra 用户通过 ssh 登录 serverc
- 登录成功后使用 ‘id -Z’ 命令确认已映射为 selinux 用户
Configure Ansible - 配置 Ansible
题目
serverd 是控制节点,serverb 是受控节点,student 用户是 Ansible 管理员。
- student 用户从 serverd ssh 登录 serverb 不需要输入密码
- 在 serverb 上,student 用户执行特权命令不需输入密码。
- 在 serverd 上 student 用户家目录创建 Ansible 配置文件
- 在 serverd 上 student 用户家目录创建 Ansible 清单文件,包含 servers 组和 serverb主机。
- 默认状态下不启用特权升级
- student 用户必须能 ssh(无需任何其他 ssh 选项)从 serverd 免密登录 serverb。
- serverb 上 student 用户执行特权升级时,不需要输入密码。
- 可以使用 ping 模块在普通模式和 特权升级模式下进行测试
思路
- serverd 是控制节点,所以先 root@serverd
- 要用 ansible,那么肯定
- 安装 ansible
- 切换到 ansible 运维用户
- ssh-keygen
- ssh-copy-id
- 编辑 ansible 配置
- 编辑主机清单
- 安装 ansible:
yum install -y ansible
- 切换到 ansible 用户 student:
su - student
- 生成 SSH 密钥对:
ssh-keygen
- 公钥拷贝至 student@serverb:
ssh-copy-id student@serverb
- 编辑 andible 配置
ansible.cfg
- [defaults]
- inventory = ./inventory
- remote_user = student
- log_path = ansible.log
- [privilege_escalation]
- become = False
- become_user = root
- become_method = sudo
- become_ask_pass = False
- 编辑主机清单
inventory
- [servers] # 主机组
- serverb # 受管主机
- 好了 ansible 控制节点 serverd 配置完成,因为 student@serverb 要免密提权,所以我们 root@serverb
- 配置 student 免密提权:
echo "student ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/student
- 配置完可以来回切换试一下是否生效,也可以直接 student@serverd 准备运行 ansible
- 要运行 ansible 首先要测试连接:
ansible all -m ping
- 不要管 false,ping pong 即可
- 理论上此题 ansible 已经配置完成,按题目最后一条可以用 ping 测试,但是老师给出了其他测试命令
ansible all -m command -a 'fdisk -l' -b
运行 OKansible all -m command -a 'fdisk -l'
运行不 OK
Generate a compliance report - 生成合规扫描报告【ssh -X root@workstation】
题目
在 workstation 上进行扫描,生成报告,要求如下:
- 扫描使用 RHEL 7 Standard System Security Profile
- 扫描前不要对这个 profile 进行修改
- 进行修复前必须要完成扫描
- HTML 格式的扫描报告保存到 /root/scan-report.html
- XML 格式的扫描报告保存到 /root/scan-results.xml
- 使用 # upload /root/scan-report.html 和 # upload /root/scan-results.xml 命令上传报告到考试服务器(此步只在考试时候操作)
思路
yum install -y *scap*
scap-workbench &
Customize a compliance profile - 自定义合规性配置文件【ssh -X root@workstation】
题目
自定义 RHEL 7 Standard System Security Profile 后,准备修复 workstation,要求如下:
- 自定义 profile 名为 xccdf_org.ssgproject.content_profile_standard_ACME
- 开始修改时,取消选中所有规则。
- 需要安装防火墙
- 防火墙开机自动启动
- FTP 服务器开机不启动
- telnet 相关软件需要被删除
- 对 sudo 的访问被审计
- 自定义的 profile 保存为 /root/ACME-tailoring.xml
- 使用 # upload /root/ACME-tailoring.xml 命令上传到考试服务器(此步只在考试时候操作)
思路
yum install -y *scap*
scap-workbench &
Remediate a system - 修复系统【ssh -X root@workstation】
题目
使用自定义的 profile 扫描 workstation:
- 扫描结果保存为 /root/tailoring-results.xml
- 使用 # upload /root/tailoring-results.xml 命令上传到考试服务器(此步只在考试时候操作)
- 依据扫描结果生成 Ansible 修复 playbook,保存为 /root/ACME-remediation.yml
- 使用 # upload /root/ACME-remediation.yml 命令上传到考试服务器(此步只在考试时候操作)
思路
yum install -y *scap*
scap-workbench &