OpenLDAP 服务搭建与配置全流程指南

OpenLDAP 服务搭建与配置全流程指南

OpenLDAP 是一款开源的轻量级目录访问协议(LDAP)实现,专注于提供集中式用户身份认证与管理解决方案,特别适用于多节点集群环境下的统一用户治理场景。本文将基于实操代码片段,详细讲解 OpenLDAP 的服务端部署、目录结构配置、用户管理及客户端集成的完整流程。

一、OpenLDAP 服务端安装与基础配置

1.1 环境准备与安装

通过yum包管理器安装 OpenLDAP 服务端及核心依赖组件:

复制代码
yum -y install openldap-servers pam_ldap bind-utils

安装完成后,系统会自动创建ldap用户用于服务管理,可通过以下命令验证:

复制代码
more /etc/passwd | grep ldap

1.2 版本与服务状态验证

查看 OpenLDAP 版本信息:

复制代码
slapd -VV

验证基础配置文件合法性(确保服务可正常启动):

复制代码
slaptest -u
# 成功提示:config file testing succeeded

1.3 日志配置

为便于问题排查,将 LDAP 日志定向到专用文件:

复制代码
echo 'local4.* /var/log/ldap.log' >> /etc/rsyslog.conf
systemctl restart rsyslog.service 
systemctl status rsyslog.service 

1.4 管理员密码设置

使用slappasswd工具生成加密密码(用于 LDAP 管理员账户):

复制代码
slappasswd
# 输入密码(示例:123456)后生成加密串,如 {SSHA}HDLnqlzEwazq7jT+WmtD9NZqZnIlYayX

1.5 服务启动与端口验证

启动slapd服务并设置开机自启:

复制代码
systemctl enable slapd
systemctl restart slapd
systemctl status slapd

验证默认端口(389)是否正常监听:

复制代码
netstat -antup | grep 389
# 预期输出:tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN [进程ID]/slapd

1.6 数据库初始化

OpenLDAP 默认使用 BerkeleyDB 存储数据,需配置数据库文件并设置权限:

复制代码
# 复制示例数据库配置文件
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

# 设置目录权限(确保ldap用户可读写)
chown ldap:ldap -R /var/lib/ldap
chmod 777 -R /var/lib/ldap

/var/lib/ldap/为 BerkeleyDB 数据库默认存储路径。

二、LDAP 目录结构与核心配置

2.1 导入基础 Schema

Schema 定义了 LDAP 目录的数据结构(对象类、属性等),需导入系统预设的基础 Schema:

复制代码
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
# 可选扩展Schema(根据需求导入)
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif

2.2 配置根域与管理员信息

创建slapd-config.ldif文件,定义 LDAP 根域、管理员 DN 及密码:

复制代码
# 创建配置文件
vim slapd-config.ldif

文件内容(替换dc=example,dc=com为实际域名,{SSHA}xxxxxx为加密密码):

复制代码
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=hadoop,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=hadoop,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}HDLnqlzEwazq7jT+WmtD9NZqZnIlYayX  # 替换为slappasswd生成的密码

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=hadoop,dc=com" read by * none

应用配置:

复制代码
ldapmodify -Y EXTERNAL -H ldapi:/// -f slapd-config.ldif
systemctl restart slapd  # 重启服务使配置生效

2.3 生成基础目录结构

使用migrationtools工具快速生成 LDAP 目录结构(根域、用户 / 组组织单元等):

  1. 安装工具:

    yum -y install migrationtools

  2. 配置工具参数(修改migrate_common.ph):

    vim /usr/share/migrationtools/migrate_common.ph +71

调整以下参数(根据实际域名修改):

复制代码
$DEFAULT_MAIL_DOMAIN = "hadoop.com";  # 邮件域名
$DEFAULT_BASE = "dc=hadoop,dc=com";   # LDAP根域
$EXTENDED_SCHEMA = 1;                 # 启用扩展Schema
  1. 生成基础结构文件base.ldif:

    cd /usr/share/migrationtools/
    ./migrate_base.pl > /root/base.ldif

  2. 导入基础结构到 LDAP:

    ldapadd -x -W -D "cn=Manager,dc=hadoop,dc=com" -f /root/base.ldif

    若存在重复条目,可添加-c参数忽略错误:

    ldapadd -x -W -D "cn=Manager,dc=hadoop,dc=com" -c -f /root/base.ldif

2.4 配置客户端连接参数

修改ldap.conf指定 LDAP 服务地址与根域:

复制代码
vim /etc/openldap/ldap.conf

添加内容:

复制代码
BASE    dc=hadoop,dc=com
URI     ldap://172.21.35.150:389  # 替换为实际LDAP服务器IP

三、用户与组管理操作

3.1 添加用户与用户组

通过编写 LDIF 文件定义用户与组信息,建议用户 ID(UID)从 10000 开始,避免与本地用户冲突。

示例:添加 testuser 用户

  1. 创建testuser.ldif文件:

    组信息

    dn: cn=testuser,ou=Group,dc=hadoop,dc=com
    objectClass: posixGroup
    objectClass: top
    cn: testuser
    gidNumber: 3001
    memberUid: testuser

    用户信息

    dn: uid=testuser,ou=People,dc=hadoop,dc=com
    uid: testuser
    cn: testuser
    objectClass: account
    objectClass: posixAccount
    objectClass: top
    userPassword: testuser # 密码(实际环境建议使用加密值)
    loginShell: /bin/bash
    uidNumber: 3001
    gidNumber: 3001
    homeDirectory: /home/testuser

  2. 导入用户:

    ldapadd -x -D "cn=Manager,dc=hadoop,dc=com" -w 123456 -f testuser.ldif

    -w 后为管理员密码(示例:123456)

示例:添加 hive 用户

创建hive.ldif并导入(步骤同上),注意调整gidNumber和uidNumber:

复制代码
dn: cn=hive,ou=Group,dc=hadoop,dc=com
objectClass: posixGroup
objectClass: top
cn: hive
gidNumber: 1001
memberUid: hive

dn: uid=hive,ou=People,dc=hadoop,dc=com
uid: hive
cn: hive
objectClass: account
objectClass: posixAccount
objectClass: top
userPassword: hive
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/hive

3.2 常见操作命令

  • 查询用户信息

    ldapsearch -x -D "cn=Manager,dc=hadoop,dc=com" -w 123456 -b 'ou=People,dc=hadoop,dc=com'

  • 查询组信息

    ldapsearch -x -D "cn=Manager,dc=hadoop,dc=com" -w 123456 -b 'ou=Group,dc=hadoop,dc=com'

  • 删除用户

    ldapdelete -x -D "cn=Manager,dc=hadoop,dc=com" -w 123456 'uid=testuser,ou=People,dc=hadoop,dc=com'

  • 删除组

    ldapdelete -x -D "cn=Manager,dc=hadoop,dc=com" -w 123456 'cn=testuser,ou=Group,dc=hadoop,dc=com'

四、客户端集成(SSSD 配置)

SSSD(System Security Services Daemon)负责客户端与 LDAP 服务的通信及认证缓存,实现系统级别的 LDAP 身份验证。

4.1 客户端依赖安装

复制代码
yum -y install openldap-clients mlocate sssd authconfig oddjob-mkhomedir nss-pam-ldapd

4.2 配置 SSSD 服务

通过authconfig命令初始化配置:

复制代码
authconfig \
--enablesssd \
--enablesssdauth \
--enablerfc2307bis \
--enableldap \
--enableldapauth \
--disableforcelegacy \
--disableldaptls \
--disablekrb5 \
--enablemkhomedir \
--ldapserver ldap://172.21.35.150:389 \  # 替换为LDAP服务器IP
--ldapbasedn "dc=hadoop,dc=com" \
--update
  • 若 LDAP 启用 TLS,需将--disableldaptls改为--enableldaptls。

  • 若为 HA 架构,--ldapserver可指定多个地址(如ldap://ip1:389,ldap://ip2:389)。

4.3 调整 SSSD 配置文件

修改/etc/sssd/sssd.conf确保参数正确:

复制代码
[domain/default]
autofs_provider = ldap
ldap_schema = rfc2307bis
ldap_search_base = dc=hadoop,dc=com
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://172.21.35.150:389  # 与服务端地址一致
ldap_id_use_start_tls = False
cache_credentials = True

[sssd]
services = nss, pam
domains = default

[nss]
homedir_substring = /home

[pam]

设置文件权限(SSSD 要求严格权限):

复制代码
chmod 600 /etc/sssd/sssd.conf

4.4 配置 nslcd 服务

nslcd用于 LDAP 与系统名称服务的交互,修改配置:

复制代码
vim /etc/nslcd.conf

内容:

复制代码
uri ldap://172.21.35.150/  # LDAP服务器地址
base dc=hadoop,dc=com      # 根域

4.5 PAM 与 SSH 配置

4.5.1 配置 SSH 支持 LDAP 认证

修改sshd_config启用 PAM:

复制代码
# 备份配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
# 修改参数
sed -i 's%UsePAM no%UsePAM yes%g' /etc/ssh/sshd_config
4.5.2 配置 PAM 自动创建家目录

修改/etc/pam.d/sshd,添加自动创建家目录的模块:

复制代码
echo 'session    required     pam_mkhomedir.so' >> /etc/pam.d/sshd
4.5.3 替换 PAM 认证模块

将password-auth和system-auth中的pam_sss.so替换为pam_ldap.so,确保认证通过 LDAP:

复制代码
# 处理password-auth(远程服务认证,如SSH)
cp /etc/pam.d/password-auth /etc/pam.d/password-auth-bak
sed -i 's%pam_sss.so%pam_ldap.so%g' /etc/pam.d/password-auth

# 处理system-auth(本地服务认证,如su、sudo)
cp /etc/pam.d/system-auth /etc/pam.d/system-auth-bak
sed -i 's%pam_sss.so%pam_ldap.so%g' /etc/pam.d/system-auth

4.6 启动服务与验证

复制代码
# 启动相关服务并设置自启
systemctl start sssd && systemctl enable sssd
systemctl start oddjobd && systemctl enable oddjobd
systemctl start nslcd && systemctl enable nslcd
systemctl restart sshd  # 重启SSH服务

# 清空SSSD缓存(首次配置后建议执行)
sss_cache -E

# 验证LDAP用户是否可被识别
id testuser
# 预期输出:uid=3001(testuser) gid=3001(testuser) groups=3001(testuser)

# 测试SSH登录
ssh testuser@localhost  # 本地测试
ssh testuser@172.21.35.150  # 远程测试

五、从节点配置(集群环境)

对于多节点集群,可通过复制主节点配置快速部署从节点:

  1. 从节点安装依赖

    yum -y install openldap-clients mlocate sssd authconfig oddjob-mkhomedir nss-pam-ldapd

  2. 复制主节点配置文件

    在主节点执行,复制核心配置到从节点(以cdh02为例)

    scp /etc/openldap/ldap.conf root@cdh02:/etc/openldap/
    scp /etc/sssd/sssd.conf root@cdh02:/etc/sssd/
    scp /etc/pam.d/system-auth root@cdh02:/etc/pam.d/
    scp /etc/pam.d/password-auth root@cdh02:/etc/pam.d/
    scp /etc/ssh/sshd_config root@cdh02:/etc/ssh/
    scp /etc/nslcd.conf root@cdh02:/etc/

  3. 从节点启动服务并验证

    systemctl start sssd oddjobd nslcd sshd
    systemctl enable sssd oddjobd nslcd sshd
    sss_cache -E # 清空缓存
    id testuser # 验证用户识别
    ssh testuser@cdh02 # 测试登录

六、注意事项

  1. 用户 ID 规划:LDAP 用户 UID 建议从 10000 开始,避免与本地用户(通常 1-1000)冲突。

  2. 权限控制:/var/lib/ldap/目录必须确保ldap:ldap权限,否则服务无法读写数据。

  3. 安全建议:生产环境中应启用 TLS 加密(配置ldap_tls_cacertdir),并使用强密码(避免示例中的 123456)。

  4. 本地用户保留:root用户必须保留为本地用户,LDAP 中禁止创建同名用户,防止权限混乱。

  5. 配置一致性:集群节点的ldap.conf、sssd.conf等文件需保持一致,避免认证异常。

通过以上步骤,可搭建一套稳定的 OpenLDAP 集中式认证系统,实现多节点环境下的统一用户管理,适用于 Hadoop、Kubernetes 等集群场景。

相关推荐
数巨小码人34 分钟前
AI+数据库:国内DBA职业发展与国产化转型实践
数据库·人工智能·ai·dba
mask哥1 小时前
详解flink SQL基础(四)
java·大数据·数据库·sql·微服务·flink
poison_Program2 小时前
使用 Prometheus 监控服务器节点:Node Exporter 详解与配置
运维·服务器·prometheus
左灯右行的爱情2 小时前
分库分表系列-基础内容
网络·数据库·oracle
DebugKitty2 小时前
网络编程1-基本概念、函数接口
运维·服务器·网络·网络协议·socket·tcp
Mr. Cao code2 小时前
Nginx与Apache:Web服务器性能大比拼
运维·服务器·前端·nginx·apache
会飞的土拨鼠呀2 小时前
K8s部署MySQL8.0数据库
数据库·容器·kubernetes
oYiMiYangGuang1233 小时前
【广告系列】流量优选
数据库
小蒜学长3 小时前
vue家教预约平台设计与实现(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端
专注VB编程开发20年3 小时前
对excel xlsx文件格式当成压缩包ZIP添加新的目录和文件后,OpenXml、NPOI、EPPlus、Spire.Office组件还能读出来吗
数据库·c#·excel