萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

OpenLDAP 服務器部署全流程指南:從安裝到數據導入的生產級實踐

OpenLDAP 是企業級統一身份認證的核心組件。本文基於 CentOS/RHEL 系統,詳細講解 OpenLDAP 服務端部署、配置文件精簡、數據庫初始化、系統賬號遷移導入、客戶端驗證的完整鏈路,並提供自動化腳本與常見故障排查。

一、安裝與基礎配置

1. 安裝軟件包

yum install -y openldap-servers openldap-clients migrationtools

OpenLDAP 安裝包

2. 複製模板配置文件

cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
# 或現代版本使用 slapd.d 動態配置目錄,本文採用傳統靜態 slapd.conf 便於理解

模板文件位置

複製配置文件

3. 清理舊數據庫文件(關鍵)

rm -rf /var/lib/ldap/*
# 保留 DB_CONFIG.example 可選
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap:ldap /var/lib/ldap

清理數據目錄

4. 設置配置文件權限

chown ldap:ldap /etc/openldap/slapd.conf
chmod 640 /etc/openldap/slapd.conf

配置文件權限

權限設置確認

二、核心配置文件 /etc/openldap/slapd.conf 精簡版

# Schema 包含順序重要:core 必須在前
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
# 按需添加:ppolicy, sudo, sshPublicKey 等

allow bind_v2

pidfile  /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args

# 數據庫定義
database bdb
suffix "dc=example,dc=com"
checkpoint 1024 15
rootdn "cn=Manager,dc=example,dc=com"
rootpw {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx  # 使用 slappasswd 生成
directory /var/lib/ldap

# 索引優化查詢速度
index objectClass eq,pres
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub

# 監控數據庫
database monitor
access to *
  by dn.exact="cn=Manager,dc=example,dc=com" read
  by * none

slapd.conf 配置示例

生成 rootpw 哈希

slappasswd -s "YourStrongPassword"
# 輸出 {SSHA}xxx... 複製到 rootpw 行

三、服務啟動與驗證

systemctl enable --now slapd
systemctl status slapd

# 測試匿名綁定
ldapsearch -x -b "dc=example,dc=com"

# 測試管理員綁定
ldapsearch -x -D "cn=Manager,dc=example,dc=com" -W -b "dc=example,dc=com"

服務啟動狀態

四、基礎目錄樹構建(LDIF 導入)

# base.ldif
dn: dc=example,dc=com
objectClass: top
objectClass: domain
dc: example

dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Groups,dc=example,dc=com
objectClass: organizationalUnit
ou: Groups

# 導入
ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f base.ldif

創建用戶目錄

導入 base.ldif

五、系統賬號批量遷移導入(migrationtools)

1. 導出本地賬號/組

cd /usr/share/migrationtools
./migrate_passwd.pl /etc/passwd /tmp/users.ldif
./migrate_group.pl  /etc/group  /tmp/groups.ldif

導出用戶組文件

2. 修改遷移腳本默認域 migrate_common.ph

vim migrate_common.ph
# 修改以下行
$DEFAULT_MAIL_DOMAIN = "example.com";
$DEFAULT_BASE = "dc=example,dc=com";

修改 migrate_common.ph

3. 重新生成 LDIF 並導入

./migrate_passwd.pl /etc/passwd /tmp/users.ldif
./migrate_group.pl  /etc/group  /tmp/groups.ldif

ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f /tmp/users.ldif
ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f /tmp/groups.ldif

執行遷移腳本

生成的 LDIF 文件

導入用戶組結果

導入成功確認

六、客戶端配置(SSSD 方案,現代標準)

yum install -y sssd oddjob-mkhomedir
authconfig --enableldap --enableldapauth \
  --ldapserver=ldap://ldap.example.com \
  --ldapbasedn="dc=example,dc=com" \
  --enablemkhomedir --updateall

systemctl enable --now sssd oddjobd

七、常見故障排查

現代化建議: 新部署優先考慮 slapd.d 動態配置(ldapmodify 熱加載)與 SSSD 客戶端。傳統 slapd.conf 適合學習與簡單場景,生產環境遷移到 cn=config 更利於自動化運維。

copyright © 萬盛學電腦網 all rights reserved
現象原因解決
slapd 啟動失敗schema 缺失、權限、端口佔用檢查 journalctl -u slapd,確保 schema 文件存在
ldap_bind: Invalid credentialsrootpw 哈希錯誤、DN 錯誤重新生成 slappasswd,確認 rootdn 完全匹配
查詢無結果suffix 不匹配、數據未導入確認 base.ldif 已導入,搜索基準正確
性能差索引缺失、緩存太小添加索引後 slapindex 重建,調大 DB_CONFIG cachesize
防火牆阻擋389/636 端口未開放firewall-cmd --add-service=ldap --permanent