
LDAP即轻量级目录访问协议,是一种开放的、跨平台的行业标准协议,用于访问和维护分布式目录信息服务。可以把它理解为一个专门优化的、用于频繁查询和读取的数据库。它与我们熟悉的关系型数据库(如MySQL)有显著区别:
集中化的身份管理与认证授权。 LDAP充当一个统一的“通讯录”或“花名册”,用于存储所有用户、用户组、服务器乃至其他资源的核心信息。
关键字 | 英文全称 | 含义 |
|---|---|---|
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” |
在HPC环境中,LDAP不是“可选项”,而往往是 “基础设施的核心组件” 。它与HPC的架构和运维需求完美契合。
# 安装
$ 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.ldifwget -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$ 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"$ 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"$ slappasswd -s abc@123
{SSHA}ae8jMPcsfEsK+BLAimhEoLcx1mKFyXWtnano 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$ 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"$ 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"# 安装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在HPC环境下,LDAP是构建统一、可扩展、易维护的用户身份管理体系的基石。它将分散在各处的用户信息整合到一个逻辑中心,使得庞大的集群在用户管理上像一个单一的、连贯的系统一样工作。
配置好LDAP,是HPC系统管理员实现自动化、规范化运维的关键一步,直接关系到集群的安全性、稳定性和管理效率。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。