[OpenBMC] LDAP 设定(一) - nss-pam-ldapd

news/2024/10/5 13:25:28

OpenBMC ldap设定和验证,可分成几个部分,本篇会先介绍第一个部分nss-pam-ldapd

  • nss-pam-ldapd
  • LDAP server 架设 
  • Redfish/Web设定

 

nss-pam-ldapd

 

底下 OpenBMC 对nss-pam-ldapd 的描述

Bringing the LDAP authentication module support in openbmc stack requires to pull the nss-pam-ldapd which allows the LDAP server to provide the user, passwd, group info that we normally get from the /etc flat files.
openbmc auth stack 使用nss-pam-ldapd 来引入LDAP验证模组让我们能从/etc 平面文件中取得LDAP server 提供的 user, psswd, group 资讯。


nss-pam-ldapd provides libnss-ldap(Name Service Switch module) and pam_ldap(Pluggable Authentication Module) module which delegate the work to the nslcd(daemon) that queries the LDAP server.
nss-pam-ldapd 是透过 nslcd(daemon) 使用 libnss-ldap和 pam_ldap (thin NSS and PAM modules )来实现的

pam_ldap uses the openldap client API to interact with the LDAP server.
其中pam_ldap 是使用openldap client API来和LDAP server做沟通的

因此我们在OpenBMC 的进程中可以看到nslcd这个daemon

 

path of nss-pam-ldapd in Openbmc: meta-phosphor/recipes-support/nss-pam-ldapd at master · openbmc/meta-phosphor · GitHub

open source of nss-pam-ldapd:

GitHub - arthurdejong/nss-pam-ldapd: NSS and PAM modules for lookups using LDAP

 

nss-pam-ldapd 在接下来这边会分别介绍

  • nslcd的设定档(nslcd.conf)
  • pam module
  • nss module 

💣nslcd.conf

nslcd.conf 是存放LDAP server的配置的文件,包含了base dc, binddn, bindpw 等资讯,在官方网站(https://arthurdejong.org/nss-pam-ldapd/setup)中有说明最低配置应该包含如以下: 

 在BMC中,当我们设定完ldap的连线后,会由 phosphor-ldap-conf  这个daemon来更新nslcd.conf的内容,举的例子,我们先透过redfish 来设定LDAP service ([PATCH] redfish/v1/AccountService)

 redfish 会将资料透过Dbus 由phosphor-ldap-conf  来更新nslcd.conf

 

PAM(Pluggable Authentication Modules)

在Linux中,我们常常需要用不同的机制来判断帐号密码,例如本地帐号密码,LDAP,指纹读取机等,越来越多元的帐号认证方式,就出现了PAM,可插拔身分验证模块,他可以透过使用配置文件而不是更改应用程序代码来切换安全应用程序的身份验证方法。例如密码输入错误几次就要锁几分钟,几个月要换一次密码,能不能透过LDAP登入,这些设定都记录在pam.d/* 或 pam.conf中,并且透过不同的shared library(.so)来实现

pam shared library(.so) 在obmc的位置是存放在/lib/security/*

 pam config file位在/etc/pam.d/*

 

如果我们要同时使用LDAP和local user 都能登入的话,就需要在/etc/pam.d 下编辑相关文件。在任何有呼叫pam_unix的地方,也需要呼叫pam_ldap。

以webserver 为例

 这边include common-auth,从common-auth中可以看到验证帐号的步骤分别呼叫了 pam_tally2.so, pam_unix.so and pam_ldap.so,(unix后也呼叫了ldap)

 

在user-management.md中有分别说明三个模块的目的为何

而有了以上设定,webserver就能同时使用local user 或 ldap user 登入了,流程如下图,LDAP server的相关资料会存放在nslcd.conf中

 

nsswitch(Name Service Switch)

最后,我们需要在nsswitch.conf中新增ldap 的配置供client 端验证查询使用,在pam 验证模块中,会去分别对有效帐户,密码核对,所属群组去做验证,通常在本地端会将帐户讯息存在 /etc/passwd, 密码放在 /etc/shadow (for uid),群组讯息放在/etc/group (for gid) ,但LDAP的讯息并不会存放在本地端档案中,因此我们就需要透过nss来找到相对应的database source

因此 nss 被视为任何在client端呼叫getXbyY()的介面,例如: 

 

目前支援的Name Service Switch Type有16种: aliases, bootparams, ethers, group, hosts, ipnodes, netgroup, netmasks, networks, passwd (includes shadow information), protocols, publickey, rpc, services, automount, sendmailvars

如果要启用ldap 服务的话,至少要将ldap 加到passwd, group and shadow 的映射中,在local lookup后面加上ldap。如以下

 

nsswitch.conf

也可以通过更改nslcd.conf配置来修改 NSS lookup(查找)和LDAP database之间的mapping。
在Redfish AccountService的schema中,可以看到LDAP有两个property: GroupNameAttribute
和 GroupsAttribute如下:

 

这什么意思呢? 因为在pam中识别user都是透过uid (user id), group 是透过 gid(group id),那我们也能设定不同的识别方式,就是透过MAP

如以下当在比对 uid (&(objectClass=posixAccount)(uidNumber=%d))的时候,uid就会自动map成sAccountName,那这两个property是可以为null的,所以没设定的时候这两个值是默认uid 和 gid

  1.  map passwd uid                    sAccountName
  2.  map passwd gidNumber        primaryGroupID

 

nss_pam_ldap lookup 流程如下

 

总结大概是是"NSS可以枚举有关服务/用户的信息(属于哪个组,主目录在哪里等)。PAM决定如何处理该信息"

最后附上obmc的nsswitch.conf 

 

 

原文链接:https://blog.csdn.net/yeiris/article/details/122745478

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/44152.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

某东 h5st 4.7 逆向分析

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术…

贪吃蛇小游戏Python Pygame实现

运行结果 游戏规则 1. ↑ ↓ ← → 来控制蛇的移动方向 2. 蛇吃到自己身体的任意一部分游戏结束, 自动退出窗口 3. 蛇的速度会随游戏时间增长越来越快, 与吃食物的多少 (分数) 无关 4. 蛇可以穿过边界到达另一边 5. 场上食物同时只会存在一个, 颜色随机, 但每个颜色的所得分数…

在线RSA公私钥PKCS格式互转工具

在线公私钥PKCS格式转换,支持公钥PKCS1与PKCS8格式之间相互转换,私钥PKCS1与PKCS8格式之间相互转换;PKCS1定义RSA公开密钥算法加密和签名机制,PKCS8描述私有密钥信息格式,该信息包括公开密钥算法的私有密钥以及可选的属性集等。在线RSA公私钥PKCS格式互转工具

【0基础学爬虫】爬虫基础之自动化工具 DrissionPage 的使用

概述 前三期文章中已经介绍到了 Selenium 与 Playwright 、Pyppeteer 的使用方法,它们的功能都非常强大。而本期要讲的 DrissionPage 更为独特,强大,而且使用更为方便,目前检测少,强烈推荐!!! 这里推荐观看十一姐 B 站 DrissionPage 系列视频,很详细:合集爬虫自动化 …

dynamics 365 online仪表板提示:超出最大记录限制。请减少记录数量

1、Dynamics 365 online的仪表板确实有数量限制,当记录条数超过5万的时候,就会提示:超出最大记录限制。请减少记录数量 https://learn.microsoft.com/zh-cn/power-apps/maker/model-driven-apps/create-edit-system-chart https://learn.microsoft.com/zh-cn/power-apps/mak…

python gamma分布飞机作业前中后

数据: 目标做雨滴谱gamma分布,作业中、作业后1h、作业后2h 代码如下:#!usr/bin/env python # -*- coding:utf-8 -*- """ @author: Suyue @file: raincontent.py @time: 2024/05/23 @desc: """ import numpy as np import pandas as pd import…

国产2米高分遥感数据超分辨率(到0.5米)

​国产2米数据,包括高分一号PMS,高分六号PMS等等,应该是使用最为广泛的光学遥感数据了,主要是因为这几种数据幅宽大,组网访问频次也高,因此在全国各个自然资源、交通、水利等单位是应用最为广泛的数据源。但是这个数据有一个很大的缺陷,就是2米分辨率用来看一般的地物基…

Python 调整PDF页面尺寸大小

在处理PDF文件时,我们可能会遇到这样的情况:原始PDF文档不符合我们的阅读习惯,或者需要适配不同显示设备等。这时,我们就需要及时调整PDF文档中的页面尺寸,以满足不同应用场景的需求。 利用Python语言的高效性和灵活性,再结合Spire.PDF for Python 库的强大功能,我们可以…