【SSH】【首次登录策略】有的环境ssh登录会按照首次登录策略修改密码

// 此模板仅供参考,如果不适用可以修改

问题描述

我们发现有的环境新增用户,在ssh登录的时候会强制用户修改初始密码,但是有的环境又不需要。

这个首次登录策略 - 强制修改的配置,是在哪里修改,可以控制ssh是否应用这个策略?

感觉这个选项是有个配置来设置ssh是否生效强制修改策略的,我想知道在哪个地方修改这个配置。

环境信息

openUBMC 25.12

重现步骤

新增用户

期望结果

希望了解到如何设置这个配置

实际结果

[实际发生了什么,包含错误信息]

尝试过的解决方案

[列出您已经尝试过的解决方案及结果]

分析结论

[详细总结您对此问题的分析结论]

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

总结与建议

需求 解决方案
统一控制所有用户首次登录是否强制改密 修改全局策略 InitialPasswordNeedModify
仅对特定用户强制改密 使用 ipmcset 或 Redfish 设置 FirstLoginPolicy
禁用 SSH 登录时的强制改密 将策略设为 PromptPasswordResetnull
排查密码修改失败问题 检查密码复杂度、字符合法性、日志 /var/log/app.log

:blue_book: 建议操作路径

  1. 登录 Web 或 CLI,确认目标用户的 FirstLoginPolicy
  2. 根据实际需求使用 ipmcset 命令修改策略
  3. 测试 SSH 登录行为是否符合预期
点击此处查看详细分析解答

SSH 首次登录强制修改密码策略配置说明

在 openUBMC 环境中,用户首次通过 SSH 登录时是否需要强制修改密码,是由系统的 首次登录策略(FirstLoginPolicy) 控制的。该策略决定了新用户或密码被重置后的用户在首次登录时的行为。


:pushpin: 问题核心解析

您观察到的现象——有的环境 SSH 登录会强制改密,有的不会——正是由于不同环境中 FirstLoginPolicy 的配置不同所致。

该策略不是独立作用于某个接口的开关,而是可以按用户粒度、甚至按登录方式(如 SSH、Web、IPMI 等)分别控制。因此,您可以精准地设置某类用户通过 SSH 登录时是否需要修改密码。


:white_check_mark: 相关核心组件与配置项

1. FirstLoginPolicy(首次登录策略)

  • 类型:枚举值(enum)
  • 可能取值
    • ForcePasswordReset强制修改密码(首次登录必须改密,否则无法继续)
    • PromptPasswordReset提示修改密码(建议修改,但可跳过)

:warning:FirstLoginPolicy 设置为 ForcePasswordReset 时,用户通过 SSH 登录会立即被要求修改密码;若设置为 PromptPasswordReset,则仅提示,非强制。


2. 控制策略的接口方法

openUBMC 提供了 D-Bus/Redfish 接口用于管理首次登录策略:

方法 说明
GetFirstLoginModifyPolicy() 获取当前用户的首次登录策略
SetFirstLoginModifyPolicy(user_id, policy) 设置指定用户的首次登录策略

例如,在命令行中可调用:

ipmcset -t user -d firstloginpolicy -v <UserID> ForcePasswordReset

3. SSH 登录流程中的策略触发机制

  • 用户首次通过 SSH 登录时,系统检测其账户属性中的 FirstLoginPolicyPasswordChangeRequired 标志。
  • 若策略为 ForcePasswordReset,则 SSH 会话将中断正常 shell 启动流程,转而引导用户进入密码修改流程。
  • 若用户输入的新密码不符合复杂度规则或包含非法字符(如示例中的 “Input password contains incorrect characters”),则报错并断开连接。

:magnifying_glass_tilted_left: 示例错误原因:用户尝试设置的密码中包含了不允许的特殊字符,而系统仅接受 ~!@#$%^&*()_-=+|\[]{};':".,<>/? 等白名单字符。


:wrench: 如何配置 SSH 是否启用首次登录强制修改?

方案一:通过 Web 界面设置(推荐)

  1. 登录 openUBMC Web 管理界面
  2. 进入 用户与安全 > 本地用户
  3. 编辑目标用户(或创建新用户)
  4. 找到 “首次登录策略” 字段:
    • 选择 “强制修改密码”“提示修改密码”
  5. 保存设置

:light_bulb: 注意:Web 界面中设置的策略通常同时作用于 SSH、IPMI、Redfish 等所有接口,除非有定制化逻辑分离。


方案二:通过 CLI 命令行设置(精细控制)

使用 ipmcset 命令设置指定用户的首次登录策略:

# 强制用户 ID 3 首次登录时修改密码
ipmcset -t user -d firstloginpolicy -v 3 ForcePasswordReset

# 查询当前策略
ipmcget -t user -d firstloginpolicy -v 3

:white_check_mark: 支持用户级别配置,适合自动化部署场景。


方案三:出厂定制化配置(适用于批量设备)

在系统固件构建阶段,可通过以下参数预设策略:

Custom_AdminFirstLoginPolicy=1        # 0: 提示, 1: 强制
BMCSet_CustomFirstLoginPolicyX=1      # X 为用户 ID,设置特定用户的策略

这些配置写入镜像后,设备首次启动即生效。


方案四:通过 Redfish API 操作(远程管理)

PATCH /redfish/v1/AccountService/Accounts/{Id}
{
  "Oem": {
    "OpenUBMC": {
      "FirstLoginPolicy": "ForcePasswordReset"
    }
  }
}

:hammer_and_wrench: 关键注意事项

事项 说明
密码复杂度 若用户修改密码失败,请确保新密码符合系统复杂度要求(包含大小写字母、数字、特殊字符,长度≥8)
非法字符过滤 系统明确限制可用特殊字符集,避免使用 Unicode 或未授权符号
SSH 服务状态 确保 SSH 服务正常运行且 sshd_config 中未禁用密码认证
策略优先级 若用户同时具有紧急登录权限(Emergency User),则可能绕过首次登录策略

:puzzle_piece: 为什么有些环境有策略,有些没有?

原因 说明
镜像版本差异 不同版本的 openUBMC 镜像默认策略不同(如 25.03 vs 25.12)
定制化配置 某些项目在构建时关闭了全局首次登录策略
用户创建方式不同 通过脚本创建的用户可能未显式设置 FirstLoginPolicy,继承默认值

可通过以下命令查看系统默认策略:

busctl get-property bmc.openubmc.account GlobalAccountConfig InitialPasswordNeedModify

:white_check_mark: 总结与建议

需求 解决方案
统一控制所有用户首次登录是否强制改密 修改全局策略 InitialPasswordNeedModify
仅对特定用户强制改密 使用 ipmcset 或 Redfish 设置 FirstLoginPolicy
禁用 SSH 登录时的强制改密 将策略设为 PromptPasswordResetnull
排查密码修改失败问题 检查密码复杂度、字符合法性、日志 /var/log/app.log

:blue_book: 建议操作路径

  1. 登录 Web 或 CLI,确认目标用户的 FirstLoginPolicy
  2. 根据实际需求使用 ipmcset 命令修改策略
  3. 测试 SSH 登录行为是否符合预期

如需进一步排查具体环境行为差异,建议收集以下信息:

  • ipmcget -t user -d firstloginpolicy -v <UserID>
  • /etc/passwd/etc/shadow 中用户状态
  • /var/log/app.log 中与 password reset 相关日志

技术支持参考文档:openUBMC 安全配置指南、账户管理模块设计文档、Redfish 扩展规范

test

参考机器人的回答。

  • 首次登录相关全局属性
    • InitialPasswordNeedModify:首次登录总体开关,关闭后会同步关闭以下其他全局属性;
      关闭后Web页面新建、编辑用户不显示首次登录策略;用户首次登录无需修改密码;
    • InitialPasswordPromptEnable:首次登录人机接口,开启后用户在建议修改密码策略下首次登录Web提示修改密码;
    • InitialAccountPrivilegeRestrictEnabled:首次登录机机接口,开启时用户强制修改密码策略下首次登录Redfish、IPMI仅有ConfigSelf权限;
  • 首次登录相关用户属性
    • FirstLoginPolicy:首次登录策略1.建议修改密码:PromptPasswordReset,2.强制修改密码:ForcePasswordReset;

有些环境当用户设置为强制修改,web会强制修改,但是ssh却跳过了。不同环境表现不一致,我想知道ssh的首次登录策略是哪个属性控制的?

或者有没有接口可以控制新建用户的默认首次登录策略?

没有单独针对ssh的策略属性控制。

区别点在于, 如果环境上用的debug包(bingo buildbingo build -bt debug构建的包), 使用ssh登录上去是用的/bin/bash,不会触发首次登录检查。 可以手动执行clp_commands触发。
如果是release包(bingo build -bt release构建的包), 使用ssh登录上去是用的clp_commands,会直接触发首次登录检查。