生产空定制化报错-密码复杂度校验失败

问题描述

生产空定制化执行报错。TU报错如下:
call common_load.sh,return 1,[INFO]get pcie status from network failed, retry.,set user passwd complexity disable fail,;

环境信息

  • 软件版本:25.09_2025.09.30

操作日志打印:
2026-04-28 22:42:08 IPMI,N/A@HOST,account,{state} local user password complexity check failed

2026-04-28 22:42:09 IPMI,N/A@HOST,account,{state} local user password complexity check failed

2026-04-28 22:42:11 IPMI,N/A@HOST,account,{state} local user password complexity check failed

2026-04-28 22:42:12 IPMI,N/A@HOST,account,{state} local user password complexity check failed

2026-04-28 22:42:13 IPMI,N/A@HOST,account,{state} local user password complexity check failed

2026-04-28 22:42:14 IPMI,N/A@HOST,account,{state} local user password complexity check failed

2026-04-28 22:42:42 IPMI,N/A@HOST,account,{state} local user password complexity check failed

2026-04-28 22:42:43 IPMI,N/A@HOST,account,{state} local user password complexity check failed

app.log打印:
2026-04-28 22:42:02.067322 account ERROR: engine.lua(27): BMC.Error.Unknow: ./opt/bmc/apps/account/lualib/account_app.lua:329: attempt to index field ‘account_service_ipmi’ (a nil value)
2026-04-28 22:42:02.105167 ipmi_core ERROR: ipmi_core_app.lua(648): service bmc.kepler.event_policy, path /bmc/kepler/IpmiCmds/30/93/GetTrapAlarmSnmpVersion, call GetAll failed, org.freedesktop.DBus.Error.UnknownObject: Unknown object path /bmc/kepler/IpmiCmds/30/93/GetTrapAlarmSnmpVersion
2026-04-28 22:42:02.116849 ipmi_core ERROR: ipmi_core_app.lua(648): service bmc.kepler.event_policy, path /bmc/kepler/IpmiCmds/30/93/GetTrapCount, call GetAll failed, org.freedesktop.DBus.Error.UnknownObject: Unknown object path /bmc/kepler/IpmiCmds/30/93/GetTrapCount
2026-04-28 22:42:02.142591 account ERROR: engine.lua(27): BMC.Error.Unknow: ./opt/bmc/apps/account/lualib/account_app.lua:384: attempt to index field ‘account_service_ipmi’ (a nil value)
2026-04-28 22:42:02.278645 ipmi_core ERROR: ipmi_core_app.lua(648): service bmc.kepler.event_policy, path /bmc/kepler/IpmiCmds/30/93/SetAlarmType, call GetAll failed, org.freedesktop.DBus.Error.UnknownObject: Unknown object path /bmc/kepler/IpmiCmds/30/93/SetAlarmType
LH2640125623.tar.gz (6.4 MB)

答案内容由AI生成,仅供参考:
:white_check_mark: 总结

问题 原因 解决方案
密码复杂度无法关闭 使用了不支持的接口 BMCSet_UserPasswdComplexityCheckEnable 改用标准配置导入导出机制
日志报 account_service_ipmi 为 nil Account 启动早于 IPMI 初始化 调整启动顺序或增加依赖等待
IPMI 接口路径不存在 ipmi_core 未注册 D-Bus 服务 检查服务状态并修复初始化流程

结论:当前问题主要由 组件启动顺序错误 + 使用非标准接口 导致。推荐通过标准配置管理接口进行安全策略定制,并确保系统服务间依赖关系正确

点击此处查看详细分析解答

生产空定制化报错:密码复杂度校验失败问题分析与解决方案


:magnifying_glass_tilted_left: 问题概述

在执行 生产空定制化 流程时,系统报错 set user passwd complexity disable fail,并伴随大量日志提示:

{state} local user password complexity check failed

同时,app.log 中出现关键性错误:

account ERROR: attempt to index field ‘account_service_ipmi’ (a nil value)
ipmi_core ERROR: Unknown object path /bmc/kepler/IpmiCmds/30/93/...

环境信息

  • 软件版本:openUBMC 25.12 LTS SP1
  • 目标操作:通过自动化脚本(common_load.sh)关闭本地用户密码复杂度检查,但操作失败。

:puzzle_piece: 根本原因分析

根据上下文信息和系统行为,问题的根源并非单纯的配置未生效,而是 Account 组件在启动或初始化阶段未能正确加载 IPMI 相关服务,导致后续调用失败。

1. 关键错误日志解析

:cross_mark: account ERROR: attempt to index field ‘account_service_ipmi’ (a nil value)

该错误发生在 account_app.lua:329:384,表明 Account 组件尝试访问 account_service_ipmi 字段时其值为 nil。这说明:

  • IPMI 子系统尚未初始化完成或未正常注册到 D-Bus 上
  • Account 组件启动早于 IPMI 核心服务(ipmi_core),造成依赖服务未就绪
  • 因此,当定制脚本尝试通过 BMCSet_UserPasswdComplexityCheckEnable 接口关闭密码复杂度时,Account 组件无法与 IPMI 通信,导致操作失败

:cross_mark: Unknown object path /bmc/kepler/IpmiCmds/30/93/...

此为 D-Bus 错误,表示尝试调用一个不存在的对象路径。这进一步验证了:

  • IPMI 命令接口未被正确注册
  • 可能由于 ipmi_core 应用未完全启动或初始化异常

2. 密码复杂度检查为何无法关闭?

尽管用户尝试设置 BMCSet_UserPasswdComplexityCheckEnable=off,但实际不生效,原因如下:

配置项 说明 是否生效
BMCSet_UserPasswdComplexityCheckEnable 控制是否启用密码复杂度检查 :cross_mark: 当前不支持该定制项(见 Knowledge Graph)
BMCSet_UserPasswdComplexityForeverEnable 是否强制永久开启密码复杂度检查 :white_check_mark: 一旦启用,不可关闭

:warning: 根据已知知识:在 account 组件中,BMCSet_UserPasswdComplexityCheckEnable 接口当前不被支持GitCode Issue #99),修改该参数不会产生实际效果。

此外,若 BMCSet_UserPasswdComplexityForeverEnable == on,则密码复杂度检查将被永久锁定为开启状态,即使其他参数设为 off 也无效。


:white_check_mark: 解决方案

方案一:确保服务启动顺序正确(优先解决根本问题)

由于 account 依赖 ipmi_core,必须保证 IPMI 服务先于 Account 组件启动

:white_check_mark: 推荐做法:

  1. 检查系统启动流程中各组件的加载顺序

    • 确保 ipmi_coreaccount 之前完成初始化
    • 可在 init.d 或 systemd 配置中添加依赖关系:
      # 示例(systemd风格伪代码)
      After=ipmi_core.service
      Requires=ipmi_core.service
      
  2. 延迟 Account 自定义逻辑的执行时机

    • 不应在系统初始化早期直接调用涉及 IPMI 的接口
    • 改为监听 IPMI_READY 事件后再执行密码复杂度设置逻辑
  3. 增加重试机制

    • 若检测到 account_service_ipmi 为 nil,进行指数退避重试(如 5s 后再试,最多 3 次)

方案二:确认是否误用了不支持的接口

:cross_mark: 当前无效接口:

  • BMCSet_UserPasswdComplexityCheckEnable=off不支持关闭
  • BMCSet_UserPasswdComplexityForeverEnable=off → 若已设为 on,也无法关闭

:white_check_mark: 正确做法(如需关闭密码复杂度):

方法 1:使用支持的配置导入导出机制(推荐)

根据文档【【已评审】部分密码管理安全定制选项支持配置导入导出】:

密码复杂度由两个属性控制:

  • 密码复杂度能力锁(不可逆)
  • 密码复杂度使能状态

应使用配置导入导出功能统一设置,而非直接调用底层接口。

推荐配置项(YAML 示例)

PasswdSetting:
  PasswordComplexityStatus: Disabled  # 显式禁用
  StrongPasswordLocked: false         # 确保未被永久锁定

并通过合规的 configure import 命令应用。

方法 2:验证当前是否已被“永久启用”

# 查询当前策略状态(需使用 ipmcget 或 Redfish)
ipmcget -t user -d complexity_status

如果返回 ForeverEnabled: true,则无法通过常规手段关闭,只能:

  • 升级或刷写新固件
  • 使用出厂重置模式重新定制

方案三:修复 Lua 脚本中的空指针异常

account_app.lua 中增加判空保护:

if account_service_ipmi == nil then
    BMC.Error("IPMI service not ready, delay password complexity operation")
    return
end

避免因服务未就绪导致进程崩溃或静默失败。


:hammer_and_wrench: 建议操作步骤

  1. 检查当前密码复杂度锁定状态

    ipmcget -t security -d passwd_complexity_policy
    

    查看是否已进入 ForeverEnable 模式。

  2. 确认 ipmi_core 是否正常运行

    systemctl status ipmi_core
    dbus-send --system --dest=org.freedesktop.DBus --type=method_call --print-reply / org.freedesktop.DBus.ListNames | grep kepler
    
  3. 修改定制流程逻辑

    • common_load.sh 中的密码复杂度操作后置到系统完全启动之后
    • 或加入等待机制:
      while ! ipmcget -d --version > /dev/null 2>&1; do sleep 1; done
      # 再执行密码设置
      
  4. 升级组件版本

    • 升级 account 组件至最新稳定版(如 1.110.31@openubmc/stable),可能已修复相关兼容性问题。
  5. 使用标准配置导入功能代替直接调用接口

    • 使用 configure import 导入预定义的安全策略文件,确保一致性。

:books: 参考资料

  • GitCode - account 组件 issue #99BMCSet_UserPasswdComplexityCheckEnable 不支持
  • openUBMC 文档《【已评审】部分密码管理安全定制选项支持配置导入导出》
  • 知识图谱实体:Account Component, BMCSet_UserPasswdComplexityCheckEnable, ubmc_assistant 回复记录

:white_check_mark: 总结

问题 原因 解决方案
密码复杂度无法关闭 使用了不支持的接口 BMCSet_UserPasswdComplexityCheckEnable 改用标准配置导入导出机制
日志报 account_service_ipmi 为 nil Account 启动早于 IPMI 初始化 调整启动顺序或增加依赖等待
IPMI 接口路径不存在 ipmi_core 未注册 D-Bus 服务 检查服务状态并修复初始化流程

结论:当前问题主要由 组件启动顺序错误 + 使用非标准接口 导致。推荐通过标准配置管理接口进行安全策略定制,并确保系统服务间依赖关系正确

  1. 查看了日志,account版本为account/1.90.43.004@kl.ibmc.master_dev/stable, 是你们修改后的版本。报错行跟account仓库br_release_openUBMC2512_20261231_LTS_SP1分支源码对不上,无法定位。
    /opt/bmc/apps/account/lualib/account_app.lua:329: attempt to index field ‘account_service_ipmi’ (a nil value)

  2. 操作日志问题,已在PR里修复。

  3. 社区openUBMC 25.12 LTS SP1 对应account版本1.101.4

版本写错了,应该是基于你们930的社区版本。

当前930版本已EOL,请更新到25.12 LTS版本