【栏目介绍:“玩转OurBMC”是OurBMC社区开创的知识分享类栏目,主要聚焦于社区和BMC全栈技术相关基础知识的分享,全方位涵盖了从理论原理到实践操作的知识传递。OurBMC社区将通过“玩转OurBMC”栏目,帮助开发者们深入了解到社区文化、理念及特色,增进开发者对BMC全栈技术的理解。

欢迎各位关注“玩转OurBMC”栏目,共同探索OurBMC社区的精彩世界。同时,我们诚挚地邀请各位开发者向“玩转OurBMC”栏目投稿,共同学习进步,将栏目打造成为汇聚智慧、激发创意的知识园地。】

用户管理是系统中运维管理的重要组成部分,主要涉及权限的划分和资源的分配。通过为不同用户设定不同的权限级别,可以确保系统的安全性和稳定性。例如,管理员拥有最高权限,可以进行系统配置、用户管理、网络配置等操作;而普通用户则仅可以查看系统的配置状态。

在OpenBMC软件栈中,默认支持本地用户和ldap远端用户两种模式。前者将用户信息保存在BMC文件系统中,通过shadow提供的工具(如useradd、usermod等)或glibc提供的函数接口(如getspnam\_r、fgetpwent\_r等)进行管理;后者将用户的信息保存在ldap服务器的数据库中,由ldap统一管理,通过BMC端的ldap客户端通过网络进行访问。两种模式的认证均由linux-pam模块完成,该模块支持动态增加,如OpenBMC中,添加pam_ldap.so模块用于ldap用户的认证,添加pam_ipmicheck.so模块用于ipmi用户密码的检查。

用户管理流程

在OpenBMC中,用户管理整体框如下图所示:

下面对各模块功能进行介绍:

  1. phosphor-user-manager(简称user\_mgr)和phosphor-ldap-conf应用,基于dbus编程的思想,将底层操作的接口封装成方法或者属性,暴露到DBUS总线上,供其他程序调用。User\_mgr主要提供用户的创建、修改、删除、查询等dbus方法或者属性,用于用户信息管理用户,phosphor-ldap-conf主要提供配置ldap服务器信息(如uri、BaseDN、BindDN等)和ldap用户分组权限的功能。
  2. ipmid和bmcweb是用户管理的对外操作接口。
  3. Libpam主要配置用户认证、账户信息、密码和会话的规则,包含密码的复杂度、账户的锁定时间和尝试登录次数、认证方式等;
  4. shadow-utils提供基础的用户管理工具,配置文件为/etc/login.defs;
  5. nslcd是轻量型的ldap客户端,用于访问ldap服务器,配置文件/etc/nslcd.conf;
  6. glibc提供查询获取修改用户信息的底层接口,获取的数据源及其优先级由/etc/nsswitch.conf中指定;

下面结合实际的代码,讲述用户管理和认证的流程。

  • 查询修改用户信息

ipmi/bmcweb发起请求,调用dbus的方法创建用户、查询、删除用户或修改某用户信息或者分组,openbmc中用户的权限和访问通过用户所在的分组进行控制,如"redfish"分组的用户可调用redfish接口,"priv-admin"分组的用户具有管理员权限。user_mgr暴露的可调用的dbus的接口和属性如下;

1. 收到dbus调用后,user_mgr执行对应的动作,修改用户则调用shadow提供的工具,如useradd(添加用户)、usermod(修改用户)、userdel(删除)等,查询分组和用户信息,则调用glibc库和直接遍历本地文件获得;

2. shadow工具会根据login.defs中的配置规则,创建、修改用户信息;如果符合规则,则调用glibc库函数。然后根据nsswitch中的配置用户账户信息的数据源及优先级,修改最新的用户信息到对应的数据源,下面配置表示优先为本地文件保存的用户,其次为systemd中自动创建的临时用户(如容器、服务进程的动态用户),最后为ldap用户。

3. 如果是创建用户密码或者修改密码,在创建用户完成后,会调用libpam库提供的pam\_start/pam\_chauthtok/pam\_end更新用户的密码信息,根据pam\_start打开的文件中的规则对密码进行限制,文件在路径为/etc/pam.d下,如bmcweb的配置文件为”webserver”,密码规则使用公共的密码规则;

  • 用户认证

ipmi/bmweb在用户认证前,检验用户的权限和分组,然后调用libpam提供的pam\_start/pam\_authenticate函数接口,根据pam的规则配置,传入用户信息进行认证。

如上述bmcweb中的配置的认证和账户规则,在使用公共规则的基础上,去掉非本地用户的redfish分组校验。ipmi则是使用公共的规则。

  • pam规则配置

PAM 配置文件(通常位于 /etc/pam.d/ 目录下)由多个模块组成,每个模块属于一种类型(如 account、auth、session、password)。配置格式为:<类型><控制标志><模块路径><模块选项>,如下述密码规则的配置。

PAM中的模块选项,有些在模块名后面填写,有些在/etc/sucurity/中的文件配置(Linux-PAM 1.6更新),配置文件为模块名.conf,如pam_failock配置文件为faillock.conf。下面介绍几个BMC使用的pam模块及其选项说明

pam_faillock模块用于记录并限制用户的登录尝试次数,以防止暴力破解攻击。当用户登录失败次数超过预设阈值时,账户会被临时锁定。

pam_pwquality模块用于密码复杂度的校验,保证密码的安全性和健壮性。

pam_pwhistory模块用于限制密码重用,防止用户循环使用旧密码绕过安全策略。

欢迎大家关注OurBMC社区,了解更多BMC技术干货。

OurBMC社区官方网站:

https://www.ourbmc.cn/


OurBMC
28 声望21 粉丝

OurBMC社区是由基础软硬件企业、第三方机构、高等院校、个人开发者等各方共同参与建设的开源社区,社区基于开放、平等、协作、创新的基本原则,携手社区成员,共同构建自主、先进、软硬一体的BMC技术全栈,共同推...