OpenLDAP-yum安装

一、OpenLDAP简介

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等)所支持的高并发的吞吐量以及复杂的事务操作。

二、安装OpenLDAP

2.1 初始化环境

关闭selinux

1
2
[root@centos7 ~]# sed -i '/ELINUX/s/enforcing/disabled/' /etc/selinux/config
[root@centos7 ~]# setenforce 0

关闭防火墙

1
2
[root@centos7 ~]# systemctl disable firewalld.service
[root@centos7 ~]# systemctl stop firewalld.service

2.2 yum安装OpenLDAP

1
[root@centos7 ~]# yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools

查看OpenLDAP版本

1
2
3
[root@centos7 ~]# slapd -VV
@(#) $OpenLDAP: slapd 2.4.44 (Jan 29 2019 17:42:45) $
mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd

三、配置OpenLDAP

OpenLDAP配置比较复杂牵涉到的内容比较多,接下来我们一步一步对其相关的配置进行介绍。

从OpenLDAP2.4.23版本开始所有配置数据都保存在/etc/openldap/slapd.d/中,建议不再使用slapd.conf作为配置文件。

3.1 配置OpenLDAP管理员密码

1
2
[root@centos7 ~]# slappasswd -s Abc.123456
{SSHA}y1ORWxA1MjuUuhCrkf/IqziDttfP+8G2

将加密后的字段保存起来,等会我们在配置文件中会使用到。

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

修改OpenLDAP管理员用户和密码

1
2
3
4
[root@centos7 ~]# vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif
olcSuffix: dc=sys,dc=com
olcRootDN: cn=admin,dc=sys,dc=com
olcRootPW: {SSHA}y1ORWxA1MjuUuhCrkf/IqziDttfP+8G2

dc=sys,dc=com 为绑定的域名为sys.com
cn=admin 表示OpenLDAP管理员的用户名
olcRootPW 表示OpenLDAP管理员的密码

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

该修改中的dn.base后面的内容绑定OpenLDAP的管理员的相关信息

1
2
3
[root@centos7 ~]# 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=sys,dc=com" read by * none

验证OpenLDAP的基本配置

1
2
3
4
[root@centos7 ~]# slaptest -u
5fa966ed ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif"
5fa966ed ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif"
config file testing succeeded

通过上面的验证,我们可以看出OpenLDAP的基本配置是没有问题

3.4 启动OpenLDAP服务

1
2
3
4
[root@centos7 ~]# systemctl enable slapd
Created symlink from /etc/systemd/system/multi-user.target.wants/slapd.service to /usr/lib/systemd/system/slapd.service.
[root@centos7 ~]#
[root@centos7 ~]# systemctl start slapd

3.5 配置OpenLDAP数据库

OpenLDAP默认使用的数据库是BerkeleyDB

1
2
3
[root@centos7 ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@centos7 ~]# chown ldap:ldap /var/lib/ldap/DB_CONFIG
[root@centos7 ~]# chmod 700 -R /var/lib/ldap

3.6 导入基本Schema

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@centos7 ~]# cd /etc/openldap/schema/
[root@centos7 schema]# ldapadd -Y EXTERNAL -H ldapi:/// -f 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@centos7 schema]# ldapadd -Y EXTERNAL -H ldapi:/// -f 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@centos7 schema]# ldapadd -Y EXTERNAL -H ldapi:/// -f 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"

3.7 创建LDAP用户和ou

创建ou

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@centos7 schema]# cat base.ldif
dn: dc=sys,dc=com
o: sys com
dc: sys
objectClass: top
objectClass: dcObject
objectclass: organization

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

dn: ou=groups,dc=sys,dc=com
ou: groups
objectClass: top
objectClass: organizationalUnit

dn: ou=users,dc=sys,dc=com
ou: users
objectClass: top
objectClass: organizationalUnit

创建用户和组,并将用户加入组

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
26
27
28
29
30
31
32
33
[root@centos7 schema]# cat user.ldif
dn: uid=user1,ou=users,dc=sys,dc=com
uid: user1
cn: user1
sn: user1
mail: user1@sys.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$YA2PHGG4$J4t9Jr74RMY0Tz/0v9u3vbH01OJAfnZU13yGoUrbvgyqKq/APyF0WJz448REhLAqb1JotUEmt9pn2haZvIu4P0
shadowLastChange: 18569
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1004
gidNumber: 1004
homeDirectory: /home/user1

dn: cn=group1,ou=groups,dc=sys,dc=com
objectClass: posixGroup
objectClass: top
cn: group1
userPassword: {crypt}x
gidNumber: 1000

dn: cn=group1,ou=groups,dc=sys,dc=com
changetype: modify
add: memberuid
memberuid: user1

导入ldif

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@centos7 schema]# ldapadd -x -D cn=admin,dc=sys,dc=com -w "Abc.123456" -f base.ldif
adding new entry "dc=sys,dc=com"

adding new entry "cn=admin,dc=sys,dc=com"

adding new entry "ou=groups,dc=sys,dc=com"

adding new entry "ou=users,dc=sys,dc=com"

[root@centos7 schema]# ldapadd -x -D cn=admin,dc=sys,dc=com -w "Abc.123456" -f user.ldif
adding new entry "uid=user1,ou=users,dc=sys,dc=com"

adding new entry "cn=group1,ou=groups,dc=sys,dc=com"

modifying entry "cn=group1,ou=groups,dc=sys,dc=com"

3.8 开启OpenLDAP日志访问功能

默认情况下OpenLDAP是没有启用日志记录功能的,但是在实际使用过程中,我们为了定位问题需要使用到OpenLDAP日志。

1
2
3
4
5
[root@centos7 schema]# cat loglevel.ldif
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats

导入ldif并重启OpenLDAP服务

1
2
3
4
5
6
7
[root@centos7 schema]# ldapmodify -Y EXTERNAL -H ldapi:/// -f loglevel.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@centos7 schema]# systemctl restart slapd

修改rsyslog配置文件,并重启rsyslog服务

1
2
3
4
5
[root@centos7 schema]# cat >> /etc/rsyslog.conf << "EOF"
local4.* /var/log/slapd.log
EOF

[root@centos7 schema]# systemctl restart rsyslog

3.9 修改OpenLDAP默认端口

OpenLDAP默认监听的端口是389,如果要修改OpenLDAP监听端口,我们可以修改/etc/sysconfig/slapd文件。

1
2
3
[root@centos7 schema]# vim /etc/sysconfig/slapd

SLAPD_URLS="ldapi://0.0.0.0:5547/ ldap://0.0.0.0:5547/"

重启OpenLDAP服务

1
[root@centos7 schema]# systemctl restart slapd

四、使用ldapadmin工具管理

在大多数情况下,我们对OpenLDAP的操作都是在Windows下进行的。在这里使用 LdapAdmin 工具进行管理。

图片1

Host填写OpenLDAP的主机地址;
Port填写OpenLDAP的监听端口;
Base填写的OpenLDAP的DN;
Account部分中的Username填写管理员,password填写管理员的密码。

图片2

可以看到前面创建的用户以及组

-------------本文结束感谢您的阅读-------------