转载自:https://blog.csdn.net/dengchenrong/article/details/88389947


一、背景

因为公司项目中已经使用到ldap,但是不是我搭建的,并且ldap是部署在另一台机器上。现在需要切一个简化系统给客户去使用,并且只用一台服务器,需要使用单独的用户和数据管理,所以就开始了ldap的安装和搭建工作。


二、OpenLDAP简介

在安装OpenLDAP之前,我们首先来介绍下LDAP。


LDAP是一款轻量级目录访问协议(Lightweight Directory Access Protocol,简称LDAP),属于开源集中账号管理架构的实现,且支持众多系统版本,被广大互联网公司所采用。


LDAP提供并实现目录服务的信息服务,目录服务是一种特殊的数据库系统,对于数据的读取、浏览、搜索有很好的效果。目录服务一般用来包含基于属性的描述性信息并支持精细复杂的过滤功能,但OpenLDAP目录服务不支持通用数据库的大量更新操作所需要的复杂的事务管理或回滚策略等。


LDAP具有两个标准,分别是X.500和LDAP。OpenLDAP是基于X.500标准的,而且去除了X.500复杂的功能并且可以根据自我需求定制额外扩展功能,但与X.500也有不同之处,例如OpenLDAP支持TCP/IP协议等,目前TCP/IP是Internet上访问互联网的协议。


OpenLDAP可以直接运行在更简单和更通用的TCP/IP或其他可靠的传输协议层上,避免了在OSI会话层和表示层的开销,使连接的建立和包的处理更简单、更快,对于互联网和企业网应用更理想。


OpenLDAP目录中的信息是以树状的层次结构来存储数据(这很类同于DNS),最顶层即根部称作“基准DN”,形如“dc=mydomain,dc=org”或者“o=mydomain.org”,前一种方式更为灵活也是Windows AD中使用的方式。在根目录的下面有很多的文件和目录,为了把这些大量的数据从逻辑上分开,OpenLDAP像其它的目录服务协议一样使用OU(Organization Unit,组织单元),可以用来表示公司内部机构,如部门等,也可以用来表示设备、人员等。同时OU还可以有子OU,用来表示更为细致的分类。


OpenLDAP中每一条记录都有一个唯一的区别于其它记录的名字DN(Distinguished Name),其处在“叶子”位置的部分称作RDN(用户条目的相对标识名)。如dn:cn=tom,ou=animals,dc=ilanni,dc=com中cn即为RDN,而RDN在一个OU中必须是唯一的。


OpenLDAP默认以Berkeley DB作为后端数据库,BerkeleyDB数据库主要以散列的数据类型进行数据存储,如以键值对的方式进行存储。


BerkeleyDB是一类特殊的面向查询进行优化、面向读取进行优化的数据库,主要用于搜索、浏览、更新查询操作,一般对于一次写入数据、多次查询和搜索有很好的效果。BerkeleyDB不支持事务型数据库(MySQL、MariDB、Oracle等)所支持的高并发的吞吐量以及复杂的事务操作。


环境:基于centos7,OpenLDAP使用2.4.44版本


三、安装OpenLDAP

使用命令安装OpenLDAP:


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

1

查看OpenLDAP版本,使用如下命令:


slapd -VV

1


到这里OpenLDAP基本安装完毕,接下来就是开始配置OpenLDAP


四、OpenLDAP配置

PS: OpenLDAP2.4.23版本开始所有配置数据都保存在/etc/openldap/slapd.d/,看了很多博客都是使用slapd.conf作为配置文件,而且很多博客内容都已经过时,所以没有一个好的文档真的会踩很多坑,在此记录一下


4.0 配置OpenLDAP管理员密码


设置OpenLDAP的管理员密码:


slappasswd -s [password]

1


密码设置好了之后呢,保存好,下面会使用到。


4.1 修改olcDatabase={2}hdb.ldif文件

修改olcDatabase={2}hdb.ldif文件,对于该文件增加一行



olcRootPW: {SSHA}dXgO/Ipy5SQiKFZ0u7m79Xo7uzKIr038,然后修改域信息:


olcSuffix: dc=teracloud2,dc=cn


olcRootDN: cn=admin,dc=teracloud2,dc=cn

1

2

3

4

5

6

注意:其中cn=admin中的admin表示OpenLDAP管理员的用户名,dc为ldap的服务器域名,导出而olcRootPW表示OpenLDAP管理员的密码。


实际修改如下:


vim /etc/openldap/slapd.d/cn=config/olcDatabase\=\{2\}hdb.ldif


olcSuffix: dc=teracloud2,dc=cn


olcRootDN: cn=admin,dc=teracloud2,dc=cn


olcRootPW: {SSHA}dXgO/Ipy5SQiKFZ0u7m79Xo7uzKIr038

1

2

3

4

5

6

7


4.2 修改olcDatabase={1}monitor.ldif文件


修改olcDatabase={1}monitor.ldif文件,如下:


vim /etc/openldap/slapd.d/cn=config/olcDatabase\=\{1\}monitor.ldif


olcAccess: {0}to * by dn.base=”gidNumber=0+uidNumber=0,cn=peercred,cn=extern


al,cn=auth” read by dn.base=”cn=admin,dc=teracloud2,dc=cn” read by * none

1

2

3

4

5


验证OpenLDAP的基本配置是否正确,使用如下命令:


slaptest -u

1


通过结果看出我们的配置是没有问题的


4.3启动OpenLDAP服务,

使用如下命令:


//开始ldap

systemctl enable slapd


//启动ldap

systemctl start slapd


//查看ldap的状态

systemctl status slapd

1

2

3

4

5

6

7

8


4.4 配置OpenLDAP数据库

OpenLDAP默认使用的数据库是BerkeleyDB,现在来开始配置OpenLDAP数据库,使用如下命令:


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


chown ldap:ldap -R /var/lib/ldap


chmod 700 -R /var/lib/ldap


ll /var/lib/ldap/

1

2

3

4

5

6

7

注意:/var/lib/ldap/就是BerkeleyDB数据库默认存储的路径。



4.5 导入基本Schema

导入基本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

1

2

3

4

5

注意:如果这一步导入失败,一般都是密码输入错误,密码要输上面配置的加密前的密码


4.6创建基本的用户节点,数据库管理员


dn: dc=teracloud2,dc=cn

objectClass: top

objectClass: dcObject

objectclass: organization

o: Example Inc.

dc: teracloud2


dn: ou=Users,dc=teracloud2,dc=cn

objectClass: organizationalUnit

ou: Users


dn: ou=group,dc=teracloud2,dc=cn

objectClass: organizationalUnit

ou: group


dn: cn=admin,dc=teracloud2,dc=cn

objectClass: organizationalRole

cn: admin

description: Directory Administrator

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19



ldapadd  -x -D cn=admin,dc=teracloud2,dc=cn-W -f basedomain.ldif  

1

[root@VM_0_15_centos myself]# ldapadd -x -D cn=admin,dc=teracloud2,dc=cn-W -f basedomain.ldif

Enter LDAP Password:

adding new entry “dc=teracloud2,dc=cn”


adding new entry “ou=people,dc=teracloud2,dc=cn”


adding new entry “ou=group,dc=teracloud2,dc=cn”


adding new entry “cn=admin,dc=teracloud2,dc=cn”


五、配置日志

[root@VM_0_15_centos myself]# vim log.ldif


[root@VM_0_15_centos myself]# cat log.ldif   

dn: cn=config

changetype: modify

add: olcLogLevel

olcLogLevel: 32     

                                                                          

"log.ldif" [New] 4L, 66C written                                                   

[root@VM_0_15_centos myself]# ldapmodify -Y EXTERNAL -H ldapi:/// -f log.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

modifying entry "cn=config"


[root@VM_0_15_centos myself]# mkdir -p /var/log/slapd

[root@VM_0_15_centos myself]# chown ldap:ldap /var/log/slapd/

[root@VM_0_15_centos myself]# echo "local4.* /var/log/slapd/slapd.log" >> /etc/rsyslog.conf

[root@VM_0_15_centos myself]# systemctl restart rsyslog

[root@VM_0_15_centos myself]# systemctl restart slapd

[root@VM_0_15_centos myself]# tail -n 4 /var/log/slapd/slapd.log

Sep  5 20:43:31 VM_0_15_centos slapd[4520]: => test_filter

Sep  5 20:43:31 VM_0_15_centos slapd[4520]:    PRESENT

Sep  5 20:43:31 VM_0_15_centos slapd[4520]: <= test_filter 6

Sep  5 20:43:31 VM_0_15_centos slapd[4523]: slapd starting

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

六、工具连接

图形操作界面有很多种,包括ldapadmin、ldapadmin.exe,当然还有其他的,这个步骤比较简单,就不详细讲解了。



七、遇到的错误

查看ldap的状态,发现无法启动


查看日志发现,有个和证书相关的错误

could not use certificate openLDAP server’,

查看下目录发现没有证书的,目录


把证书拷贝过去,启动,问题解决


————————————————

版权声明:本文为CSDN博主「逆风前行的小强」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/dengchenrong/java/article/details/88389947