毅硕HPC | HPC环境下的LDAP配置

简介: 在HPC环境下,LDAP是构建统一、可扩展、易维护的用户身份管理体系的基石。它将分散在各处的用户信息整合到一个逻辑中心,使得庞大的集群在用户管理上像一个单一的、连贯的系统一样工作。

一、什么是LDAP?

20251017-113942.png

LDAP即轻量级目录访问协议,是一种开放的、跨平台的行业标准协议,用于访问和维护分布式目录信息服务。可以把它理解为一个专门优化的、用于频繁查询和读取的数据库。它与我们熟悉的关系型数据库(如MySQL)有显著区别:

  • 数据模型:LDAP数据以树状结构(目录信息树DIT)组织,类似于公司的组织架构图或文件系统的目录树,非常符合现实中的组织关系。
  • 操作特性:针对“读多写少”的场景进行了高度优化。95%以上的操作是查询和验证,写入(增、删、改)相对较少。
  • 协议:它是一个协议标准,而实现这个协议的软件被称为目录服务器,例如OpenLDAP(开源)、389 Directory Server(开源)和Microsoft Active Directory(商业,部分兼容LDAP协议)。

二、LDAP的核心作用与使用场景

1. 核心作用

集中化的身份管理与认证授权。 LDAP充当一个统一的“通讯录”或“花名册”,用于存储所有用户、用户组、服务器乃至其他资源的核心信息。

2. 典型使用场景

  • 单点登录:用户只需使用一套用户名和密码,即可登录到多个不同的应用或服务,如邮箱、Wiki、文件共享、报表系统等。
  • 集中式用户管理:系统管理员可以在一个地方管理所有用户的账户信息(如用户名、密码、UID、GID、家目录、登录Shell等),无需在每个独立的系统上重复创建账户。
  • 网络设备认证:许多网络设备(如VPN、Wi-Fi)支持使用LDAP进行用户认证。
  • 应用配置管理:一些应用也使用LDAP来存储其配置信息。

三、LDAP的基本模型

1. 目录树概念

  • 目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。
  • 条目:每个条目就是一条记录,每个条目都有自己的唯一可区别的名称(DN)。
  • 对象类:与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。
  • 属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。

2. 关键字

屏幕截图 2025-10-27 155242.jpg


四、LDAP与HPC

在HPC环境中,LDAP不是“可选项”,而往往是 “基础设施的核心组件” 。它与HPC的架构和运维需求完美契合。

1. 统一的用户身份源

  • 痛点:一个HPC集群通常由数十、数百甚至上千个计算节点组成。如果要在每个节点上手动创建相同的用户账户,将是一场运维噩梦,且极易出错和不一致。
  • LDAP解决方案:所有计算节点、登录节点、管理节点都配置为向中央LDAP服务器进行用户身份认证。用户在LDAP中只有一个账户,即可在集群的任何授权节点上登录。

2. 与作业调度系统集成

  • 关联:HPC的核心——作业调度系统(如Slurm, PBS Pro)需要知道用户是谁、属于哪个组(Group)、有哪些资源使用权限(QoS)。
  • LDAP解决方案:这些调度系统可以直接从LDAP中获取用户和组信息。例如,Slurm可以通过slurm.conf中的CacheGroups参数或PAM模块来与LDAP集成,确保用户提交作业时的身份和权限与LDAP中定义的一致。

3. 家目录的自动挂载

  • 痛点:用户期望在登录任何一个登录节点后,都能访问到同一个家目录。
  • LDAP解决方案:LDAP可以存储用户的家目录路径信息(如/home/username)。结合自动挂载,当用户登录时,系统可以根据LDAP中的信息,自动将网络存储(如NFS)上的用户家目录挂载到本地,实现无缝的漫游体验。

4. 安全与审计

  • 集中控制:可以集中实施密码策略(强度、过期时间),并可以从一个中心点快速禁用某个用户的全部集群访问权限,这对于安全事件响应至关重要。
  • 审计溯源:所有节点的登录和认证事件都关联到同一个中央用户库,便于进行安全审计和操作溯源。

五、LDAP server配置

1. 安装openldap组件,导入基础schemas

# 安装
$ dnf install openldap openldap-servers openldap-clients

$ systemctl enable --now slapd

# slappasswd 生成root密码的哈希
$ slappasswd -h {
   SSHA} -s admin@123456
{
   SSHA}EQFnGqcN0G26nZ+WkRxIwFNIFfAAvAGy

# 为 [olcRootPW] 设置密码,使用上面生成的哈希值
$ vim chrootpw.ldif
dn: olcDatabase={
   0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {
   SSHA}EQFnGqcN0G26nZ+WkRxIwFNIFfAAvAGy

# 执行ldapadd
$ ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

# 导入基础schemas
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
  • 如遇未找到openldap-servers,使用以下Symas提供的第三方仓库
wget -q https://repo.symas.com/configs/SOFL/rhel8/sofl.repo -O /etc/yum.repos.d/sofl.repo
dnf clean all
dnf makecache
dnf install symas-openldap-servers symas-openldap-clients

2. 创建chdomain文件,配置domain

$ nano chdomain.ldif
# create new file
# replace to your own domain name for [dc=***,dc=***] section
# specify the password generated above for [olcRootPW] section
dn: olcDatabase={
   1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {
   0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
read by dn.base="cn=Manager,dc=hpc,dc=local"read by * none

dn: olcDatabase={
   2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=hpc,dc=local

dn: olcDatabase={
   2}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=hpc,dc=local

dn: olcDatabase={
   2}mdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {
   SSHA}D02ve4WwcYNzxbr5pICoBtY0rHFB6Qnx

dn: olcDatabase={
   2}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {
   0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=hpc,dc=local" write by anonymous auth by self write by * none
olcAccess: {
   1}to dn.base="" by * read
olcAccess: {
   2}to * by dn="cn=Manager,dc=hpc,dc=local" write by * read

# 执行
$ ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

# basedomain配置文件
$ nano basedomain.ldif
# create new file

dn: dc=hpc,dc=local
objectClass: top
objectClass: dcObject
objectclass: organization
o: Server World
dc: hpc

dn: cn=Manager,dc=hpc,dc=local
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=hpc,dc=local
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=hpc,dc=local
objectClass: organizationalUnit
ou: Group

# 执行
$ ldapadd -x -D cn=Manager,dc=hpc,dc=local -W -f basedomain.ldif
Enter LDAP Password: 
adding new entry "dc=hpc,dc=local"

adding new entry "cn=Manager,dc=hpc,dc=local"

adding new entry "ou=People,dc=hpc,dc=local"

adding new entry "ou=Group,dc=hpc,dc=local"

3. ssl/tls配置

$ mkdir  /etc/openldap/certs
$ openssl req -x509 -nodes -days 3650   -newkey rsa:2048    -keyout /etc/openldap/certs/ldapserver.key    -out /etc/openldap/certs/ldapserver.crt    -subj "/C=CN/ST=GuangDong/L=GuangZhou/O=CHSNP/OU=HPC/CN=chsnp.hpc.local"
$ chown ldap:ldap /etc/openldap/certs/{
   ldapserver.crt,ldapserver.key}

$ nano mod_ssl.ldif 
# create new file

dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/ldapserver.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/ldapserver.key

# 执行
$ ldapmodify -Y EXTERNAL -H ldapi:/// -f mod_ssl.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

六、添加LDAP用户

1. 生成加密的密码

$ slappasswd -s abc@123
{
   SSHA}ae8jMPcsfEsK+BLAimhEoLcx1mKFyXWt

2. add_user.ldif配置文件

nano add_user.ldif
# create new file
# replace the section [dc=***,dc=***] to your own suffix

dn: uid=nierdemon,ou=People,dc=hpc,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: nierdemon
sn: nier
userPassword: {
   SSHA}ae8jMPcsfEsK+BLAimhEoLcx1mKFyXWt
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/nierdemon

dn: cn=nierdemon,ou=Group,dc=hpc,dc=local
objectClass: posixGroup
cn: nierdemon
gidNumber: 10001
memberUid: nierdemon

3. 执行添加

$ ldapadd -x -D cn=Manager,dc=hpc,dc=local -W -f add_user.ldif 
Enter LDAP Password: 
adding new entry "uid=nierdemon,ou=People,dc=hpc,dc=local"

adding new entry "cn=nierdemon,ou=Group,dc=hpc,dc=local"

4. 删除用户、用户组

$ ldapdelete -x -W -D 'cn=Manager,dc=hpc,dc=local'"uid=nierdemon,ou=People,dc=hpc,dc=local"
$ ldapdelete -x -W -D 'cn=Manager,dc=hpc,dc=local'"cn=nierdemon,ou=Group,dc=hpc,dc=local"

七、LDAP client配置

  • 安装openldap-clients及配置sssd
# 安装openldap-clients sssd sssd-ldap oddjob-mkhomedir

$ dnf -y install openldap-clients sssd sssd-ldap oddjob-mkhomedir

# 将认证系统切换为sssd
# for [with-mkhomedir], specify it if you need (create home directory when initial login)

$ authselect select sssd with-mkhomedir --force
Backup stored at /var/lib/authselect/backups/2024-07-03-10-28-32.bHV85D
Profile "sssd" was selected.
The following nsswitch maps are overwritten by the profile:
- passwd
- group
- netgroup
- automount
- services

Make sure that SSSD service is configured and enabled. See SSSD documentation for more information.

- with-mkhomedir is selected, make sure pam_oddjob_mkhomedir module
  is present and oddjobd service is enabled and active
  - systemctl enable --now oddjobd.service

# sssd 配置文件
$ vim /etc/sssd/sssd.conf 
# create new file
# replace [ldap_uri], [ldap_search_base] to your own environment value

[domain/default]
id_provider = ldap
autofs_provider = ldap
auth_provider = ldap
chpass_provider = ldap
# ldap_uri = ldap://chsnp.hpc.local/
# ldap server
ldap_uri = ldap://192.168.1.11
ldap_search_base = dc=hpc,dc=local
ldap_id_use_start_tls = True
ldap_tls_cacertdir = /etc/openldap/certs
cache_credentials = True
ldap_tls_reqcert = allow

[sssd]
services = nss, pam, autofs
domains = default

[nss]
homedir_substring = /home

$ chmod 600 /etc/sssd/sssd.conf
$ systemctl restart sssd oddjobd
$ systemctl enable sssd oddjobd
  • 认证日志文件 /var/log/sssd/sssd_default.log
  • ldap配置文件 /etc/openldap
  • ldap用户数据 /var/lib/ldap

八、总结

在HPC环境下,LDAP是构建统一、可扩展、易维护的用户身份管理体系的基石。它将分散在各处的用户信息整合到一个逻辑中心,使得庞大的集群在用户管理上像一个单一的、连贯的系统一样工作。

配置好LDAP,是HPC系统管理员实现自动化、规范化运维的关键一步,直接关系到集群的安全性、稳定性和管理效率。

目录
相关文章
|
6天前
|
弹性计算 人工智能 安全
云上十五年——「弹性计算十五周年」系列客户故事(第二期)
阿里云弹性计算十五年深耕,以第九代ECS g9i实例引领算力革新。携手海尔三翼鸟、小鹏汽车、微帧科技等企业,实现性能跃升与成本优化,赋能AI、物联网、智能驾驶等前沿场景,共绘云端增长新图景。
|
12天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
4天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
11天前
|
人工智能 自然语言处理 自动驾驶
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
|
7天前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
628 17
|
6天前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
422 34
|
12天前
|
编解码 自然语言处理 文字识别
Qwen3-VL再添丁!4B/8B Dense模型开源,更轻量,仍强大
凌晨,Qwen3-VL系列再添新成员——Dense架构的Qwen3-VL-8B、Qwen3-VL-4B 模型,本地部署友好,并完整保留了Qwen3-VL的全部表现,评测指标表现优秀。
725 7
Qwen3-VL再添丁!4B/8B Dense模型开源,更轻量,仍强大