首页›云计算›云计算-OpenStack+LDAP集成-第三节-安装OpenLDAP统一账号中心

云计算-OpenStack+LDAP集成-第三节-安装OpenLDAP统一账号中心

想象一所学校:机房上机一个账号、借书一个账号、云平台又一个账号——学生记不住,管理员要维护三套表。OpenLDAP 解决的就是这件事:把所有账号放进一棵目录树里集中管理,其他系统都来这棵树里“查人、验人”。这一节我们把它装起来并搭出目录骨架。

第三节 安装 OpenLDAP:装包 → 初始化数据库 → 三步导入配置 → 建成目录树
第三节 安装 OpenLDAP:装包 → 初始化数据库 → 三步导入配置 → 建成目录树

一、原理:目录树、DN 与 LDIF

LDAP(轻量级目录访问协议)存数据的方式像一棵树,每个节点叫一个条目(entry),每个条目有一个全路径名字叫 DN(Distinguished Name)。比如学生张三的 DN 可能是 uid=zhangsan,ou=People,dc=example,dc=com——读起来就像“example.com 公司 → People 部门 → 张三”。

  • slapd:LDAP 的服务进程,389 端口;
  • schema:定义“一类东西有哪些属性”(比如 inetOrgPerson 必须有 cn、sn);
  • LDIF:LDAP 的“文本配置格式”,2.4 版本之后所有配置都用 LDIF 写,不再直接改 slapd.conf;
  • olcRootPW:管理员密码,必须是 slappasswd 生成的 SSHA 哈希,不能写明文。

二、操作步骤

第 1 步:安装组件并初始化数据库目录。

yum install -y openldap-servers openldap-clients openldap-devel \
    compat-openldap migrationtools

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap /var/lib/ldap/DB_CONFIG
chown -R ldap:ldap /var/lib/ldap/

systemctl start slapd
systemctl enable slapd

第 2 步:生成加密的管理员密码,记下来!后面配置文件里要用的是这串哈希,而登录时输入的是明文 12345678,两者别搞混。

slappasswd -s 12345678
# 输出类似:{SSHA}O6R/ZFJ26qabGWhNvejbFlispFuLoMul

第 3 步:写入管理员密码(changepwd.ldif)。注意把 olcRootPW 换成你刚才生成的哈希。

vim ~/changepwd.ldif

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}O6R/ZFJ26qabGWhNvejbFlispFuLoMul
ldapadd -Y EXTERNAL -H ldapi:/// -f ~/changepwd.ldif

第 4 步:导入基础 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

第 5 步:配置域名和管理员账号(changedomain.ldif)。这里把后缀设为 dc=example,dc=com,实验环境可以按需替换。

vim ~/changedomain.ldif

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}O6R/ZFJ26qabGWhNvejbFlispFuLoMul

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=example,dc=com" write
  by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=example,dc=com" write by * read
ldapmodify -Y EXTERNAL -H ldapi:/// -f ~/changedomain.ldif

第 6 步:建立基础目录结构(base.ldif)。这里用的是明文密码——因为这是“登录”动作,不是“写配置”。

vim ~/base.ldif

dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: example Company
dc: example

dn: cn=admin,dc=example,dc=com
objectClass: organizationalRole
cn: admin
description: Directory Manager

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

dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group
ldapadd -x -D cn=admin,dc=example,dc=com -W -f ~/base.ldif
# 提示输入密码:输入明文 12345678
# 成功会输出 adding new entry "dc=example,dc=com" 这样的信息

第 7 步:放行防火墙并验证。如果之前已关闭防火墙可跳过第一条。

firewall-cmd --add-service=ldap --permanent
firewall-cmd --reload

# 关键验证:管理员绑定查询,能列出条目即成功
ldapsearch -x -D "cn=admin,dc=example,dc=com" -W -b "dc=example,dc=com"

三、必须记住的三个路径

路径“, ”作用
/etc/openldap/slapd.d/ 配置目录(LDIF 形式),改配置就改这里
/var/lib/ldap/ 数据库目录,DB_CONFIG 和真实数据都在这
/etc/openldap/schema/ 对象类与属性定义(cosine / nis / inetorgperson)

四、常见错误码速查

错误码“, ”含义“, ”最常见原因
49 invalid credentials 密码不对:哈希和明文用反了
59 密码不一致 changepwd.ldif 与 changedomain.ldif 里的哈希不同
68 entry 已存在“, ”重复导入 base.ldif,先删再导
连接被拒 slapd 没起来 systemctl status slapd 看日志

五、本节小结

最容易踩的坑:base.ldif 导入用明文密码,配置文件里的 olcRootPW 用 {SSHA} 哈希——两者弄混就报 49 / 59。把 slappasswd 的输出贴到记事本里保存好,后面第五节还会用到。

一句话记住:装包 → 初始化 DB_CONFIG → 起服务 → 生成哈希 → 三份 LDIF 依次导入 → ldapsearch 验证。目录树骨架(dc=example,dc=com / cn=admin / ou=People / ou=Group)建成后,下一节给它配一个网页管理端。

上一篇
下一篇