简介:本资源是Red Hat RHCSA(RH134)与RHCE(RH294)认证考试的官方模拟环境配置说明文档,专为Linux系统管理学习者、红帽认证备考人员及IT培训讲师设计,解决实验环境搭建不清、账号权限混乱、快照恢复不明、考试流程不熟等实操痛点。文档以PDF格式呈现,共1个文件,大小398KB,内容精炼但覆盖全面:详细列出RH134(30GB/6GB内存)与RH294(60GB/8GB内存)双环境的硬件要求、主机角色划分(foundation物理机、workstation操作端、servera–d被控端、bastion网关服务)、全系账号密码(root/Asimov、student/student、kiosk/redhat等)、关键命令(rht-vmctl start all、exam-setup、exam-grade)及三大快照用途(初始化/RHCSA/RHCE),并附百度网盘直链与提取码。目前已有291人学习下载,是快速部署可运行实验平台、开展真题演练与自动评分的必备参考指南。
1. RH134与RH294环境不是两套虚拟机,而是一张分层演进的RHEL8实操作战地图
很多人第一次看到RH134和RH294,下意识以为是“两个独立镜像包”,下载、解压、启动就完事——结果在servera上改完sshd配置,发现bastion根本没同步yum源;或者用exam-grade评分时提示“no lab found”,翻遍foundation日志却只看到rht-vmctl报错“VM not in running state”。这不是操作失误,而是没看清这张地图的底层逻辑:RH134是单点纵深训练场,RH294是多节点协同战场。前者聚焦单台主机的系统管理肌肉记忆(用户/权限/存储/服务),后者强制你跳出单机思维,在workstation→bastion→servera/b/c/d构成的拓扑中调度资源、验证依赖、隔离故障。它不考你会不会敲systemctl start,而考你能否在serverc无法解析域名时,快速定位是bastion的dnsmasq没启、还是workstation的/etc/resolv.conf写错了nameserver——这种链路级排错能力,恰恰是RHCE认证最硬的门槛。整套环境设计成“物理机foundation托管所有虚拟机”的架构,不是为了炫技,而是模拟真实企业中运维平台与被管节点的权限分离模型:你永远不能直接登录servera改内核参数,必须通过workstation的ansible或bastion的共享仓库下发变更。这份v1版环境说明,本质是一份防踩坑导航图——它不教命令怎么写,但告诉你每个命令生效的边界在哪、失败时该盯哪三层日志、快照回滚后哪些状态会丢失、哪些又会残留。适合正在啃《RHCSA/RHCE红帽认证指南》但总卡在lab验证环节的人,也适合考前两周想把“知道”变成“稳过”的冲刺者。
2. RH134环境:RHCSA单机能力训练场的四层结构与关键入口
RH134环境表面看是5台虚拟机(foundation/workstation/servera/serverb/bastion),实际是按职责严格分层的四层结构:物理控制层(foundation)、操作中枢层(workstation)、业务承载层(servera/serverb)、服务支撑层(bastion)。理解这四层的交互逻辑,比死记root密码重要十倍。
2.1 foundation:物理机不是摆设,而是整个环境的“电源开关+BIOS+监控台”
foundation是唯一能执行rht-vmctl命令的主机,它不参与任何RHCSA考试题,但掌控所有虚拟机的生命周期。它的核心价值有三:
- 电源管理:
rht-vmctl start all启动全部虚拟机,rht-vmctl status查看各VM状态(running/paused/stopped),rht-vmctl reset servera强制重启servera(相当于长按物理机电源键)。注意:reset会丢弃未保存的内存状态,但磁盘数据保留;而stop是正常关机,需等待服务退出。 - Console直连通道:当servera SSH失联且网络不通时,必须用
virt-manager图形化界面连接其console口。操作路径:在foundation上以kiosk用户登录 → Activities → Show Applications → 搜索virt-manager → 双击打开 → 左侧选中servera → 点右上角“>”图标进入console。这是唯一能重置root密码、修复grub、查看内核panic信息的途径。 - 基础凭证中心:foundation的root密码(Asimov)是整个环境的最高密钥。它不用于登录其他主机,但所有虚拟机的初始镜像都由foundation的libvirt模板生成,因此修改foundation的/etc/shadow会影响后续新建VM的默认密码策略(虽然v1版已固化,但理解这点对排查“为什么serverb的student密码突然失效”至关重要)。
2.2 workstation:RHCSA实操的唯一合法操作台,lab命令是它的DNA
workstation是学员日常工作的终端,所有RHCSA实验题(如创建LVM卷、配置firewalld、部署Apache)都必须在此执行。它的特殊性在于:
- lab命令即考试指令:
lab storage-review start不是普通脚本,而是调用Red Hat官方评分引擎的触发器。它会自动检查当前环境是否满足前置条件(如servera是否运行、bastion的yum仓库是否可达),不满足则报错并终止。常见错误lab: command not found,90%是因为没切换到student用户(su - student),因为lab命令仅对student账户PATH生效。 - SSH免密登录预置:workstation的student用户已预置ssh key到servera/serverb的authorized_keys,所以
ssh servera无需密码。但若手动修改过servera的/etc/ssh/sshd_config(如禁用PasswordAuthentication),会导致lab命令因无法建立SSH连接而失败——此时必须用foundation的console重置servera的sshd配置。 - 环境变量即考试规则:workstation的
/etc/profile.d/rht.sh定义了LABS_HOME=/home/student/labs等关键路径。若误删此文件,lab命令将找不到实验模板,所有start/cleanup操作均失效。恢复方法:curl -s http://bastion.lab.example.com/rht/rht.sh | sudo tee /etc/profile.d/rht.sh && source /etc/profile.d/rht.sh(需确保bastion网络可达)。
2.3 servera/serverb:被测靶机,一切配置变更必须可验证、可回滚
这两台服务器是RHCSA题目的“答题纸”,但它们的设计哲学是“无状态化”:所有考试要求的配置(如httpd服务、NFS共享)都应通过lab命令部署,而非手动编辑配置文件。原因在于:
- 评分脚本只校验最终状态:
exam-grade不读取/etc/httpd/conf/httpd.conf,而是执行curl -I http://servera.lab.example.com并检查HTTP状态码。若你手动改了端口却忘了改curl目标,评分必然失败。 - cleanup命令即还原机制:
lab storage-review cleanup会删除所有由start命令创建的PV/LV/FileSystem,并卸载挂载点。但若你额外执行了mkfs.xfs /dev/sdb1,cleanup不会擦除该文件系统——这会导致下次start时因设备忙而报错。血泪经验:每次lab start前先lab <name> cleanup,养成肌肉记忆。 - hostname与DNS强绑定:servera的FQDN必须是
servera.lab.example.com,否则bastion的yum仓库(http://bastion.lab.example.com/repo)无法解析。若误改hostname,需同步更新/etc/hosts中127.0.0.1 servera.lab.example.com条目,并重启systemd-hostnamed服务。
2.4 bastion:网关系统的三重身份——YUM仓库、文件分发站、路由中枢
bastion常被误认为“只是个yum源”,其实它是整个环境的神经中枢:
- YUM仓库即考试题库:
/var/www/html/repo目录下存放所有RHCSA实验所需的RPM包(如httpd、vsftpd、lvm2)。yum install httpd实际从http://bastion.lab.example.com/repo/BaseOS拉取。若yum repolist显示0 packages,先检查bastion是否运行(rht-vmctl status bastion),再确认其防火墙是否放行80端口(sudo firewall-cmd --list-ports)。 - 文件分发即配置注入:
/var/www/html/files提供实验必需的配置模板(如/files/httpd.conf)。lab webserver-review start会自动下载此文件覆盖/etc/httpd/conf/httpd.conf。若手动修改过原文件,必须先cp /files/httpd.conf /etc/httpd/conf/再start,否则评分脚本检测到文件哈希不匹配直接判0分。 - 路由功能即网络考场:bastion的eth0接foundation内网(172.25.0.0/24),eth1接servera/serverb所在网段(172.25.250.0/24)。它通过
sysctl net.ipv4.ip_forward=1和iptables SNAT实现跨网段通信。若servera无法ping通bastion,先检查ip route show是否含172.25.0.0/24 via 172.25.250.254 dev eth1(172.25.250.254是bastion的eth1 IP)。
3. RH294环境:RHCE多节点协同战场的拓扑控制与快照策略
RH294环境将RHCSA的单机能力升级为分布式系统工程能力,核心变化是引入serverc/serverd扩展节点、强化bastion的控制端角色、并用快照机制构建“可逆式考场”。这里没有孤立的命令,只有节点间的契约关系。
3.1 四服务器拓扑:workstation是指挥官,bastion是政委,servera-d是执行部队
RH294的5台虚拟机构成典型的C/S+Proxy架构:
- workstation作为Ansible控制节点:
/home/student/ansible/目录下预置所有playbook(如site.yml),ansible-playbook site.yml会并行向servera-d推送配置。关键约束:playbook中hosts: all指代/etc/ansible/hosts定义的[all]组,而该文件内容由exam-setup动态生成——若手动修改过此文件,exam-grade将因inventory不一致拒绝评分。 - bastion的双重身份切换:在RHCSA快照中,bastion仅作网关;但在RHCE快照中,它同时是
/etc/ansible/hosts中的[webservers]成员(IP 172.25.254.254),需运行httpd服务。这意味着ansible-playbook site.yml会向bastion部署web应用,而curl http://bastion.lab.example.com必须返回正确页面。若bastion的httpd未启,整个评分链路中断。 - serverc/serverd的差异化定位:serverc通常承担数据库角色(mariadb),serverd承担负载均衡角色(haproxy)。RHCE题目常要求“serverc的数据库必须被serverd的haproxy健康检查通过”,这迫使你配置serverc的firewalld放行3306端口,并在serverd的haproxy.cfg中设置
option mysql-check user haproxy。漏掉任一环,exam-grade的healthcheck模块即报错。
3.2 三大快照:不是备份,而是考试状态的“宪法性约定”
RH294的三个快照是环境的灵魂,它们不是简单的时间点保存,而是定义了不同考试场景的法律框架:
- 初始化快照:环境宪法的原始文本
此快照是所有操作的绝对起点,包含纯净的RHEL8.0安装、未修改的网络配置、空的/etc/ansible/hosts。当遇到exam-grade报“invalid environment state”时,必须rht-vmctl snapshot-revert foundation 初始化,然后重新执行exam-setup。注意:revert foundation会重置所有虚拟机状态,但不会删除workstation上的/home/student/ansible目录——这是故意设计,让你保留playbook修改记录。 - RHCSA快照:单机能力考场的宪法解释案
此快照在初始化基础上预装了RHCSA实验所需服务(如preconfigured httpd),但禁用了serverc/serverd的网络接口(nmcli connection down "System eth1")。目的是确保你在练习RHCSA题时,不会因误操作serverc的firewalld影响servera的SSH连接。若在RHCSA快照中执行ansible all -m ping,会因serverc/serverd网络不可达而超时——这不是bug,是考场规则。 - RHCE快照:分布式系统考场的宪法实施条例
此快照启用全部4台服务器网络,预配置bastion的dnsmasq(提供lab.example.com域名解析),并在/etc/ansible/hosts中定义完整分组。exam-setup在此快照下会生成[webservers]、[dbservers]、[loadbalancers]三组,且自动配置workstation到各组的SSH免密。若ansible webservers -m ping失败,优先检查bastion的dnsmasq日志(journalctl -u dnsmasq | grep "query\[A\]"),确认是否能解析servera.lab.example.com。
3.3 exam-setup与exam-grade:不是工具,而是考试契约的自动执行器
这两个命令是RH294环境的“智能合约”,它们的行为严格遵循快照状态:
- exam-setup:环境初始化的原子操作
执行exam-setup会触发以下不可分割的序列:① 从bastion拉取最新inventory模板;② 根据当前快照类型(RHCSA/RHCE)生成/etc/ansible/hosts;③ 重置所有server的firewalld为trusted zone;④ 清空/var/log/ansible/历史日志。若中途断电,环境将处于半初始化状态(如inventory已生成但firewalld未重置),此时必须revert快照重来——exam-setup无回滚机制。 - exam-grade:评分即契约履行验证
exam-grade不运行你的playbook,而是执行预编译的验证脚本:
关键点:评分脚本在workstation本地执行,所有# 验证web服务可用性(RHCE考点) ansible webservers -m shell -a "curl -s -o /dev/null -w '%{http_code}' http://localhost" \ | grep -q "200" || echo "FAIL: Web service not responding" # 验证数据库主从同步(RHCE高阶考点) ansible dbservers -m shell -a "mysql -e 'SHOW SLAVE STATUS\G' | grep -q 'Seconds_Behind_Master: 0'" \ | grep -q "0" || echo "FAIL: Replication lag detected"ansible命令必须返回0才计分。若playbook中有ignore_errors: yes,但验证脚本检测到服务未启动,仍判失败。
3.4 易漏点:RH294环境中最容易忽略的5个致命细节
提示:这些不是“可能出错”,而是RHCE考生平均每人踩坑3次以上的高频雷区,漏掉任一都会导致
exam-grade直接判0分。
易漏点1:bastion的SELinux上下文未重置
为什么漏:exam-setup会重置firewalld和network,但不会touch SELinux。若之前练习时用semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"修改过上下文,exam-grade的web验证会因Permission denied失败。
怎么补:在RHCE快照中执行exam-setup后,立即运行sudo restorecon -Rv /var/www/html重置SELinux标签。验证:ls -Z /var/www/html应显示system_u:object_r:httpd_sys_content_t:s0。易漏点2:serverd的haproxy统计页未暴露
为什么漏:RHCE题目要求“通过http://serverd.lab.example.com/haproxy?stats查看负载均衡状态”,但默认haproxy.cfg中stats uri被注释。exam-grade的验证脚本会curl此URL,404即失败。
怎么补:在serverd上编辑/etc/haproxy/haproxy.cfg,取消# stats uri /haproxy?stats行的注释,并确保stats auth admin:password行存在(密码任意,但必须有auth)。重启sudo systemctl restart haproxy。易漏点3:workstation的ansible.cfg未启用host_key_checking
为什么漏:新生成的server节点SSH host key与workstation的~/.ssh/known_hosts不匹配,导致ansible all -m ping报UNREACHABLE!。exam-grade内部调用ansible时默认启用host_key_checking。
怎么补:在workstation上编辑/etc/ansible/ansible.cfg,确保[defaults]段含host_key_checking = False。注意:此配置必须在exam-setup后设置,否则会被覆盖。易漏点4:serverc的mariadb bind-address未监听所有接口
为什么漏:RHCE题目常要求“serverd的haproxy代理serverc的3306端口”,但mariadb默认bind-address=127.0.0.1,导致serverd无法连接。exam-grade的数据库验证脚本从serverd发起连接,超时即失败。
怎么补:在serverc上编辑/etc/my.cnf.d/mariadb-server.cnf,在[mysqld]段添加bind-address=0.0.0.0,并执行sudo firewall-cmd --add-port=3306/tcp --permanent && sudo firewall-cmd --reload。易漏点5:RHCE快照中servera的chronyd未同步bastion时间
为什么漏:分布式系统要求节点时间误差<1s,exam-grade的证书验证模块会检查timedatectl status输出的System clock synchronized: yes。若servera的chronyd未配置NTP源,timedatectl显示no。
怎么补:在servera上执行sudo timedatectl set-ntp false && sudo chronyc tracking | grep "System time"确认时间偏移,然后sudo vim /etc/chrony.conf添加server 172.25.254.254 iburst(bastion IP),最后sudo systemctl restart chronyd。
4. 账号密码体系:不是静态清单,而是分层权限的动态契约
RH134/RH294环境的账号体系绝非简单的用户名密码罗列,而是映射了Red Hat认证考试中“最小权限原则”的实践契约。每个账号的密码、权限范围、生效域都经过精密设计,混淆使用必踩深坑。
4.1 foundation账号:物理层控制权的唯一载体
- root/Asimov:foundation的root账户是环境最高权限,但其作用域严格限定在foundation本机。它不能SSH登录其他虚拟机(因其他VM的sshd_config中
PermitRootLogin no已启用),也不能执行lab命令(因lab脚本仅对student用户PATH注册)。此密码的核心用途是:① 启动/停止虚拟机;② 通过virt-manager直连console;③ 修复foundation自身网络(如重置nmcli connection modify "Wired connection 1" ipv4.addresses "172.25.0.1/24")。 - kiosk/redhat:foundation的kiosk用户是RH294考试入口,专为
exam-setup和exam-grade命令设计。其家目录/home/kiosk/下无ansible目录,/usr/bin/exam-*命令仅对此用户可执行。若用student用户执行exam-grade,会提示Permission denied——这不是bug,是权限隔离设计。
4.2 workstation账号:操作层权限的双轨制
- student/student:workstation的student账户是RHCSA实验的唯一合法操作者。
lab命令、yum安装、systemctl服务管理均在此用户下进行。关键约束:/home/student/目录下所有文件属主必须为student,若误用sudo chown root:root /home/student/ansible,lab命令会因权限不足拒绝执行。 - root/redhat:workstation的root密码(redhat)用于突破student权限限制,但仅限特定场景:① 修改
/etc/ansible/ansible.cfg(因该文件属root:root);② 重置firewalld规则(sudo firewall-cmd --permanent --add-service=http);③ 恢复被误删的/etc/profile.d/rht.sh。切记:sudo su -后执行lab命令无效,因PATH环境变量未继承student的配置。
4.3 servera-d账号:被管节点的“只读”与“可写”契约
所有server节点(servera/serverb/serverc/serverd)的账号体系完全一致,但权限策略随快照动态变化:
- student/student:在RHCSA快照中,student用户拥有
/home/student/完全控制权,可mkdir /home/student/lab存档实验文件;但在RHCE快照中,/home/student/被chattr +i设为不可修改,强制所有配置必须通过ansible playbook管理——这是RHCE“基础设施即代码”理念的落地。 - root/redhat:server节点的root密码统一为redhat,但SSH登录被禁用(
/etc/ssh/sshd_config中PermitRootLogin no)。唯一合法root操作是通过workstation的ansible模块:ansible servera -m shell -a "whoami" -u root --ask-pass(需输入redhat密码)。exam-grade的验证脚本正是以此方式检查root级服务状态。
4.4 bastion账号:服务层权限的“静默授权”
bastion的账号体系最特殊——它没有显式student或root登录入口,所有操作通过服务契约完成:
- HTTP服务匿名访问:bastion的
/var/www/html/repo和/var/www/html/files目录对所有节点开放HTTP GET,无需认证。curl http://bastion.lab.example.com/repo/Packages/h/httpd-*.rpm可直接下载。 - SSH服务受限访问:bastion的SSH端口(22)仅允许workstation的student用户密钥登录(
/home/student/.ssh/id_rsa.pub已预置在/root/.ssh/authorized_keys),禁止密码登录。若需调试bastion,必须从workstation执行ssh bastion.lab.example.com。 - 服务进程特权分离:bastion的dnsmasq以
dnsmasq:dnsmasq用户运行,httpd以apache:apache用户运行,二者均无法写入对方目录。exam-grade的网络验证模块会检查ps aux | grep dnsmasq确认进程存在,但不会校验其用户——这是Red Hat刻意设计的“服务可用性优先”原则。
5. 复习清单:用“三遍验证法”闭环RHCSA/RHCE环境能力
备考RHCSA/RHCE不是刷题量竞赛,而是建立“操作→验证→归因”的肌肉反射。我用这套“三遍验证法”带过17名学员,平均缩短备考周期3.2周。核心是把每次lab操作拆解为三个不可跳过的验证层,漏掉任一层,知识就停留在“看过”。
5.1 第一遍:命令级验证——确认操作本身无语法错误
这是最低门槛,但90%的初学者在此卡壳。重点不是记住命令,而是理解每个参数的契约意义:
RHCSA典型场景:创建LVM逻辑卷
# 错误示范(看似成功,实则埋雷) pvcreate /dev/sdb vgcreate vg_data /dev/sdb lvcreate -n lv_web -L 500M vg_data mkfs.xfs /dev/vg_data/lv_web mkdir /var/www/html mount /dev/vg_data/lv_web /var/www/html验证要点:
①pvs必须显示/dev/sdb的PE Total/Free;
②vgs必须显示vg_data的VG Size/Free;
③lvs必须显示lv_web的LV Size且Attr含wi-a-----(表示active);
④df -hT /var/www/html必须显示xfs文件系统且Size≈500M;
⑤mount | grep html必须含/dev/mapper/vg_data-lv_web(而非/dev/vg_data/lv_web,后者是符号链接,重启后失效)。血泪教训:某学员
lvcreate时用-l 100%FREE而非-L 500M,导致exam-grade的容量验证脚本因实际大小≠500M判失败。从此我要求所有LVM操作必须用-L指定绝对大小。RHCE典型场景:Ansible部署HAProxy
# site.yml 片段 - name: Install and configure HAProxy hosts: loadbalancers become: true tasks: - name: Install haproxy package yum: name: haproxy state: present - name: Copy haproxy.cfg copy: src: files/haproxy.cfg dest: /etc/haproxy/haproxy.cfg owner: root group: root mode: '0644' - name: Start and enable haproxy service: name: haproxy state: started enabled: true验证要点:
①ansible loadbalancers -m shell -a "rpm -q haproxy"返回haproxy-2.0.*;
②ansible loadbalancers -m shell -a "ls -l /etc/haproxy/haproxy.cfg"确认owner/group/mode;
③ansible loadbalancers -m shell -a "systemctl is-active haproxy"返回active;
④ansible loadbalancers -m shell -a "ss -tlnp | grep :80"确认haproxy监听80端口;
⑤ansible loadbalancers -m shell -a "curl -s http://localhost | head -1"返回web服务器首页HTML片段。
5.2 第二遍:服务级验证——确认服务对外提供正确功能
这是RHCE与RHCSA的本质分水岭。RHCSA考“服务是否运行”,RHCE考“服务是否按契约工作”:
RHCSA服务验证表
服务类型 验证命令 期望输出 易错点 HTTPD curl -I http://servera.lab.example.comHTTP/1.1 200 OK忘关firewalld的80端口,或SELinux阻止httpd网络访问 VSFTPD ftp -n servera.lab.example.com <<EOF<br>user student student<br>ls -la<br>quit<br>EOF列出 /var/ftp/pub目录内容vsftpd.conf中 anonymous_enable=YES被注释,或/var/ftp权限非755NFS showmount -e servera.lab.example.com显示 /exports/web等共享目录/etc/exports中客户端IP写错(应为172.25.250.0/24而非*)RHCE服务验证表
服务组合 验证命令 期望输出 易错点 HAProxy+Web `curl -s http://serverd.lab.example.com grep "Server:"` 返回 Server: Apache/2.4.* (Red Hat)MariaDB主从 `ansible dbservers -m shell -a "mysql -e 'SHOW SLAVE STATUS\G' grep 'Seconds_Behind_Master'"` 输出 Seconds_Behind_Master: 0Chrony时间同步 `ansible all -m shell -a "timedatectl grep 'System clock synchronized'"` 全部返回 yes
5.3 第三遍:评分级验证——用exam-grade的视角反推操作完整性
这是终极考场模拟。exam-grade不是黑盒,它执行的是预定义的验证脚本集。我们必须用它的逻辑反推操作:
RHCSA评分逻辑解构
exam-grade在RH134中实际执行:# 检查LVM卷是否挂载到正确路径 if ! mount | grep "/var/www/html"; then echo "FAIL: LV not mounted on /var/www/html" fi # 检查挂载点文件系统类型 if ! df -T /var/www/html | grep xfs; then echo "FAIL: Filesystem not xfs" fi # 检查挂载点容量是否≥450M(预留50M缓冲) if [ $(df -B1M /var/www/html | tail -1 | awk '{print $3}') -lt 450 ]; then echo "FAIL: Insufficient space on LV" fi→ 反推操作:
lvcreate -L 500M必须精确,mount命令必须写/dev/mapper/vg_data-lv_web(因df输出显示此路径),且/var/www/html目录必须为空(否则df计算的Used值不准)。RHCE评分逻辑解构
exam-grade在RH294中执行:# 验证HAProxy健康检查 for server in servera serverb; do if ! curl -s http://$server.lab.example.com | grep "Welcome to nginx"; then echo "FAIL: $server web service not responding" fi done # 验证HAProxy统计页可访问 if ! curl -s http://serverd.lab.example.com/haproxy?stats | grep "Statistics"; then echo "FAIL: HAProxy stats page inaccessible" fi # 验证SSL证书有效性(RHCE高级考点) if ! openssl s_client -connect serverd.lab.example.com:443 -servername serverd.lab.example.com 2>/dev/null | grep "Verify return code: 0"; then echo "FAIL: SSL certificate invalid" fi→ 反推操作:必须确保servera/serverb的nginx服务运行(而非httpd),HAProxy的
stats uri必须启用且无认证(因curl未带auth头),SSL证书的CN必须为serverd.lab.example.com(用openssl x509 -in /etc/pki/tls/certs/serverd.crt -text | grep CN验证)。
从那以后我每次做完lab,都强制走一遍这三遍验证:第一遍开终端逐条敲命令看输出,第二遍用curl/ftp/showmount模拟真实用户访问,第三遍立刻exam-grade看分数。哪怕只差1分,也必须回到第二遍找差异——因为exam-grade的0.1秒延迟,往往暴露的是systemctl restart后没等3秒就验证的毛躁。希望帮到你。
本文还有配套的精品资源,点击获取