【DevOps工具篇】 OpenLDAP的LDAP服务器(slapd)是什么?

2019-09-10T13:11:33+08:00 | 8分钟阅读 | 更新于 2019-09-10T13:11:33+08:00

Macro Zhao

【DevOps工具篇】 OpenLDAP的LDAP服务器(slapd)是什么?

@TOC

推荐超级课程:

OpenLDAP是一种使用LDAP(轻量目录访问协议)集中管理用户名和密码的开源软件的标准实现。它由LDAP服务器、用于访问LDAP的客户端、以及用于从各种程序访问LDAP的库等多个组件组成。在这里,我们将介绍OpenLDAP的LDAP服务器(slapd)。

OpenLAP的LDAP服务器(slapd)是什么

LDAP服务器(slapd)是附带OpenLDAP的LDAP服务器软件。它在互联网上被广泛使用。该LDAP服务器支持LDAP协议版本2和版本3。OpenLDAP的LDAP服务器(slapd)具有以下特点:

基本功能

OpenLDAP的LDAP服务器不仅支持简单身份验证,还支持SASL身份验证。此外,它提供了用于定义LDAP服务器上要使用的对象类和属性等架构的标准模式。此外,在OpenLDAP中,也可以从远程管理LDAP服务器。

安全性

OpenLDAP不仅支持对LDAP服务器的slapd进行IP访问控制,还可以对DN和属性进行细粒度的访问控制。此外,OpenLDAP支持通过SSL/TLS进行加密通信。

管理性

OpenLDAP的服务器配置可以动态进行,无需停止LDAP服务器。此外,OpenLDAP附带了用于备份和还原LDAP服务器数据的工具。

可靠性和可扩展性

OpenLDAP具有在负载较高的环境中使用LDAP服务器的可靠性。它还可以在LDAP服务器之间同步数据库,构建考虑冗余的LDAP服务器。此外,OpenLDAP还支持通过两种形式,即叠加和后端DB,扩展LDAP服务器的功能。

调优

在OpenLDAP中,可以根据LDAP服务器的用途选择后端数据库。通过设置与搜索方式匹配的索引,可以加快LDAP服务器的运行速度。

OpenLDAP的服务器基本功能

在这里,我们将介绍OpenLDAP服务器slapd的基本功能。

简单身份验证和SASL身份验证

OpenLDAP支持以下3种方法作为每个LDAP客户端连接到服务器时的身份验证方式:

  • 匿名身份验证

    这是一种连接到LDAP服务器后不进行认证的连接方式,仅用于访问公开信息。

  • 简单身份验证

    这是一种在连接到LDAP服务器后,使用LDAP服务器目录中定义的特定DN和密码进行身份验证的方法。

  • SASL身份验证

    这是LDAP Version 3中定义的身份验证方法,在OpenLDAP附带的实用工具命令中,此方法是默认的。SASL(简单认证和安全层)在RFC2222中定义。连接到LDAP服务器后,将进行基于外部数据而不是LDAP服务器目录中定义的数据的身份验证。OpenLDAP还支持使用运行LDAP服务器的Linux系统的用户进行身份验证等功能。

LDAP模式

与使用数据库时定义表一样,要在LDAP服务器注册数据,需要预先定义数据的类型。这就是模式。LDAP服务器的模式可以通过自定义,但通常使用已经在RFC等中标准化了的模式。OpenLDAP附带了许多模式。但是,默认情况下,OpenLDAP并不加载大多数模式,因此可能需要根据需要进行设置。

LDAP模式描述
collective.schema定义在RFC3671中定义的集合属性的模式
corba.schema用于CORBA(公共对象请求代理体系结构)的模式
core.schemaOpenLDAP核心模式(必需)
cosine.schemaCOSINE和Internet X.500模式(必需)
duaconf.schema用于管理DUA(目录用户代理)的模式
dyngroup.schema用于Netscape定义的动态组的模式
inetorgperson.schema定义表示与组织相关的人员的inetOrgPerson对象类的模式
java.schema用于处理在RFC2713中定义的Java对象的模式
misc.schema定义正在发展中的对象类的模式
nis.schema用于处理UNIX账户等的模式,例如posixAccount和posixGroup在此文件中定义
openldap.schemaOpenLDAP项目的模式,用于信息提供
pmi.schema用于管理X.509 PMI(权限管理基础结构)的模式
ppolicy.schema用于密码策略的模式

在OpenLDAP中,注册模式到LDAP服务器时,需要使用LDIF格式的模式数据。

OpenLDAP服务器管理

LDAP服务器配置

LDAP服务器(slapd)将配置管理为专用DIT(目录信息树),以cn=config作为根DN。该DIT包含LDAP服务器的配置信息,这些信息分别存储在各种条目中。例如,模式信息存储在以cn=schema,cn=config作为顶级的条目中。可以通过添加或更改这些条目的属性来更改配置。在cn=config下面,有许多用于配置的条目。这些配置在LDAP服务器上实际上是作为目录层次结构和文件进行管理的。可以验证存储的数据文件如下所示。

# find /usr/local/etc/openldap/slapd.d/cn=config ⏎  
/usr/local/etc/openldap/slapd.d/cn=config  
/usr/local/etc/openldap/slapd.d/cn=config/cn=schema.ldif  
/usr/local/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif  
/usr/local/etc/openldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif  
/usr/local/etc/openldap/slapd.d/cn=config/cn=schema  
/usr/local/etc/openldap/slapd.d/cn=config/cn=schema/cn={2}nis.ldif  
/usr/local/etc/openldap/slapd.d/cn=config/cn=schema/cn={1}cosine.ldif  
/usr/local/etc/openldap/slapd.d/cn=config/cn=schema/cn={3}inetorgperson.ldif  
/usr/local/etc/openldap/slapd.d/cn=config/cn=schema/cn={0}core.ldif  
/usr/local/etc/openldap/slapd.d/cn=config/olcDatabase={-1}frontend.ldif  

不能直接修改这些配置文件。可以使用ldapsearch命令显示配置条目的属性。可以使用LDIF格式的文件,并使用ldapadd、ldapmodify等命令来添加或修改配置。例如,如果要更改LDAP服务器以在LDAP Version 2协议下通信,可以创建以下类似的LDIF文件(bind-v2.ldif)。

用于LDAP服务器配置的LDIF示例(bind-v2.ldif)

dn: cn=config  
changetype: modify  
add: olcAllows  
olcAllows: bind_v2  

可以使用ldapmodify命令更改配置,如下所示。

# ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f bind_v2.ldif ⏎  
modifying entry "cn=config"

在CentOS7或RedHat Enterprise Linux 7中,使用UNIX域套接字配置为root用户可以更改LDAP服务器的配置。在使用UNIX域套接字时,需要查看执行命令的用户的权限,以确定是否可以更改配置。在此示例中,已使用root用户执行,可以在不输入密码的情况下进行配置更改。

LDAP数据备份和还原

OpenLDAP的LDAP服务器附带了用于备份和还原LDAP数据的LDAP实用工具。因此,即使发生故障,也可以恢复LDAP服务器并安全使用。

slapcat

slapcat命令用于以LDIF格式导出LDAP服务器的数据。可以使用以下示例指定文件来获取LDAP服务器数据的备份。

# slapcat -l /tmp/openldap-data.ldif ⏎
slapadd

使用slapcat获取的LDAP数据可以使用slapadd命令进行还原。

# slapadd -l /tmp/openldap-data.ldif ⏎  
> _#################### 100.00% eta none elapsed none fast!  
Closing DB...
slapindex

在恢复LDAP数据后,需要使用slapindex命令重新生成索引。

# slapindex ⏎

调优

一旦使用OpenLDAP构建LDAP服务器,就需要进行优化。优化有两种方法:设置索引和调整数据库。通过正确优化LDAP服务器,可以加快其速度。

数据库优化

在OpenLDAP中,可以根据LDAP服务器的用途选择几种数据库格式。

bdb

使用Berkeley DB创建的数据库。LDAP服务器的数据注册处理速度较慢,但是搜索速度快。

hdb

使用Berkeley DB创建的数据库。将数据以层次结构进行管理。搜索性能稍逊色,但数据注册处理优于bdb。

mdb

这是最新的OpenLDAP采用的专有数据库格式。优于搜索和注册处理,但尚无大规模部署经验。

遗憾的是,mdb在采用它的版本(如CentOS7、RedHat Enterprise Linux 7等)中尚不可用。使用bdb或hdb时,可以通过调整Berkeley DB的缓存大小等进行优化,从而进一步加快LDAP服务器的速度。

索引

注册到LDAP服务器的LDAP数据将根据使用方式进行索引化。可以通过更改LDAP服务器(slapd)的设置来确定为哪些属性设置索引。通过为经常搜索的属性设置索引,可以优化LDAP服务器(slapd)。

OpenLDAP的安全性

在LDAP服务器上,管理个人信息并不少见。因此,安全性需要得到充分考虑。OpenLDAP可以提供强大的安全性,以满足企业级应用的需要。

使用专用用户启动

如果使用root用户运行LDAP服务器(slapd),则可能会遭受攻击从而获取系统的root权限。因此,可以配置LDAP服务器(slapd)以使用专用用户运行。

# /usr/local/sbin/slapd -u ldap -g ldap

SSL/TLS支持

OpenLDAP支持SSL/TLS连接。要将LDAP服务器(slapd)配置为支持SSL/TLS,可以使用下面示例的LDIF文件注册LDAP服务器的服务器证书、服务器密钥、CA证书等。

示例LDAP服务器中注册服务器证书、服务器密钥、CA证书的LDIF文件

dn: cn=config  
changetype: modify  
add: olcTLSCACertificateFile  
olcTLSCACertificateFile: /usr/local/etc/openldap/server.pem  
-  
add: olcTLSCertificateFile  
olcTLSCertificateFile: /usr/local/etc/openldap/server.pem  
-  
add: olcTLSCertificateKeyFile  
olcTLSCertificateKeyFile: /usr/local/etc/openldap/server.key  

LDAP服务器(slapd)支持在常规的ldap端口(TCP 389)上连接后,通过STARTTLS切换到TLS模式,以及在LDAP over TLS(TCP 636)上一开始就使用TLS的两种方法。

RESTRICT LISTEN地址

可以根据IP地址来限定特定IP地址的连接方式,例如:

# /usr/local/libexec/slapd -h "ldap:/// ldapi:/// ldaps:///" ⏎

此示例中,LDAP服务器将接受UNIX域套接字(ldapi)、ldap端口(ldap)和ldaps端口(ldaps)的连接。可以根据IP地址来限制仅特定IP地址的连接,例如:

# /usr/local/libexec/slapd -h "ldap://192.168.2.10/ ldapi:/// ldaps://192.168.2.10/" ⏎

IP访问控制

slapd支持使用TCP Wrapper进行对访问的控制。例如,在CentOS7和RedHat Enterprise Linux 7中使用的包中,此功能已启用。使用TCP Wrapper,可以根据连接的源IP地址控制连接的是否性。

/etc/hosts.allow

slapd: 192.168.2.0/24

对LDAP数据的访问控制

LDAP服务器(slapd)默认定义了一个称为root DN的管理DN。使用此DN,可以对LDAP服务器上的所有数据进行修改或添加。与在Linux上的root用户类似。然而,使用此DN进行所有操作是危险的。因此,Designet建议根据用途创建用于访问的DN。

另外,可以根据需要对可以访问LDAP数据的用户进行细粒度的控制。例如,可以将包含用户密码的userPassword属性设置为仅允许管理员读取。 接下来,是创建名为cn=Admin,dc=designet,dc=jp的只读用户的LDIF示例。在此LDIF中,配置为仅允许该用户和DN的所有者查看userPassword属性。

用于创建只读用户的LDAP服务器的LDIF示例

dn: olcDatabase={1}mdb,cn=config  
changetype: modify  
add: olcAccess  
olcAccess: to attrs=userPassword  
by anonymous auth  
by dn="cn=Admin,dc=designet,dc=jp" read  
by * none  
olcAccess: to *  
by self =rwcsx  
by dn="cn=Admin,dc=designet,dc=jp" =rcsx  
by * read  

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee