5.5.12的包概率性出现用户无法删除的情况

问题描述

如图,17号用户在带内被删除时删除失败,查看调试日志发现:

是因为用户还在线

查看iam资源树发现

OnlineDeletable确实值为false

这个属性我看了下,【已评审】支持当前用户不可删除协作接口评审 - Interface SIG / Interface评审 - openUBMC 论坛 是去年九月份开发的功能,默认应该是true,没有设置操作日志打印,我看不到机器上属性的修改记录,定制化项文档服务器出厂定制化配置 | 文档中心 | openUBMC 里也没看到

现在的问题是:

1.这个属性是怎么被改成false的呢?我们一批生产机器有七八台里属性值为false,不可能是人为手动修改,难道是定制化项控制的,只是定制化项文档没有更新这个项的介绍?

2.我让装备的同事:带内删除用户→删除失败→收集文件,提供给了我一份收集日志,日志里

17号用户是在线状态的,但是iam资源树下session路径没有该用户创建的会话,是在哪里还残留会话呢?

环境信息

------------------- iBMC INFO -------------------
IPMC CPU: Hi1711
IPMI Version: 2.0
Active iBMC Version: 5.05.12.31
Active iBMC Build: 037
Active iBMC Built: 20:27:08 Jan 27 2026
Backup iBMC Version: 5.05.12.31
Available iBMC Version: 5.05.12.31
Available iBMC Build: 037
Active Uboot Version: 20.8.10.1 (20:54:09 Jan 27 2026)
Backup Uboot Version: 20.8.10.1 (20:54:09 Jan 27 2026)
Active Secure Bootloader Version: 20.8.10.1 (20:53:57 Jan 27 2026)
Backup Secure Bootloader Version: 20.8.10.1 (20:53:57 Jan 27 2026)
Active Secure Firmware Version: 20.8.10.1 (20:53:58 Jan 27 2026)
Backup Secure Firmware Version: 20.8.10.1 (20:53:58 Jan 27 2026)

iam/1.21.65@hw.ibmc.release/rc

HuaKunTG225B2_2102315PGMP0RB100143_20260403-0211.tar.gz.txt (5.4 MB)

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

:white_check_mark: 总结回答

问题 回答
1. OnlineDeletable 是如何变为 false 的? 很可能是通过 出厂定制化配置、OEM 镜像或自动化部署脚本 批量设置的。该属性可通过资源协作接口配置,默认值为 true,目前文档未覆盖此字段,建议补充定制化说明。
2. 用户已登出为何 IsOnline=true? 系统存在 会话状态残留,可能因会话未完全释放、IAM 处理异常或网络中断导致。建议检查 /bmc/kepler/AccountService/Sessions 路径下的会话对象。
3. 如何解决? 可临时启用 OnlineDeletable=true 或强制终止残留会话后再删除;长期建议补充日志、完善文档、优化提示。
点击此处查看详细分析解答

关于用户无法删除问题的分析与解答

根据您提供的日志和系统信息,以下是针对用户无法删除问题的综合分析与解答。


:magnifying_glass_tilted_left: 问题概述

在 iBMC 版本 5.05.12.31 环境中,通过带内(IPMI)尝试删除用户 HKZYB(ID 17)时操作失败,系统返回错误:

Delete user17's username (HKZYB) failed

调试日志进一步显示:

Delete account failed, account (user43) is online.
AccountNotModified: The account modification request failed.

尽管用户已执行注销动作,但系统仍判定其为“在线”状态,导致用户无法被删除。


:puzzle_piece: 核心问题分析

一、导致删除失败的根本原因

根本原因是 OnlineDeletable 属性被设置为 false,并且目标账户当前处于 IsOnline = true 状态。

1. OnlineDeletable = false 时的删除策略

根据 【已评审】支持当前用户不可删除协作接口评审 文档(文档ID: 1)定义:

  • 当 OnlineDeletable 为 false 时,系统将禁止删除任何在线用户。
  • 判断依据是 IsOnline 属性。
  • 此功能用于满足特定客户对“登录状态下禁止被删除”的安全需求。

:white_check_mark: 当前环境确认:

/bmc/kepler/AccountService/AccountPolicies/local
    .OnlineDeletable = false

这表示系统启用了“在线用户不可删除”的安全策略。

2. 目标用户名确认在线

从资源树信息可见:

/bmc/kepler/AccountService/Accounts/17
    .IsOnline = true

尽管该用户已执行过 logout,但由于某些残留会话未被正确清理,系统仍将其标记为在线。

因此,在 OnlineDeletable=false 的策略下,系统拒绝删除在线账户,返回 AccountNotModified 错误码,属于预期行为。


二、OnlineDeletable 被设为 false 的可能来源

您提出的问题是:该参数为何在多台生产机器上统一为 false?是否由定制化配置控制?

:white_check_mark: 极有可能由 出厂定制化(Factory Customization)或 OEM 配置包 修改

尽管当前公开的定制化文档未列出此项,但以下几点可佐证:

证据 说明
评审已实现且可配置 OnlineDeletable 是 bmc.kepler.AccountService.AccountPolicy 的一个可写属性,支持通过资源协作接口动态设置。
默认值应为 true 评审文档明确指出默认值为 true,即“允许删除在线用户”。
多个设备批量发生 多台生产设备同时出现该情况,基本排除人为手动修改,指向统一的配置源(如定制化配置脚本、OEM 镜像、部署模板)。

:warning: 推测:
某些 OEM 客户或产线可能出于安全管理要求,通过 BMCSet 接口、定制化脚本或持久化配置文件 显式将 OnlineDeletable 设为 false,但未在通用文档中公开此字段。

:white_check_mark: 建议排查方向:

  1. 检查是否使用了非标准 OEM Customization Package 或 BMCSet_OEM_* 类型的定制接口。
  2. 查验 manifest 仓中是否存在对 account 组件的 pre-start 配置脚本。
  3. 检查是否存在通过 busctl 或 mdbctl 批量设置属性的部署流程。
  4. 确认是否有通过 Redfish/SNMP 在初始化阶段进行系统配置的自动化工具。

三、用户“已登出”但 IsOnline = true 的会话残留问题

这是一个关键矛盾点:用户已登出,但在资源树中仍显示在线。

:magnifying_glass_tilted_right: 常见原因分析:

原因 说明
1. 会话未被完全销毁 Redfish/SSH/KVM/WEB 等接口退出时,若网络异常、服务卡顿或异常中断,可能导致会话残留。
2. IAM 组件未及时更新状态 若 session_service 出现处理延迟或异常,IsOnline 标志未同步清除。
3. 多因素认证或插件延迟通知 若集成了 LDAP/Radius 等外挂认证模块,退出时若回调失败,主系统状态未更新。
4. 资源树缓存未刷新 使用 busctl 查询时看到的是运行时状态,部分组件可能存在缓存延迟。

:round_pushpin: 日志佐证:

  • 用户确实执行了登出:
    User HKZYB(192.168.2.85) logout successfully
    
  • 但紧接着出现:
    Delete account failed, account (user43) is online.
    

说明系统内部仍有活动会话或状态未被清理。

:white_check_mark: 推荐排查命令:

# 检查是否存在该用户的会话对象
busctl tree org.openbmc.IAM
# 查看具体路径
busctl introspect org.openbmc.IAM /bmc/kepler/AccountService/Sessions --all

# 查找与用户 HKZYB 或 ID 17 相关的 session
busctl call org.openbmc.IAM /bmc/kepler/AccountService/Accounts/17 bmc.kepler.AccountService.ManagerAccount GetSessionList a{sv}

若返回非空列表,则证明会话未被释放。


:white_check_mark: 解决方案与建议

方案一:临时绕过限制(适用于运维)

如果确认用户实际已离线,可临时修改策略后删除:

# 临时允许删除在线用户
busctl set-property org.openbmc.AccountService \
  /bmc/kepler/AccountService/AccountPolicies/local \
  bmc.kepler.AccountService.AccountPolicy OnlineDeletable b true

# 再次尝试删除用户
ipmitool user delete 17

:warning: 注意:此操作需具备 UserMgmt 权限,且应在问题定位后恢复原策略。


方案二:强制清理会话状态

若确认用户已登出但状态未更新:

# 查找该用户的会话并手动清除(需具体路径)
busctl call org.openbmc.IAM <session_path> bmc.kepler.Session Terminate

或重启 iam 服务以重置所有会话(影响当前所有登录用户):

systemctl restart iam

方案三:长期修复建议

措施 建议
1. 补全定制化文档 若确认是通过定制化配置修改 OnlineDeletable,应在 《服务器出厂定制化配置》文档 中补充该字段说明。
2. 增加操作日志审计能力 当前缺少对此类策略变更的日志记录。建议增强 operation_logger 模块,对 AccountPolicy 属性变更增加详细记录,例如:
User root modified OnlineDeletable from true to false。
3. Web 界面友好提示 当前删除失败仅提示 AccountNotModified,不直观。建议前端检测 IsOnline 和 OnlineDeletable,返回更清晰提示:
“用户正在在线,无法删除(受限于安全策略)”。
4. 定期会话清理机制 可配置 session_timeout 自动清理长时间空闲会话,避免状态残留。

:white_check_mark: 总结回答

问题 回答
1. OnlineDeletable 是如何变为 false 的? 很可能是通过 出厂定制化配置、OEM 镜像或自动化部署脚本 批量设置的。该属性可通过资源协作接口配置,默认值为 true,目前文档未覆盖此字段,建议补充定制化说明。
2. 用户已登出为何 IsOnline=true? 系统存在 会话状态残留,可能因会话未完全释放、IAM 处理异常或网络中断导致。建议检查 /bmc/kepler/AccountService/Sessions 路径下的会话对象。
3. 如何解决? 可临时启用 OnlineDeletable=true 或强制终止残留会话后再删除;长期建议补充日志、完善文档、优化提示。

:books: 参考依据

  • 【已评审】支持当前用户不可删除协作接口评审(Search Result ID: 1)
  • bmc.kepler.AccountService.AccountPolicy 接口定义(Document Chunk 5)
  • User Deletion 失败相关日志记录(Document Chunk 1, 4)
  • Administrator 用户操作权限模型(KG Entity)
  • Web Interface 用户管理功能(Web UI 截图信息)

如有需要,可协助设计自动化检测脚本来扫描此类问题设备。

这个IsOnline属性是在CMCC定制仓设置的src/lualib/cmcc_config.lua,会话创建设置为false,会话删除设置为true