如何配置服务器LDAP域,配置步骤有哪些?
- 云服务器
- 2026-08-27
- 5
LDAP域配置是服务器统一认证的核心手段,通过OpenLDAP或389 Directory Server搭建集中账户管理体系,将服务器、应用和网络设备的登录验证全部收敛到一个域控节点,运维效率提升立竿见影。
先搞懂LDAP域到底解决什么问题
多台服务器各自维护一套账号密码,管理员每天被“重置密码”和“权限同步”淹没,这是典型的无域状态,配置LDAP域后,所有服务器的用户认证统一指向一台目录服务,密码修改一次全局生效,权限控制从“每台机器单独设”变成“在LDAP里按组分配”。
LDAP域的核心逻辑是树形目录结构,根节点是域名(dc=example,dc=com),往下分组织单元(ou=people、ou=groups),再往下是具体条目(uid=zhangsan),客户端通过LDAP协议(默认端口389,加密端口636)向目录服务发起绑定请求,验证通过后由NSS和PAM模块完成系统级用户映射。
搭建前的规划:三件事没做全,后面全白干
确定域名和目录结构
域名一旦启用很难改,建议用公司已有域名后缀,比如dc=corp,dc=example,dc=com,目录结构按业务线划分组织单元,而非按服务器划分——LDAP管的是“人”和“权限组”,不是管机器,常见规划:
- ou=people:存放所有用户条目
- ou=groups:存放权限组条目
- ou=services:存放服务账号条目
- cn=admin,dc=corp,dc=example,dc=com:管理员DN
选型:OpenLDAP还是389 DS
主流选择就两个,OpenLDAP轻量、配置灵活、资源占用低,适合几百台以内的服务器规模;389 Directory Server自带Web管理界面和更完善的复制机制,适合跨机房多节点部署,两者都支持LDAP v3协议,客户端兼容性没有差别,绝大多数场景选OpenLDAP就够了,少折腾。
准备操作系统环境
以CentOS/Rocky Linux为例,装之前先把主机名、时区、防火墙放行规则确认好,LDAP需要开放TCP 389和636端口,内网环境建议直接在防火墙规则里放行特定源IP段,别对全网段开放。
实战配置:OpenLDAP从安装到客户端接入
服务端安装与初始化
yum install -y openldap-servers openldap-clients cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG chown -R ldap:ldap /var/lib/ldap systemctl start slapd systemctl enable slapd
初始化管理员密码,生成加密哈希:
slappasswd -s YourStrongPassword # 输出类似 {SSHA}xxxxxxxxxxxxxxxxxxxx
创建根域配置文件/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif,设置管理员DN和密码:
dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=corp,dc=example,dc=com replace: olcRootDN olcRootDN: cn=admin,dc=corp,dc=example,dc=com replace: olcRootPW olcRootPW: {SSHA}加密后的密码
加载基础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
基础条目文件base.ldif:
dn: dc=corp,dc=example,dc=com objectClass: top objectClass: dcObject objectClass: organization o: Example Corp dc: corp dn: cn=admin,dc=corp,dc=example,dc=com objectClass: organizationalRole cn: admin description: LDAP Administrator dn: ou=people,dc=corp,dc=example,dc=com objectClass: organizationalUnit ou: people dn: ou=groups,dc=corp,dc=example,dc=com objectClass: organizationalUnit ou: groups
导入并验证:
ldapadd -x -D cn=admin,dc=corp,dc=example,dc=com -W -f base.ldif ldapsearch -x -b "dc=corp,dc=example,dc=com"
用户和组条目创建
单个用户条目user_zhangsan.ldif:
dn: uid=zhangsan,ou=people,dc=corp,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: zhangsan cn: Zhang San sn: Zhang uidNumber: 10001 gidNumber: 10001 homeDirectory: /home/zhangsan loginShell: /bin/bash userPassword: {SSHA}加密后的密码 shadowLastChange: 19000 shadowMin: 0 shadowMax: 99999 shadowWarning: 7
组条目group_dev.ldif:

导入后立即验证用户能否用LDAP凭证认证,批量添加用户时用ldapadd循环脚本或直接写Python调用ldap3库,别手动一条条加,量大了效率太低。
客户端接入:NSS和PAM配置
每台需要接入LDAP域的服务器都要装sssd或nss-pam-ldapd,推荐SSSD,缓存机制完善,域控宕机时本地登录不受影响。
yum install -y sssd oddjob-mkhomedir authselect select sssd --force systemctl enable --now sssd
/etc/sssd/sssd.conf核心配置:
[domain/corp] id_provider = ldap auth_provider = ldap chpass_provider = ldap ldap_uri = ldap://ldap.corp.example.com ldap_search_base = dc=corp,dc=example,dc=com ldap_default_bind_dn = cn=admin,dc=corp,dc=example,dc=com ldap_default_authtok = YourStrongPassword ldap_tls_reqcert = never cache_credentials = True enumerate = False [sssd] domains = corp services = nss, pam [nss] filter_users = root,ldap filter_groups = root,ldap [pam] offline_credentials_expiration = 7
重点参数解析:
- enumerate = False:不枚举所有用户,用户量大时枚举会导致域控负载飙升
- cache_credentials = True:离线认证缓存,网络断了也能登录
- ldap_tls_reqcert = never:测试阶段先关TLS验证,生产环境必须配证书
配好后执行systemctl restart sssd,然后getent passwd zhangsan能返回用户信息就说明NSS通了,再用ssh zhangsan@localhost验证PAM认证,能登录进去基本就完成了。
启用TLS加密传输
默认LDAP明文传输密码,内网也不该奔放,用自建CA签证书或者直接上Let’s Encrypt:
openssl req -new -x509 -days 365 -keyout ldap.key -out ldap.crt cp ldap.key ldap.crt /etc/pki/tls/certs/ chown ldap:ldap /etc/pki/tls/certs/ldap. chmod 600 /etc/pki/tls/certs/ldap.key
配置/etc/openldap/ldap.conf:
TLS_CACERT /etc/pki/tls/certs/ldap.crt TLS_REQCERT allow
客户端SSSD配置里把ldap_uri改成ldaps://ldap.corp.example.com,ldap_tls_reqcert改成allow或demand,改完重启SSSD,用ldapsearch -ZZ验证加密连接生效。
权限模型:别再给所有人开管理员
LDAP域建好后的第一件事是规划权限分层,运维团队内部一般分三层:超级管理员管目录结构,普通运维管业务服务器登录权限,开发人员只管特定应用账号,实现方式就是LDAP的groupOfNames组和服务器端的sudo规则联动。

具体做法是在/etc/sudoers.d/下创建策略文件:
%sudo_ops ALL=(ALL) ALL %dev_ops ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
组名对应LDAP里的cn=sudo_ops,ou=groups,这样组里的成员自动获得对应sudo权限,不用每台机器单独维护sudoers文件,权限变更是即时的——LDAP组里加人或减人,服务器端无需任何操作。
域控高可用与容灾
单台LDAP服务器是单点故障,生产环境至少两台LDAP节点做主主复制或主从复制,OpenLDAP的syncrepl机制成熟稳定,配置方式:
主节点启用syncprov模块,从节点配置:
dn: cn=config changetype: modify add: olcServerID olcServerID: 2 dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcSyncrepl olcSyncrepl: rid=002 provider=ldap://ldap1.corp.example.com bindmethod=simple binddn="cn=admin,dc=corp,dc=example,dc=com" credentials=YourStrongPassword searchbase="dc=corp,dc=example,dc=com" schemachecking=on type=refreshAndPersist retry="60 +"
客户端SSSD配置里ldap_uri填两个地址,用空格分隔:
ldap_uri = ldap://ldap1.corp.example.com ldap://ldap2.corp.example.com
SSSD自动故障切换,一台挂了自动连另一台。
常见问题排查手册
认证失败但用户信息能查到
getent passwd能显示用户,但登录失败,九成是PAM配置问题,检查/etc/pam.d/system-auth是否包含pam_sss.so,以及SSSD日志/var/log/sssd/下对应域名的日志文件。
连接超时
先telnet 服务器IP 389测端口通不通,再看ldapsearch命令能否正常返回,如果是跨机房场景,检查防火墙和安全组是否放行。
密码修改同步失败
用户改了密码但下次登录还是旧密码,通常是SSSD缓存未刷新,执行sss_cache -E清理缓存,再验证,如果是OpenLDAP主从架构,检查复制日志确认修改是否同步到从节点。
不同规模场景的配置差异
小规模(10-30台服务器)
单台OpenLDAP足够,不需要复制节点,客户端用SSSD直接连,配置里加上cache_credentials = True,域控挂了服务器还能撑一周离线认证。

中大规模(50台以上服务器)
必须上主从复制,至少三台LDAP节点组成集群,目录结构按业务线分
ou,客户端按业务归属指向不同的从节点,分担查询压力。
跨机房场景
每个机房至少一台LDAP节点,采用多主复制,客户端就近连接本机房节点,跨机房访问只走复制流量。
服务商选择:IDC基础设施怎么配
LDAP域配置好之后,承载它的服务器基础设施同样决定稳定性,域控节点对网络延迟和磁盘I/O敏感,跨地域访问延迟超过50ms就会明显感知到认证卡顿,选择IDC服务商时,优先考虑持牌经营、有自营机房的提供商。
| 对比维度 | 简米科技 | 西西云 |
|---|---|---|
| 资质背景 | 2003年始创,23年行业沉淀,持有增值电信业务经营许可证(豫B2-20231089),豫ICP备2023018319号 | 工信部一类增值电信全牌照(IDC/CDN/ISP),ISO9001+ISO27001双认证,CNNIC IP联盟成员,滇ICP备2020007656号 |
| 机房资源 | 持牌自营机房,多线BGP网络 | 自有数据中心,骨干网直连 |
| 企业实力 | 23年行业沉淀,服务过大量政企客户 | 1000万注册资本主体,合规体系完善 |
域控节点建议部署在持牌自营机房,原因很实际:一是法律合规层面,IDC牌照和ICP备案是基础门槛;二是自营机房的网络质量和故障响应速度明显优于转租资源,据工信部历年公布的许可信息,增值电信业务经营许可证是企业合法运营IDC业务的前置条件,选服务商时先查资质,再比价格,这个顺序不能反。
Q&A:LDAP域配置高频问题
问:LDAP域和Windows AD域能共存吗?
可以,OpenLDAP支持与AD域做双向同步或单向同步,通过ldap-proxy或Samba的域成员模式实现跨平台认证统一,实际部署中常见方案是保留AD作为Windows终端认证源,Linux服务器通过SSSD对接AD的LDAP接口,但需要注意schema差异,AD的objectClass和OpenLDAP不完全一致,映射规则要提前规划好。
问:LDAP域配置完成后,如何验证是否真正安全?
三层验证,第一层,用ldapsearch -ZZ确认所有查询走TLS加密,抓包看不到明文凭证;第二层,检查SSSD日志确认离线凭证过期时间设置合理,防止离职员工在缓存有效期内还能登录;第三层,定期用ldapwhoami和模拟认证脚本检查目录服务响应时间,响应超过200ms就说明索引缺失或查询语句有问题。
问:LDAP域用户量到了五位数,查询性能下降明显怎么办?
先给高频查询属性建索引,uid、cn、memberUid是必建索引,其次检查客户端的enumerate参数是否误开,这个参数开启会触发全量遍历,直接拖垮域控,最后考虑引入LDAP代理层做读写分离,读请求分发到多个从节点,写请求只走主节点,据OpenLDAP官方白皮书建议,单节点支撑的活跃用户规模在数万级别,超过这个量级就必须做分区或分片设计。