HPC
DCV 应用教程
DCV | Nice DCV 安装手册
DCV | RLM 提取 HOSTID
EF Portal and DCV HA Solution
Enginframe 应用教程
Enginframe | 技术参数说明
毅硕HPC教程
毅硕HPC | HPC环境下的LDAP配置
毅硕HPC | Rocky Linux 9 SLURM软件编译安装
毅硕HPC | RHEL 8 上的NVIDIA驱动安装
毅硕HPC | 配置SLURM作业队列优先级
毅硕HPC | Pritunl + ECS + Frp 搭建远程办公VPN
毅硕HPC | 在HPC集群上优雅地使用 Conda
毅硕HPC | 一文详解HPC环境中的MPI并行计算
毅硕HPC | NVIDIA DGX Spark 万字硬核评测:将AI超级工厂带上桌面
毅硕HPC | Lustre文件系统在HPC集群中的部署实战
毅硕HPC | InfiniBand网络在HPC集群中的核心应用
毅硕HPC | OpenPBS构建高效稳定的HPC作业调度环境
毅硕HPC | HPC集群LSF调度系统部署指南
毅硕HPC | 轻量高效的XFCE桌面环境
毅硕HPC | Ubuntu 24 SLURM 编译安装
-
+
首页
毅硕HPC | HPC环境下的LDAP配置
# 一、什么是LDAP?  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\. 关键字 |关键字|英文全称|含义| |--|--|--| |dc|Domain Component|域名的部分,其格式是将完整的域名分成几部分,如域名为chsnp.com变成dc=chsnp,dc=com(一条记录的所属位置)| |uid|User Id|用户ID demon.nie(一条记录的ID)| |ou}|Organization Unit|组织单位,组织单位可以包含其他各种对象(包括其他组织单元),如“oa组”(一条记录的所属组织)| |cn|Common Name|公共名称,如“Thomas Johansson”(一条记录的名称)| |sn|Surname|姓,如“许”| |dn|Distinguished Name|“uid=xx.nie,ou=oa,dc=chsnp,dc=com”,一条记录的位置(唯一)| |rdn|Relative dn|相对辨别名,类似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid=tom”或“cn= Thomas Johansson”| * * * # 四、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系统管理员实现自动化、规范化运维的关键一步,直接关系到集群的安全性、稳定性和管理效率。
chsnp
2026年1月28日 09:36
转发
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期