一:前言

目前网上有很多的Openldap服务端搭建教程,但是大部分其实都还是6的部署过程,许多朋友在centos7下按照网上的文档进行部署,会发现根本没有主配置文件,加上我自己踩过的一些坑,在这篇文档里,我把centos7下部署Openldap的过程再梳理一遍。

二:知识准备

1:根据我最近学习到的,我认为ldap就是一个账户认证服务,通过单服务端多客户端的方式,每新增一个客户端服务器,都可以简单的通过ldap客户端配置来将大批量用户加入系统当中,可以省去很多时间。

2:为了更好地在centos7上搭建openldap的服务端,有一些基础知识必须掌握,否则部署过程中一头雾水,出错也没有排查思路,推荐大家阅读下面这篇文章。https://cloud.tencent.com/developer/article/1026304

3.必须掌握的我认为有以下几个方面

1)主要简称含义

o-> organization(组织-公司)
ou-> organization unit(组织单元-部门)
c-> countryName(国家)
dc-> domainComponent(域名)
sn-> suer name(真实名称)
cn-> common name(常用名称)

2)目录型数据库的理解

对于下面这张图,如果我们要获取到一个cn是ldap,也就是右下角的那个用户,那么我们有且仅有一条路径,也就是
dn: cn=ldap, ou=group, o=dlw.com
其中dn是ldif文件当中每个条目都具有的一条,而且对于每一个条目是唯一的,当然dc可以是在最上面的,ou也可以是在最上面的,同样的,他们的下面也可以在延伸出来新的dc或者ou

3)了解schema

在LDAP中,schema用来指定一个目录中所包含的对象(objects)的类型(objectClass),以及每一个类型(objectClass)中必须提供的属性(Atrribute)和可选的属性。可将schema理解为面向对象程序设计中的类,通过类定义一个具体的对象。LDIF中的数据条目可理解为是一个具体的对象,是通过schema来规划创建的。因此,schema是一个数据模型,用来决定数据按什么方式存储,并定义存储在不同的条目(Entry)下的数据之间的关系。schema需要在主配置文件slapd.conf中指定,以用来决定在目录中可以使用哪些objectClass。

4)了解objectClass

LDAP中,一个条目必须包含一个objectClass属性,且需要赋予至少一个值。每一个值将用作一条LDAP条目进行数据存储的模板;模板中包含了一个条目必须被赋值的属性和可选的属性。

5)LDIF文件格式

LDIF用文本格式表示目录数据库的信息,以方便用户创建、阅读和修改。在LDIF文件中,一个条目的基本格式如下:
注意(ldif文件中的内容,需要注意的是,每个冒号后面都需要空一格,而每行结束处不能留有空格字符)

注释
dn: 条目名
属性描述: 值
属性描述: 值
属性描述: 值
... ...

dn行类似于关系数据库中一条记录的关键字,不能与其他dn重复。一个LDIF文件中可以包含多个条目,每个条目之间用一个空行分隔。 例如,以下内容组成一个条目:

1: dn: dc=dlw, dc=com
2: objectclass: top
3: objectclass: dcobject
4: objectclass: organization
5: dc: dlw
6: o: dlw,Inc.

在以上文本中,各行含义如下: 第1行的dn定义该条目的标识。 第2~4行定义该条目的objectcCass,可以定义多个属性,如上面代码中定义了3个objectClass。条目的属性根据objectClass的不同而不同,有的objectClass有必须设置的属性。在2~4行的3个objectClass中,top没有必须定义的属性,dcobject必须定义属性dc,用来表示一个域名的部分,而organization必须定义属性o,用来表示一个组织的名称。 根据objectClass的要求,第5、6行分别定义属性dc和属性o的值。

6)ldap命令

-x:进行简单认证。
-D:用来绑定服务器的dn。
-w:绑定dn的密码。
-b:指定要查询的根节点。
-H:制定要查询的服务器。
-h:目录服务的地址

主要是
添加,将name.ldif文件中的条目加入到目录中

ldapadd -x -D "cn=root,dc=dlw,dc=com" -w secret -f name.ldif

查找,使用ldapsearch命令查询“dc=dlw, dc=com”下的所有条目

ldapsearch -x -b "dc=dlw,dc=com"

修改,分为交互式修改和文件修改,推荐文件修改
将sn属性由“Test User Modify”修改为“Test User”

dn: cn=test,ou=managers,dc=dlw,dc=com
changetype: modify
replace: sn
sn: Test User

输入命令

ldapmodify -x -D "cn=root,dc=dlw,dc=com" -w secret -f modify

删除,删除目录数据库中的“cn=test,ou=managers,dc=dlw,dc=com”条目

ldapdelete -x -D "cn=root,dc=dlw,dc=com" -w secret "cn=test,ou=managers,dc=dlw,dc=com"

三:开始搭建

有了以上的基础储备之后,我们就可以开始搭建了,如果你觉得去学习以上内容太过繁琐,可以跳过,直接开始搭建,但是当搭建过程出现问题,你将很难去排查并解决出现的问题 ,因此我建议最好学习一下再来搭建

1:安装

yum install -y openldap openldap-clients openldap-servers migrationtools openldap-devel compat-openldap
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
systemctl start slapd
systemctl enable slapd

2:配置

1)设置管理员密码

slappasswd -s 123456
{SSHA}wfYgDRZdRyxTuwVg1bzpXjjgAWGNYeN3

2)导入管理员账户

[root@test-vm002 ~]# cd /etc/openldap/
[root@test-vm002 openldap]# vim chrootpw.ldif
#specify the password generated above for "olcRootPW" section
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}wfYgDRZdRyxTuwVg1bzpXjjgAWGNYeN3

[root@test-vm002 openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

3)导入基本Schema模式

[root@test-vm002 openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"

[root@test-vm002 openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"

[root@test-vm002 openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"

4)导入基础域名,这里说明一下,centos6中,基础域名是在sldap.conf中配置的,但是7中需要自己手动配置ldif文件,此文件执行后,会将基础域名配置到/etc/openldap/slapd.d/cn=config下的olcDatabase={2}hdb.ldif当中,这里的基础域名决定了导入ldif文件时候的用户名

[root@test-vm002 openldap]# vim chdomain.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=beyondh,dc=org" read by none

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

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}7xvKgoR74n49m4HG89GNntVOwthdGWZ5

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=gongchang,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=gongchang,dc=com" write by read

[root@test-vm002 openldap]# ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

转自 https://blog.51cto.com/11093860/2318657

文档更新时间: 2020-03-02 16:07   作者:cklx