Loading... # EVE-NG chroot 执行 qemu-system-x86_64 权限拒绝排障复盘 # 一、事件概述 ## 1. 事件背景 在 EVE-NG 实验环境中,节点启动阶段执行 chroot . /opt/qemu-2.12.0/bin/qemu-system-x86_64 失败,报错为 Permission denied,导致实验节点无法正常拉起。 ## 2. 影响范围 ### A. 影响对象 受影响对象为当前实验实例目录 /opt/unetlab/tmp/0/2b55d7be-2cb0-4b0b-aa69-68597d7dc51e 下的节点。 ### B. 影响时长 从故障暴露到完成修复约数分钟。 ### C. 影响功能 QEMU 进程无法在 chroot 环境中启动,节点启动流程中断。 ## 3. 严重程度 P2,单实验实例节点启动失败,不影响宿主机基础服务。 # 二、事件时间线 ## 1. 故障发生(16:00) ### A. 现象描述 执行 chroot . /opt/qemu-2.12.0/bin/qemu-system-x86_64 返回 Permission denied。 ### B. 初步判断 优先怀疑二进制无执行位、挂载 noexec、chroot 目录权限异常。 ## 2. 问题定位(16:02) ### A. 关键检查 完成以下检查: 1. qemu-system-x86_64 文件权限正常,为 -rwxr-xr-x。 2. 挂载参数未发现 noexec。 3. 直接在宿主机路径执行 qemu-system-x86_64 --version 正常。 4. 仅在 chroot 内执行失败。 ### B. 进一步验证 检查 ELF 解释器路径为 /lib64/ld-linux-x86-64.so.2,并确认 chroot 内对应文件存在,但权限为 -rw-r--r--,缺少执行位。 ## 3. 修复实施(16:05) ### A. 处理措施 发现 /opt/unetlab/tmp/.../jail 为只读 bind 挂载,不能直接在 tmp 路径改权限。 转而在源目录 /opt/unetlab/jail/lib64/ld-linux-x86-64.so.2 执行 chmod 755。 ### B. 验证结果 再次执行 chroot /opt/unetlab/tmp/.../2 /opt/qemu-2.12.0/bin/qemu-system-x86_64 --version 成功输出 QEMU 版本信息。 ```mermaid sequenceDiagram participant U as 运维 participant H as 宿主机 participant C as chroot 环境 U->>H: 执行 qemu-system-x86_64 --version H-->>U: 正常 U->>C: chroot 执行 qemu-system-x86_64 C-->>U: Permission denied U->>H: 检查 ld-linux-x86-64.so.2 权限 H-->>U: 发现无执行位 U->>H: 修复 /opt/unetlab/jail/lib64 权限 U->>C: chroot 再次执行 C-->>U: 执行成功 ```  # 三、问题分析 ## 1. 直接原因 chroot 环境依赖的动态加载器 /lib64/ld-linux-x86-64.so.2 缺少执行权限,导致动态链接 ELF 程序在 chroot 内无法启动。 ## 2. 根本原因(5 Whys) ### A. 为什么 qemu 无法在 chroot 内运行 因为动态加载器不可执行,内核无法完成程序加载。 ### B. 为什么只在 chroot 内失败 宿主机执行使用宿主机 /lib64;chroot 执行使用 jail 内 /lib64,二者权限状态不同。 ### C. 为什么在 tmp 路径修复失败 tmp 下 jail 是只读 bind 挂载点,权限变更需要在源目录 /opt/unetlab/jail 进行。 ## 3. 深层反思 排障初期若只盯着 qemu 二进制本身,容易漏掉动态加载器权限和 mount 绑定关系这两个关键点。 # 四、解决方案 ## 1. 临时方案 ### A. 实施措施 在源目录修复动态加载器权限:chmod 755 /opt/unetlab/jail/lib64/ld-linux-x86-64.so.2。 ### B. 效果评估 当前实例节点可恢复启动,问题立即解除。 ## 2. 永久方案 ### A. 改进措施 将以下检查加入 EVE-NG 运维巡检: 1. 检查 /opt/unetlab/jail/lib64/ld-linux-x86-64.so.2 是否为 -rwxr-xr-x。 2. 检查 /opt/unetlab/tmp 下 jail 与 qemu 目录挂载关系是否符合预期。 3. 节点启动失败时优先执行 chroot + --version 快速自检。 ### B. 实施计划 在后续运维文档中补充该排障条目,并形成标准化故障检查清单。 ## 3. 预防措施 对 /opt/unetlab/jail 关键文件权限建立基线,变更后自动校验,避免再次出现权限漂移。 # 五、经验总结 ## 1. 做得好的地方 排障路径清晰,先验证可执行文件,再收敛到解释器和挂载点,定位速度快。 ## 2. 需要改进的地方 缺少对 jail 关键文件权限的日常巡检机制。 ## 3. 可复用结论 遇到 chroot 中 Permission denied,且二进制已有执行位时,应优先检查: 1. ELF 解释器权限。 2. mount 是否为 noexec。 3. bind 挂载源目录与目标目录的权限一致性。 *** ## 参考资料 1. 本次会话现场排障命令与结果(2026-03-23) 最后修改:2026 年 03 月 23 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏