OpenLDAP 系列4 --- 安装

一、概要

1. 承上启下

Open LDAP 系列

2. 基础环境

(1) CentOS 7.9

(2) Open LDAP 2.4.44

3. 解决依赖

(1) EPEL

RHEL 安装 EPEL

(2) OpenSSL或GnuTLS

Open LDAP 客户端和服务端要求安装OpenSSL、GnuTLS或MozNSS,CentOS 7已经自带了OpenSSL和GnuTLS。

a. OpenSSL

rpm -qa | grep openssl

b. GunTLS

rpm -qa | grep gnutls

(3) SASL (Simple Authentication and Security Layer)

OpenLDAP客户端和服务端软件需要安装Cyrus SASL库来提供简单身份验证和安全服务。CentOS 7已经自带了Cyrus SASL库:

rpm -qa | grep sasl

(4) Kerberos

Kerberos是一个网络认证协议,ldap官方推荐的两种实现软件是Heimdal(https://www.h5l.org/)和MIT(http://web.mit.edu/kerberos/www/),CentOS 7自带MIT实现:

rpm -qa | grep krb

(5) 数据库

Open LDAP 自带了LMDB(Lightning Memory-Mapped Database),无需单独安装数据库。

(6) 查询版本

rpm -qa | grep ldap

不建议用以下命令卸载旧版本

rpm -e openldap-2.4.44-15.e17_5.x86_64

因为对Open LDAP有依赖的软件实在是太多了(如下图),盲目卸载可能会导致系统崩溃

(7) Rocky Linux 9

对于RL9,需要OpenLDAP在'plus'仓库中,默认是关闭状态的,所以首先需要开启该仓库:

sudo dnf config-manager --set-enabled plus
sudo dnf repolist

二、安装与配置

1. 安装

Open LDAP安装分为两种方式,RPM包安装或者编译安装,前者简单方便而且有现成的服务可用,后者优势是版本较新,建议使用第一种方式。

在我写这篇文章的时候,Open LDAP的最新的Release版本为2.6.3,最新的LTS版本为2.5.1,但yum repository里提供的最新版本是2.4.44。

yum install openldap openldap-servers openldap-clients -y

openldap-clients包含ldapadd和ldapmodify等命令,在配置环节是必要的。

(2) slapd服务

sudo systemctl start slapd
sudo systemctl enable slapd
systemctl status slapd

(3) 防火墙

sudo firewall-cmd --add-service={ldap,ldaps} --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

2. 配置框架

Open LDAP的配置以树状结构存储在Open LDAP数据库中,这些节点的配置文件以ldif格式存储在/etc/openldap/slapd.d目录下。

(1) cn=config是根节点用于全局性配置,它的配置文件是/etc/openldap/slapd.d/cn=config.ldif,其结构如下:

dn: cn=config
objectClass: olcGlobal
cn: config
<global config settings>

(2) cn=module{0},cn=config用于配置动态模块,它的配置文件位于/etc/openldap/slapd.d/cn=config目录下,其结构如下:

dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModuleLoad: /usr/local/lib/smbk5pwd.la

dn: cn=module{1},cn=config
objectClass: olcModuleList
cn: module{1}
olcModulePath: /usr/local/lib:/usr/local/lib/slapd
olcModuleLoad: accesslog.la
olcModuleLoad: pcache.la

(3) cn=schema,cn=config用于schema配置,它的配置文件位于/etc/openldap/slapd.d/cn=config目录下,其结构如下:

dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema
<system schema>

dn: cn={X}core,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: {X}core
<core schema>

(4) olcDatabase={X}<typeA>,cn=config用于配置数据库,它的配置文件位于/etc/openldap/slapd.d/cn=config目录下,其结构如下:

dn: olcDatabase={X}<typeA>,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {X}<typeA>
<database-specific settings>

3. 配置

(1) 创建目录,用于存储配置文件

mkdir ~/ldap

(2) 管理密码

a. 生成密码

slappasswd

如下图所示,运行该命令后会生成一个密码,该密码会在后续的配置中继续使用:

b. 新建rootPassword.ldif文件:

vi ~/ldap/rootPassword.ldif

将下方olcRootPW的值替换成刚才生成SSHA密码并复制到rootPassword.ldip文件中:

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD_CREATED

将管理员密码存储到LDAP目录中:

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f rootPassword.ldif

执行之后会有如下提示:

(3) 导入schema

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

重启

sudo systemctl restart slapd

(4) 数据库

从2.4版本开始,Open LDAP已经将之前常用的BDB(Berkeley DB)设置为过时(deprecated)状态并推荐使用LMDB(Lightning Memory-Mapped Database)。

a. 新建mdb.ldif文件:

vi ~/ldap/mdb.ldif

b. 替换下方文本中olcRootPW的值和example,复制替换后的文本到mdb.ldip文件中:

dn: olcDatabase=mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: mdb
olcSuffix: dc=example,dc=com
olcRootDN: cn=admin,dc=example,dc=com
olcDbDirectory: /var/lib/ldap
olcDbMaxsize: 1073741824
olcRootPW: {SSHA}Password
olcDbIndex: objectClass eq
olcDbIndex: ou,cn,mail,surname,givenname eq olcLastMod: TRUE olcMonitoring: TRUE olcDbEnvFlags: writemap olcDBNoSync: TRUE
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

c. 添加配置:

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f mdb.ldif

d. 清理HDB

sudo rm -rf /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif

(5) monitor

a. 新建monitor.ldif

vi ~/ldap/monitor.ldif

b. 初始化

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

注意将example替换成自己的域名;

c. 修改配置

sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif

(6) 测试配置

sudo slaptest -u

(7) 重启服务

sudo systemctl restart slapd

4. 初始化数据

(1) 新建data.ldif

vi ~/ldap/data.ldif

(2) 初始化

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

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

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

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

 (3) 添加数据

sudo ldapadd -Y EXTERNAL -x -D "cn=admin,dc=example,dc=com" -W -f data.ldif

sudo ldapadd -x -W -D "cn=admin,dc=example,dc=com" -f data.ldif

5. 测试

(1) 匿名登录测试

默认情况下Open LDAP是支持匿名登录和查询的,所以我们可以通过匿名的方式来查看我们刚才添加的数据:

ldapsearch -x -H ldap://127.0.0.1:389 -b 'ou=People,dc=example,dc=com'

查询成功会返回DN为"ou=Group,dc=example,dc=com"本身和它全部子节点的详细信息,如果返回invalid credentials(49)则说明有问题,可以添加-d 5参数来输出详细信息。

(2) 登录后测试

假设我们在"ou=People,dc=example,dc=com"下面创建了若干员工,且为员工分配了密码,那么我们可以通过以下命令测试我们添加的数据:

ldapsearch -x -H ldap://127.0.0.1:389 -D uid=<<用户名>>,ou=People,dc=example,dc=com -w <<密码>> -b cn=admin,dc=example,dc=com

关于ldapsearch命令请参考官方文档 https://www.mkssoftware.com/docs/man1/ldapsearch.1.asp, 我这里简单解释一下上面的参数:

-x 表示使用简单身份验证而不是SASL;

-H 是LDAP服务的地址和端口;

-D 是bindDN(需要绑定DN),这里可以理解为用户名,注意这里的用户名是"uid=<<用户名>>,ou=People,dc=example,dc=com",假设员工的uid是zhangsan,那么这里的参数是"uid=zhangsan,ou=People,dc=example,dc=com";

-w 是用户的密码,注意不是root password(虽然你可以用root password但这明显是强烈不建议的);

-b 是baseDN,是你要查询的东西,这里我们查询“cn=admin,dc=example,dc=com”这个节点;

我们务必要区分bindDN和baseDN。

6. objectClass

objectClass之于LDAP就像数据表结构与关系型数据库的关系类似,针对不同的角色,我建议使用以下ObjectClass:

顶层:top + dcObject + organization

二层:organizationalUnit

系统管理员:organizationalRole

Group:groupOfNames

People:inetOrgPerson

Device(Server,打印机): device + shadowAccount + ipHost(可选)

三、卸载与清理

1. 卸载

yum remove openldap-clients openldap-servers -y

2. 清空目录

rm -rf /etc/openldap/slapd.d
rm -rf /var/lib/ldap

四、参考

1. 官方

https://www.openldap.org/doc/admin24/

https://www.openldap.org/doc/admin24/slapdconf2.html

https://www.openldap.org/doc/admin26/backends.html#Monitor

2. 安装

(1) CentOS 7

https://www.tecmint.com/install-openldap-server-for-centralized-authentication/

https://linuxhostsupport.com/blog/how-to-install-ldap-on-centos-7/

https://www.cnblogs.com/swordfall/p/12119010.html

(2) Rocky Linux 9

https://www.howtoforge.com/how-to-install-openldap-on-rocky-linux-9/

3. MDB

https://www.openldap.org/doc/admin24/backends.html#LMDB

https://stackoverflow.com/questions/24407788/openldap-switch-to-mdb-backend-memory-mapped-database

posted @ 2022-12-11 21:21  白马黑衣  阅读(811)  评论(0编辑  收藏  举报