LDAP 服务
本文主要在debian配置,如果需要在CentOS上部署,需要修改大部分的路径,这里需要自行修改。
LDAP 服务按照个人理解,也可使理解为一个数据库,但是这个数据库的读写性能不像 MySQL 一样拥有良好的读写性能,而 LDAP 更偏向于读取,而弱于写入。并且 LDAP 的数据类型属于面向对象的数据类型,这和 MySQL 的数据类型不同,并且使用树状结构记录数据,这些都与普通的数据库(关系型数据库),有着极大的差别。而这一切的一切都代表着 LDAP 这个服务并不是用做一个普通的数据库(关系型数据库)用的,而是用于类似于账户存储等这种少存入、多读取、需要包含对象类型和对象相关属性的场合。
LDAP工作机制
就跟上面说的一样,LDAP是树状结构的数据库,所以说如果想要找到其中一个节点,就得通过逐层查询,并且必须保证每一个节点的路径唯一,那么这个节点的路径就称之为dn,dn 的编写路径必须是由下而上编写的,例如:
cn=scott,ou=marketing,ou=people,dc=mydomain,dc=org
关键字英文全称含义
dc
Domain Component
域名的部分,其格式是将完整的域名分成几部分,如域名为 example.com 那么就是: dc=example,dc=com
uid
User Id
用户 ID,如 “tom”
ou
Organization Unit
组织单位,类似于 Linux 文件系统中的子目录,它是一个容器对象,组织单位可以包含其他各种对象(包括其他组织单元),如 “market”
cn
Common Name
公共名称,如 “Thomas Johansson”
sn
Surname
姓,如 “Johansson”
c
Country
国家,如 “CN” 或“US”等。
o
Organization
组织名,如 “Example, Inc.”
dn
Distinguished Name
惟一辨别名,类似于 Linux 文件系统中的绝对路径,每个对象都有一个惟一的名称,如 “uid= tom,ou=market,dc=example,dc=com”,在一个目录树中 DN 总是惟一的
rdn
Relative dn
相对辨别名,类似于文件系统中的相对路径,它是与目录树结构无关的部分,如 “uid=tom” 或“cn= Thomas Johansson”
以上这些类别没有指定特定的用法,这些完全由应用程序自行决定。
LDAP 安装
debian:
apt install slapd ldap-utils # slapd 为服务端, ldap-utils 为客户端程序
CentOS:
yum install openldap-servers openldap-clients # 上同
LDAP 服务器配置初始化
做这一步的目的是为了完全自定义初始化数据库,抛弃由软件包构成的数据库。
当然你也可以跳过这个步骤,直接开始下一步,这样也是无所谓的。
你也可以你使用 debian 提供的便捷方式来完成服务器配置: dpkg-reconfig slapd
首先先来解释一些为什么要按照如下(完全属于个人理解):
新版的 OpenLdap 已经弃用了 slapd.conf 配置文件,改而使用 slapd.d 目录下的树状目录文件来配置服务器的相关配置。但是 slapd.d 是由服务进程维护的,并且使用CRC来校验文本是否改动,我们无法轻易修改,slapd安装包给我们提供了一个命令 slapadd 用于创建配置文件,所以才用了下面的方法来初始化数据库。后期使用 ldapmodify 或 ldapadd 来完成服务器配置。
首先停止数据库服务:
systemctl stop slapd
然后编辑文件:
# 首先备份文件,以免无法复原
mkdir /root/back
tar -Jcvf /root/back/slapd.config-`date '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /etc/ldap/slapd.d/
tar -Jcvf /root/back/slapd.data-`date '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /var/lib/ldap /var/lib/slapd
# 然后再删除配置文件
rm -rf /etc/ldap/slapd.d/*
rm -rf /var/lib/slapd/*
rm -rf /var/lib/ldap/*
# 复制配置文件到临时目录
cp /usr/s