配置 OpenLDAP

来自 Alpine Linux

轻型目录访问协议 (LDAP) 经常被用作身份验证机制,为许多不同的应用程序提供通用的用户名和密码。本教程展示了如何在 Alpine Linux 上安装和配置 OpenLDAP 软件包。

安装软件包

Alpine 软件包仓库中提供了 OpenLDAP 软件包。但是,仅仅添加 openldap apk 并不足以让您启动并运行。您还需要安装后端数据库和一些 LDAP 命令行工具。

方法如下

# apk add openldap openldap-back-mdb openldap-clients

但是,在您启动 slapd 服务之前,还有一些配置需要完成。

自定义 OpenLDAP 2.3+ 的配置

Alpine OpenLDAP 软件包可以使用配置目录 (slapd.d) 或配置文件 (slapd.conf)。自从 OpenLDAP 2.3 版本以来,首选方法是使用 slapd.d 配置目录。任何官方 OpenLDAP 文档,包括他们的 快速入门指南,都将使用这种配置方法。

首先,创建具有正确所有权和权限的 slapd.d 目录。

# install -m 755 -o ldap -g ldap -d /etc/openldap/slapd.d

接下来,编辑 slapd 启动配置以使用目录而不是文件。

  1. 在您喜欢的编辑器中打开 /etc/conf.d/slapd
  2. 注释掉 cfgfile="/etc/openldap/slapd.conf"
  3. 取消注释 cfgdir="/etc/openldap/slapd.d"

最后,删除包含的 slapd.conf 文件。

# rm /etc/openldap/slapd.conf

更新共享库文件名

在您喜欢的编辑器中打开 /etc/openldap/slapd.ldif。搜索以 .la 结尾的文件名,并将扩展名更改为 .so

自定义您的域的配置

您的 LDAP 域可以与您的 DNS 域相同,也可以完全不同。无论您选择什么,请务必使用 dc=domain,dc=tld 的 LDAP 命名约定,而不是 domain.tld 的点分隔 DNS 样式

  1. 再次编辑 slapd.ldif。
  2. 找到 olcSuffix: 关键字。
  3. 更改值以匹配您的域
  4. 找到 olcRootDN:
  5. 更改值以匹配您的域

稍后,本文档将假设域为 dc=homedc=contoso,dc=com,分别反映 homecontoso.com 的域。

为 Linux 用户账户添加模式

基本的 OpenLDAP 配置不包含核心模式定义以外的任何内容。为了对 Linux 系统有用,通常包含 inetOrgPerson 模式和 NIS 模式。模式文件随 OpenLDAP 软件包一起提供。所有需要做的就是将它们包含在 slapd.ldif 配置中,以及 cosine.ldif 依赖项。

  1. 再次编辑 slapd.ldif
  2. 找到行 include: file:///etc/openldap/schema/core.ldif
  3. 追加类似的行,引用 cosine.ldifinetorgperson.ldifnis.ldif

完成时应如下所示

/etc/openldap/slapd.ldif 的内容

include: file:///etc/openldap/schema/core.ldif include: file:///etc/openldap/schema/cosine.ldif include: file:///etc/openldap/schema/inetorgperson.ldif include: file:///etc/openldap/schema/nis.ldif

导入配置

最后一次验证 slapd.ldif,并使用 slapadd 命令将其导入到后端数据库中。

# slapadd -n 0 -F /etc/openldap/slapd.d -l /etc/openldap/slapd.ldif

应该没有错误,只有 “Closing DB...” 消息。

接下来,更改 /etc/openldap/slapd.d 中生成文件的所有权

如果您跳过此步骤,slapd 服务将拒绝启动。

# chown -R ldap:ldap /etc/openldap/slapd.d/*

配置 slapd 服务

pid 目录丢失。我们需要创建它,否则服务将无法启动,因此需要首先完成此操作。

# install -m 755 -o ldap -g ldap -d /var/lib/openldap/run

接下来,您可以启动服务并在启动时启用它。

# rc-service slapd start # rc-update add slapd

测试

OpenLDAP 快速入门指南使用 ldapsearch 实用程序来测试配置。

$ ldapsearch -x -b "" -s base '(objectclass=*)' namingContexts

您应该看到您的域。

您也可以使用 slapcat 进行测试

$ slapcat -n 0

这将以 LDIF 格式转储整个配置数据库。您也可以管道传输到 grep 并指定您的域名,以验证一切看起来是否正确。使用 grep 时,请记住 LDAP 使用 dc=domain,dc=com 格式,而不是更熟悉的 domain.com。

稍后,当您开始填充 LDAP 数据库时,您可以使用 slapcat -n 1 查看您的信息。(零是配置数据库。大于零的数字是用户定义的数据库。)

最后,您可以运行 netstat -tln 并在输出中查找 LDAP 端口 389。

脚本化安装

如果您想自动化上述步骤,请使用以下脚本。请务必调整 DOMAIN 值以适合您的需求。

 export DOMAIN="dc=home"
 
 echo "Installing packages..."
 apk add openldap openldap-back-mdb openldap-clients
 
 echo "Configuring for v2.3+ style slapd.d config directory..."
 install -m 755 -o ldap -g ldap -d /etc/openldap/slapd.d
 sed -i~ \
   -e 's/^cfgfile=/#cfgfile=/' \
   -e 's/^#cfgdir=.*/cfgdir=\"\/etc\/openldap\/slapd.d\"/' \
   /etc/conf.d/slapd
 rm /etc/openldap/slapd.conf
 
 echo "Customizing for domain: ${DOMAIN}..."
 sed -i~ \
   -e 's/\.la$/.so/' \
   -e "s/dc=my-domain,dc=com/${DOMAIN}/" /etc/openldap/slapd.ldif
 
 echo "Adding schema for Linux user accounts..."
 cp /etc/openldap/slapd.ldif /etc/openldap/slapd.ldif~1
 awk '{ print } /^include:/ { sub("core", "cosine", $0); print $0; sub("cosine", "inetorgperson"); print $0; sub("inetorgperson", "nis"); print  }' /etc/openldap/slapd.ldif~1 >/etc/openldap/slapd.ldif
 
 echo "Importing configuration..."
 slapadd -n 0 -F /etc/openldap/slapd.d -l /etc/openldap/slapd.ldif
 chown -R ldap:ldap /etc/openldap/slapd.d/*
 
 echo "Configuring slapd service..."
 install -m 755 -o ldap -g ldap -d /var/lib/openldap/run
 service slapd start
 rc-update add slapd

创建组织结构

现在安装已完成,您可以开始使用您的 LDAP 数据库了。至少,您需要在您的 LDAP 目录中创建一个组织。这在 OpenLDAP 快速入门 文档的第 11 步中进行了介绍。

这是一个使用 contoso.com 域作为组织和 home/dc=home 作为基本 DN 的示例(如果您的基本 DN 不同,请更新它)

 cat <<EOF >org.ldif
 dn: dc=contoso,dc=com
 objectclass: dcObject
 objectclass: organization
 o: Fictional Company
 dc: contoso
 
 dn: cn=Manager,dc=contoso,dc=com
 objectclass: organizationalRole
 cn: Manager
 EOF
 
 ldapadd -x -D "cn=Manager,dc=home" -w secret -f org.ldif

您可能还想创建组织单元 (OU) 以帮助保持目录整洁。

这是一个创建 PeopleGroups 作为 OU 的 LDIF

 # Organizational unit for users
 dn: ou=People,dc=home
 changetype: add
 objectClass: organizationalUnit
 ou: People
 
 # Organizational unit for groups.
 dn: ou=Groups,dc=home
 changetype: add
 objectClass: organizationalUnit
 ou: Groups

使用类似于用于创建组织的 ldapadd 命令导入 OU。

现在这已完成,您可以使用您选择的管理工具连接到 LDAP 服务器,并开始填充用户、组等。LDAPAdmin 🔓 对于 Windows 用户来说,是一个老旧但好用的工具。

下一步

此处提供的配置不包括 TLS(加密)通信的规定。它不应在不受信任的网络上使用。有关设置加密 LDAP 连接的说明,请参阅官方 OpenLDAP 文档。

参考