ipmitool user priv不支持CALLBACK/OEM,test执行报错

在验证 openUBMC / IPMI 用户管理功能 时,遇到两个和 ipmitool user 相关的问题,想请教下大家的经验。


问题一:ipmitool user priv 不支持设置 CALLBACK / OEM 权限

当前测试发现:

ipmitool user priv 2 1 1
IPMI command failed: Unspecified error
Set Privilege Level command failed (user 2)

在设置以下权限时不生效或直接失败:

  • CALLBACK

  • OEM

问题二:ipmitool user test 返回 Unknown error

使用如下命令测试用户认证:

[root@localhost ~]# ipmitool user test 2 16
Password for user 2: 
Unknown error

想确认几点:

  1. CALLBACK / OEM privilege 是否在 openUBMC 中 默认未实现或被裁剪

  2. user test是不支持还是使用方法有误?

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

关于 ipmitool user privipmitool user test 在 openUBMC 中使用问题的分析

根据您在测试 openUBMC 时遇到的两个与 ipmitool user 相关的问题,结合已有技术资料和社区反馈,以下是详细解答:

问题一:ipmitool user priv 不支持设置 CALLBACK / OEM 权限

现象描述

执行命令:

ipmitool user priv 2 1 1

返回错误:

IPMI command failed: Unspecified error
Set Privilege Level command failed (user 2)

原因分析

  1. 命令依赖通道号(Channel Number)

    • ipmitool user priv 命令在多通道环境下必须指定有效的通道号。
    • 其底层调用的是 Set Privilege Level Command,该命令需要一个有效的 Channel Number 参数才能正确执行。
    • 如果未提供或提供了无效的通道号,系统将返回“Parameter out of range”或“Unspecified error”。
  2. 权限设置受通道绑定影响

    • 单通道场景 下,设置通道权限会直接映射到用户权限。
    • 多通道场景 下,ipmitool user priv 仅设置特定通道的权限,不会自动应用于所有通道,除非显式指定。
  3. CALLBACK / OEM 权限实现状态

    • 虽然 openUBMC 支持 IPMI 2.0 协议,但某些特权级别(如 CALLBACK、OEM)可能因安全策略或功能裁剪而未完全实现。
    • 社区反馈表明 openUBMC 对部分高级权限进行了限制,尤其在普通用户管理场景中。

解决建议

  • 明确指定通道号,例如:
    ipmitool -I lanplus -H <BMC_IP> -U <username> -P <password> channel setaccess <channel> <user_id> privilege=callback
    
  • 检查当前系统的通道配置,确认是否为多通道环境。
  • 参考 account_service.lua 中的 check_ipmi_host_user_mgnt_enabled 函数逻辑,确保 IPMI 用户管理功能已启用。

问题二:ipmitool user test 返回 Unknown error

现象描述

执行命令:

ipmitool user test 2 16

输入密码后返回:

Unknown error

原因分析

  1. user test 功能支持情况

    • ipmitool user test 是用于验证用户凭据的命令,但在某些 BMC 实现中可能被禁用或未实现。
    • 根据 openUBMC 的设计原则,出于安全性考虑,部分调试类命令可能默认关闭或受限。
  2. 用户 ID 与权限匹配问题

    • 用户 ID 2 通常是“Callback”级别用户,若其权限配置不完整或被限制,可能导致认证失败。
    • 错误码 16 表示尝试设置的权限等级超出允许范围。
  3. 历史兼容性问题

    • 某些旧版本 ipmitool(如低于 1.8.18)对 openUBMC 的命令支持不完整,可能出现“Unknown error”。
    • 推荐使用较新版本的 ipmitool 并明确指定用户名和认证方式:
      ipmitool -U <username> user test <userid> <hex_password_length>
      

综合结论与建议

项目 是否支持 说明
ipmitool user priv 设置 CALLBACK/OEM 部分支持 需明确通道号,且受限于系统配置和安全策略
ipmitool user test 可能不支持或受限 openUBMC 可能出于安全考虑禁用此命令

建议措施:

  1. 优先使用标准命令格式

    ipmitool channel setaccess <channel> <userid> [callin=on|off] [ipmi=on|off] [link=on|off] [privilege=level]
    
  2. 确认 BMC 版本与工具兼容性

    • 当前测试环境为 BMC Version 25.03,建议升级至 25.06 或更高版本,以获得更完整的 IPMI 支持。
  3. 参考测试失败记录

    • 文件 iTestSmart_OpenUBMC问题反馈IPMI普通用户权限管理测试结果Fail_1691.json 已记录类似问题,可作为诊断参考。
  4. 联系社区确认实现状态

    • 如 hxmygcs 所述,openUBMC 社区已明确某些功能“暂无计划”实现(如 BMC 温重启)。建议确认 CALLBACK/OEM 权限是否属于裁剪范围。

:light_bulb: 提示:对于生产环境,推荐通过 Web 界面或 Redfish API 进行用户权限管理,避免使用低层 IPMI 命令带来的兼容性风险。

相关链接:

  1. 【iTestSmart OpenUBMC问题反馈】IPMI普通用户权限管理,测试结果Fail。
  2. ipmi命令设置用户权限不生效的问题
  3. ipmitool 版本对openubmc 的支持能力如何
  4. 添加一条IPMI命令实操分享——设置所需的风扇速度

问题一: 确认下 2号用户是否是唯一的管理员,最后一个管理员是不能被删除和修改到非管理员权限。可以新增个管理员试试,有问题再查看下app.log 里面的报错信息。
问题二: ipmitool user test 是支持的, 源码实现在account组件。 查看下app.log 里面的报错信息

多谢啦,问题一:保证有管理员的情况下设置OEM和CALLBACK成功了。
问题二:
输入正确密码openUBMC@2025 后回显Unknow Error,;从日志能看到解密失败,但是不理解原因, 还有就是test <16|20> [<password]>这里的16|20是什么意思,代表什么配置吗?
2030-12-02 04:32:45.669340 account ERROR: C: [WSEC_CBB][405] (UTC) 2030-12-02 04:32:45 Key (DomainId=6, KeyId=5) not found
2030-12-02 04:32:45.669725 account ERROR: C: [WSEC_CBB][1891] (UTC) 2030-12-02 04:32:45 MemGetMkByIDHash fail 268
2030-12-02 04:32:45.672154 account ERROR: C: [WSEC_CBB][755] (UTC) 2030-12-02 04:32:45 [SDP] GetWorkKeyByIDHash get WK failed 268.
2030-12-02 04:32:45.672530 account ERROR: C: [WSEC_CBB][913] (UTC) 2030-12-02 04:32:45 [SDP] SdpDecryptDataV2 get WK failed 268.
2030-12-02 04:32:45.673690 account ERROR: kmc_client.lua(46): decrypt failed, decrypt failed, ret = 268
2030-12-02 04:32:45.674635 account ERROR: C: [WSEC_CBB][405] (UTC) 2030-12-02 04:32:45 Key (DomainId=6, KeyId=5) not found
2030-12-02 04:32:45.675548 account ERROR: C: [WSEC_CBB][1891] (UTC) 2030-12-02 04:32:45 MemGetMkByIDHash fail 268
2030-12-02 04:32:45.676275 account ERROR: C: [WSEC_CBB][755] (UTC) 2030-12-02 04:32:45 [SDP] GetWorkKeyByIDHash get WK failed 268.
2030-12-02 04:32:45.676706 account ERROR: C: [WSEC_CBB][913] (UTC) 2030-12-02 04:32:45 [SDP] SdpDecryptDataV2 get WK failed 268.
2030-12-02 04:32:45.683836 iam ERROR: init.lua(107): get multihost obj failed, ./opt/bmc/libmc/lualib/mc/mdb/init.lua:500: invalid interface:bmc.kepler.Managers.Multihost
2030-12-02 04:32:45.685090 iam ERROR: engine.lua(27): BMC.Error.Unknow: pack failed, error: pack binary failed: unknow field CompletionCode.

  1. 关于 <16|20> 的含义, 参考【已评审】IPMI标准命令Set User Password按标准实现校验密码数据长度 - #2
  2. kmc 解密的问题, 新增用户测试也是报这个错么。

非Administrator的用户测试可以, 请问这里是有什么限制,不允许测试Administrator用户?

这种抛错一般是因为ksf的密文和数据库中的存储不匹配了,请问下环境之前有做什么操作,比如恢复出厂设置、不保留升级之类的,看下重新设置密码之后是否还会出现这个报错

1 个赞

@limingfeng 新建1个管理员用户进行测试是否可以? 如果可以,那可能是环境异常,原因如 chenhaoyang 所述

修改密码后测试Administrator用户成果了,应该是环境问题。但不确定具体原因。 多谢解答~

从V2升级过渡包,再升级V3,可能导致该问题吗?