CentOS 7 搭建 LDAP 目录服务

# CentOS 7 搭建 LDAP 目录服务

1. 服务介绍

LDAP(Lightweight Directory Access Protocol)用于集中保存用户、用户组、组织结构和认证属性。企业可让 Linux 登录、Apache、Samba、邮件系统等服务共用一套账号目录,减少多台服务器重复创建账号的问题。本实验使用 OpenLDAP 创建 dc=chinaskills,dc=cn 目录树,并添加组织单元、用户和用户组。

2. 准备运行环境

• 操作系统:CentOS 7.x。

• 服务器主机名:ldap 或按实验拓扑设置。

• 操作账号:root 或具备 sudo 权限的管理员账号。

• 网络要求:服务器使用固定 IP,客户端能够解析并访问 LDAP 服务器。

• 软件要求:YUM 软件源可用。

• 时间要求:服务端和客户端时间保持一致,后续启用 TLS 或集中认证时可减少证书和认证异常。

bash 复制代码
cat /etc/centos-release
hostnamectl
ip addr
ip route
getent hosts ldap

3. 相关知识

• LDAP 默认使用 TCP 389;LDAPS 默认使用 TCP 636。

• DN 是条目的完整名称,例如 uid=zsuser,ou=users,dc=chinaskills,dc=cn

• Base DN 是目录树查询起点,本实验为 dc=chinaskills,dc=cn

• 管理员 DN 为 cn=admin,dc=chinaskills,dc=cn

• LDIF 是 LDAP 条目导入格式。属性名和属性值之间必须保留冒号及空格,多个条目之间建议留空行。

slappasswd 用于生成 SSHA 密码摘要;不要把管理员明文密码直接写入公开配置。

• 不建议直接随意修改 slapd.d 中的动态配置。修改前先备份,并使用 slaptest 检查配置。

• 查询失败时重点检查 Base DN、绑定 DN、密码、访问控制、服务监听和日志。

4. 实验步骤

4.1 安装并启动 OpenLDAP

bash 复制代码
yum install -y openldap-servers openldap-clients
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap /var/lib/ldap/DB_CONFIG
systemctl enable --now slapd
systemctl status slapd --no-pager

4.2 生成管理员密码摘要

bash 复制代码
slappasswd

输入两次管理员密码,保存生成的 {SSHA} 开头摘要。

4.3 配置客户端默认查询参数

编辑 /etc/openldap/ldap.conf

bash 复制代码
vi /etc/openldap/ldap.conf

示例:

text 复制代码
BASE dc=chinaskills,dc=cn
URI ldap://127.0.0.1

4.4 配置数据库后缀和管理员 DN

修改前备份动态配置目录:

bash 复制代码
cp -a /etc/openldap/slapd.d /etc/openldap/slapd.d.bak
vi '/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif'

按实验目录规划检查或修改以下属性:

text 复制代码
olcSuffix: dc=chinaskills,dc=cn
olcRootDN: cn=admin,dc=chinaskills,dc=cn
olcRootPW: {SSHA}替换为slappasswd生成的摘要

4.5 配置监控数据库访问

bash 复制代码
vi '/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif'

确认监控规则中的管理员 DN 与本实验一致。

检查配置并重启服务:

bash 复制代码
slaptest -u
chown -R ldap:ldap /etc/openldap/slapd.d /var/lib/ldap
systemctl restart slapd

4.6 导入常用 Schema

bash 复制代码
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

若返回 Already exists,说明对应 Schema 已导入,不要重复处理。

4.7 创建根域条目

创建 rootdn.ldif

bash 复制代码
cat > rootdn.ldif <<'EOF'
dn: dc=chinaskills,dc=cn
objectClass: top
objectClass: dcObject
objectClass: organization
o: chinaskills
dc: chinaskills
EOF

导入根域:

bash 复制代码
ldapadd -x -D 'cn=admin,dc=chinaskills,dc=cn' -W -f rootdn.ldif

4.8 创建用户和用户组组织单元

创建 group.ldif

bash 复制代码
cat > group.ldif <<'EOF'
dn: ou=users,dc=chinaskills,dc=cn
objectClass: organizationalUnit
ou: users

dn: ou=group,dc=chinaskills,dc=cn
objectClass: organizationalUnit
ou: group
EOF

导入组织单元:

bash 复制代码
ldapadd -x -D 'cn=admin,dc=chinaskills,dc=cn' -W -f group.ldif

4.9 创建 LDAP 用户

zsuser 为例创建 zsuser.ldif

bash 复制代码
cat > zsuser.ldif <<'EOF'
dn: uid=zsuser,ou=users,dc=chinaskills,dc=cn
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
uid: zsuser
cn: zsuser
userPassword: ChinaSkill21
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0
loginShell: /bin/bash
uidNumber: 1008
gidNumber: 1008
homeDirectory: /home/zsuser
gecos: zsuser
EOF

导入用户:

bash 复制代码
ldapadd -x -D 'cn=admin,dc=chinaskills,dc=cn' -W -f zsuser.ldif

按相同格式创建 lsusrwuusr,确保每个用户的 uidNumber 唯一,且 homeDirectory 与用户名对应:

text 复制代码
lsusr: uidNumber 1009, gidNumber 1009, homeDirectory /home/lsusr
wuusr: uidNumber 1010, gidNumber 1010, homeDirectory /home/wuusr

4.10 创建用户组并添加成员

创建 download.ldif

bash 复制代码
cat > download.ldif <<'EOF'
dn: cn=download,ou=group,dc=chinaskills,dc=cn
objectClass: posixGroup
gidNumber: 10001
cn: download
memberUid: zsuser
memberUid: lsusr
memberUid: wuusr
EOF

导入用户组:

bash 复制代码
ldapadd -x -D 'cn=admin,dc=chinaskills,dc=cn' -W -f download.ldif

如需让 Apache 使用 LDAP 认证,可安装对应模块:

bash 复制代码
yum install -y mod_ldap

5. 验证结果

5.1 服务端验证

bash 复制代码
systemctl is-active slapd
ss -lntp | grep ':389'
slaptest -u
ldapsearch -x -H ldap://127.0.0.1 -b 'dc=chinaskills,dc=cn' -LLL dn
ldapsearch -x -H ldap://127.0.0.1 -D 'cn=admin,dc=chinaskills,dc=cn' -W -b 'ou=users,dc=chinaskills,dc=cn' '(objectClass=posixAccount)' uid uidNumber gidNumber homeDirectory
ldapsearch -x -H ldap://127.0.0.1 -D 'cn=admin,dc=chinaskills,dc=cn' -W -b 'ou=group,dc=chinaskills,dc=cn' '(cn=download)' memberUid
journalctl -u slapd -n 50 --no-pager

5.2 客户端验证

客户端安装查询工具后执行:

bash 复制代码
yum install -y openldap-clients
ldapsearch -x -H ldap://LDAP服务器IP -b 'dc=chinaskills,dc=cn' -LLL dn
ldapwhoami -x -H ldap://LDAP服务器IP -D 'cn=admin,dc=chinaskills,dc=cn' -W

能够查询根域、用户和 download 用户组,ldapwhoami 返回管理员 DN,服务端 389 端口正常监听,说明 LDAP 目录服务配置成功。

6. 常见故障排查

Invalid credentials (49):检查绑定 DN 和密码是否正确。

No such object (32):检查查询 Base DN 是否已经导入。

Can't contact LDAP server (-1):检查 slapd 状态、389 端口、防火墙和服务器地址。

• Schema 导入失败:检查是否重复导入,以及 LDIF 路径是否正确。

• 用户无法登录:LDAP 查询成功不等于系统已启用 LDAP 登录,还需配置 SSSD 或 NSS/PAM。

相关推荐
ALINX技术博客2 小时前
【黑金云课堂】FPGA技术教程Linux开发:系统进阶-PS DMA
linux·fpga开发
IT方大同2 小时前
linux简介
linux·运维·服务器
Dear~yxy3 小时前
时间同步服务器搭建
运维·服务器
mounter6253 小时前
从内存隔离到运行时防线:透视 Linux 内核安全强化的博弈与演进
linux·网络·安全·linux kernel·kernel
Gem_S_6083 小时前
产品任务流转工具实践:构建需求到交付的全流程协作体系
运维
wbs_scy4 小时前
仿 muduo 高并发服务器项目:实现 LoopThread 与 LoopThreadPool 多线程事件循环
运维·服务器
微道道4 小时前
Linux盒子局域网内使用 .local 域名访问,告别IP变化烦恼
linux·运维·服务器·hermes
霸道流氓气质4 小时前
CodeBuddy中配置Playwright MCP 浏览器自动化完全指南
运维·自动化
Bug退散师5 小时前
多路IO复用[select版TCP服务器与poll版TCP服务器]与常用网络编程函数详解
linux·服务器·c语言·网络·驱动开发·tcp/ip