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。

相关推荐
lingran__16 小时前
Linux 基础常用指令万字详解(上)|文件目录命令,结合底层原理剖析
linux·运维·服务器·后端·centos·linux基础指令
各类产品分享17 小时前
电力行业AR智能运维哪个品牌好
运维·ar·ar巡检
Dlrb121117 小时前
Linux驱动---sys文件系统自动添加设备节点、添加调试节点以及MISC设备驱动的解释
linux·imx6ull·misc·设备节点·sys文件系统
贾天佑忆月 迷失的昵18 小时前
客户端与服务器持续同步解析(轮询,comet,WebSocket)
运维·服务器·websocket
刘某的Cloud18 小时前
Galera Cluster mariadb 生产环境常见问题排查与运维指南
linux·运维·数据库·mariadb·集群高可用
70asunflower18 小时前
Linux 性能排查分析完全教程
linux·运维
zhangfeng113318 小时前
宝塔8 升级到 11导致 服务器无法访问外网dns失效了,无法访问bt.cn 解决方法 测试通过
运维·服务器
兵bing19 小时前
Docker Compose 配置文件归纳总结-千问
运维·docker·容器
dok1219 小时前
Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (11)kmalloc 动态内存分配和struct file中的私有数据
linux·驱动开发·算法
INNOVIX稳石机器人20 小时前
从“存得下”到“管得活”:稳石四向穿梭车如何重塑密集仓储新逻辑?
大数据·运维