介绍

轻量级目录访问协议 (LDAP) 是一种标准协议,旨在通过网络管理和访问分层目录信息。它可用于存储任何类型的信息,但它最常用作集中式身份验证系统或用于公司电子邮件和电话目录。

在本指南中,我们将讨论如何在 Ubuntu 16.04 上安装和配置 OpenLDAP 服务器。然后我们将安装 phpLDAPadmin,这是一个用于查看和操作 LDAP 信息的 Web 界面。我们将使用来自 Let's Encrypt 的 SSL 证书保护 Web 界面和 LDAP 服务,Let's Encrypt 是免费和自动证书的提供商。

先决条件

在开始本教程之前,您应该有一个使用 Apache 和 PHP 设置的 Ubuntu 16.04 服务器。您可以按照我们的教程 [如何在 Ubuntu 16.04 上安装 Linux、Apache、MySQL、PHP (LAMP) 堆栈](https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql -php-lamp-stack-on-ubuntu-16-04),跳过第 2 步,因为我们不需要 MySQL 数据库服务器。

此外,由于我们将在 Web 界面中输入密码,因此我们应该使用 SSL 加密来保护 Apache。阅读[如何在 Ubuntu 16.04 上使用 Let's Encrypt 保护 Apache](https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-16- 04)下载和配置免费的SSL证书。您将需要一个域名来完成此步骤。我们也将使用这些相同的证书来提供安全的 LDAP 连接。

注意: Let's Encrypt 教程假设您的服务器可以访问公共互联网。如果不是这种情况,您将不得不使用不同的证书提供商,或者您的组织自己的证书颁发机构。无论哪种方式,您都应该能够以最少的更改完成本教程,主要是关于证书的路径或文件名。

步骤 1 — 安装和配置 LDAP 服务器

我们的第一步是安装 LDAP 服务器和一些相关的实用程序。幸运的是,我们需要的软件包都可以在 Ubuntu 的默认存储库中找到。

登录到您的服务器。由于这是我们在本次会议中第一次使用 apt-get,我们将刷新本地包索引,然后安装我们想要的包:

sudo apt-get 更新
sudo apt-get install slapd ldap-utils

在安装过程中,系统会要求您选择并确认 LDAP 的管理员密码。您可以在此处输入任何内容,因为您马上就有机会更新它。

即使我们刚刚安装了该软件包,我们仍将继续并重新配置它。 slapd 包有能力询问很多重要的配置问题,但默认情况下它们在安装过程中被跳过。我们通过告诉我们的系统重新配置包来访问所有提示:

sudo dpkg-重新配置 slapd

在这个过程中有很多新的问题需要回答。我们将接受大部分默认设置。让我们来看看这些问题:

  • 省略 OpenLDAP 服务器配置?不

  • DNS 域名?

  • 此选项将确定目录路径的基本结构。阅读消息以准确了解如何实施。您实际上可以选择您想要的任何值,即使您不拥有实际域。但是,本教程假设您有一个正确的服务器域名,因此您应该使用它。我们将在整个教程中使用 example.com

  • 机构名称?

  • 对于本指南,我们将使用 example 作为我们组织的名称。你可以选择任何你认为合适的东西。

  • 管理员密码?输入两次安全密码

  • 数据库后端?多边开发银行

  • 清除 slapd 时删除数据库?不

  • 移动旧数据库?是的

  • 允许 LDAPv2 协议?不

此时,您的 LDAP 服务器已配置并正在运行。打开防火墙上的 LDAP 端口,以便外部客户端可以连接:

sudo ufw 允许 ldap

让我们用 ldapwhoami 测试我们的 LDAP 连接,它应该返回我们连接的用户名:

ldapwhoami -H ldap:// -x

输出匿名

anonymous 是我们期望的结果,因为我们在没有登录 LDAP 服务器的情况下运行了 ldapwhoami。这意味着服务器正在运行并回答查询。接下来,我们将设置一个 Web 界面来管理 LDAP 数据。

步骤 2 — 安装和配置 phpLDAPadmin Web 界面

虽然很可能通过命令行管理 LDAP,但大多数用户会发现使用 Web 界面更容易。我们将安装 phpLDAPadmin,这是一个提供此功能的 PHP 应用程序。

Ubuntu 存储库包含一个 phpLDAPadmin 包。您可以使用 apt-get 安装它:

sudo apt-get install phpldapadmin

这将安装应用程序、启用必要的 Apache 配置并重新加载 Apache。

Web 服务器现在已配置为为应用程序提供服务,但我们需要进行一些额外的更改。我们需要配置 phpLDAPadmin 以使用我们的域,并且不自动填充 LDAP 登录信息。

首先在文本编辑器中以 root 权限打开主配置文件:

Sudonano /etc/phpl da padmin/config. php

查找以 $servers->setValue('server','name' 开头的行。在 nano 中,您可以通过输入 CTRL-W、字符串和 ENTER 来搜索字符串。您的光标将放置在正确的行上。

此行是 LDAP 服务器的显示名称,Web 界面将其用于有关服务器的标题和消息。在此处选择任何合适的内容:

/etc/phpldapadmin/config.php

$servers->setValue('server','name','Example LDAP');

接下来,向下移动到 $servers->setValue('server','base' 行。这个配置告诉 phpLDAPadmin LDAP 层次结构的根是什么。这是基于我们在重新配置 slapd 时输入的值 包。在我们的示例中,我们选择了 example.com,我们需要通过将每个域组件(不是点)放入 dcu003d 符号来将其转换为 LDAP 语法:

/etc/phpldapadmin/config.php

$servers->setValue('server','base', array('dcu003dexample,dcu003dcom'));

现在找到 login bind_id 配置行,并在行首用 # 将其注释掉:

/etc/phpldapadmin/config.php

#$servers->setValue('login','bind_id','cnu003dadmin,dcu003dexample,dcu003dcom');

此选项在 Web 界面中预填充管理员登录详细信息。如果我们的 phpLDAPadmin 页面是可公开访问的,那么这是我们不应该分享的信息。

我们需要调整的最后一件事是控制某些 phpLDAPadmin 警告消息的可见性的设置。默认情况下,应用程序会显示很多关于模板文件的警告消息。这些对我们当前对软件的使用没有影响。我们可以通过搜索 hide_template_warning 参数、取消注释包含它的行并将其设置为 true 来隐藏它们:

/etc/phpldapadmin/config.php

$config->custom->appearance['hide_template_warning'] u003d true;

这是我们需要调整的最后一件事。保存并关闭文件以完成。我们不需要重新启动任何东西来使更改生效。

接下来我们将登录到 phpLDAPadmin。

第 3 步 — 登录 phpLDAPadmin Web 界面

对 phpLDAPadmin 进行了必要的配置更改后,我们现在可以开始使用它了。在 Web 浏览器中导航到应用程序。请务必将您的域替换为以下突出显示的区域:

https://translate.google.com/translate?hl=en&sl=auto&tl=zh&u=https://example.com/phpldapadmin

phpLDAPadmin 登录页面将加载。单击页面左侧菜单中的 login 链接。将显示一个登录表单:

phpLDAPadmin登录页面

Login DN 是您将使用的用户名。它包含作为 cnu003d 部分的帐户名称,以及您为服务器选择的域名,如前面步骤中所述,分为 dcu003d 部分。我们在安装过程中设置的默认管理员帐户称为 admin,因此对于我们的示例,我们将输入以下内容:

cnu003dadmin,dcu003dexample,dcu003dcom

为您的域输入适当的字符串后,输入您在配置期间创建的管理员密码,然后单击 Authenticate 按钮。

您将被带到主界面:

phpLDAPadmin主页

此时,您已登录到 phpLDAPadmin 界面。您可以添加用户、组织单位、组和关系。

LDAP 在您如何构建数据和目录层次结构方面非常灵活。你可以创建任何你喜欢的结构,也可以为它们如何交互创建规则。

由于此过程在 Ubuntu 16.04 上与之前版本相同,因此您可以按照 [Ubuntu 12.04 的 LDAP 安装文章](https://www .digitalocean.com/community/tutorials/how-to-install-and-configure-a-basic-ldap-server-on-an-ubuntu-12-04-vps#add-organizational-units-groups-and-users )。

这些步骤将在 phpLDAPadmin 的安装中运行良好,因此请继续练习使用该界面并学习如何构建数据。

现在我们已经登录并熟悉了 Web 界面,让我们花点时间为我们的 LDAP 服务器提供更多安全性。

步骤 4 – 配置 StartTLS LDAP 加密

尽管我们已经加密了我们的 Web 界面,但外部 LDAP 客户端仍然连接到服务器并以纯文本形式传递信息。让我们使用我们的 Let's Encrypt SSL 证书来为我们的 LDAP 服务器添加加密。

复制 Let's Encrypt 证书

因为 slapd 守护进程以 openldap 用户身份运行,而 Let's Encrypt 证书只能由 root 用户读取,所以我们需要进行一些调整以允许 slapd 访问证书.我们将创建一个简短的脚本,将证书复制到“/etc/ssl/”,这是 SSL 证书和密钥的标准系统目录。我们制作一个脚本来执行此操作,而不是手动输入命令的原因是,每当更新 Let's Encrypt 证书时,我们都需要自动重复此过程。我们稍后将更新 certbot cron 作业以启用此功能。

首先,为 shell 脚本打开一个新的文本文件:

Sudo nano / Usr / Okal / Bottle / Rene w.嘘

这将打开一个空白文本文件。粘贴以下脚本。请务必更新 SITEu003dexample.com 部分以反映您的 Let's Encrypt 证书的存储位置。您可以通过使用 sudo ls /etc/letsencrypt/live 列出证书目录来找到正确的值。

/usr/local/bin/renew.sh

#!/bin/sh

站点u003dexample.com

# 移动到正确的让我们加密目录
cd /etc/letsencrypt/live/$SITE

# 复制文件
cp cert.pem /etc/ssl/certs/$SITE.cert.pem
cp fullchain.pem /etc/ssl/certs/$SITE.fullchain.pem
cp privkey.pem /etc/ssl/private/$SITE.privkey.pem

# 调整私钥的权限
chown :ssl-cert /etc/ssl/private/$SITE.privkey.pem
chmod 640 /etc/ssl/private/$SITE.privkey.pem

# 重启 slapd 以加载新证书
systemctl 重启 slapd

该脚本移动到 Let's Encrypt 证书目录,将文件复制到 /etc/ssl,然后更新私钥的权限以使其可由系统的 ssl-cert 组读取。它还会重新启动 slapd,这将确保在从我们的 certbot 续订 cron 作业运行此脚本时加载新证书。

保存并关闭文件,然后使其可执行:

sudo chmod u+x /usr/local/bin/renew.sh

然后使用 sudo 运行脚本:

须藤/usr/local/bin/renew.sh

通过列出 /etc/ssl 中的新文件来验证脚本是否有效:

sudo su -c 'ls -al /etc/ssl/{certs,private}/example.com*'

上面的 sudo 命令与正常的有点不同。 'su -c'。 . .'部分在执行之前将整个ls 命令包装在 **root** shell 中。如果我们不这样做,*通配符文件名扩展将使用您的非 sudo 用户的权限运行,并且它将失败,因为您的用户无法读取/etc/ssl/private`。

ls 将打印有关这三个文件的详细信息。验证所有权和权限是否正确:

输出-rw-r--r-- 1 root root 1793 May 31 13:58 /etc/ssl/certs/example.com.cert.pem
-rw-r--r-- 1 root root 3440 5 月 31 日 13:58 /etc/ssl/certs/example.com.fullchain.pem
-rw-r----- 1 root ssl-cert 1704 5 月 31 日 13:58 /etc/ssl/private/example.com.privkey.pem

接下来,我们将使用 certbot 自动执行此操作。

更新 Certbot 更新 Cron 作业

我们需要更新 certbot cron 作业,以便在更新证书时运行此脚本:

sudo crontab -e

您应该已经有了 certbot renew 行。在下面添加突出显示的部分:

crontab

15 3 * * * /usr/bin/certbot renew --quiet --renew-hook /usr/local/bin/renew.sh

保存并关闭 crontab。现在,每当 certbot 更新证书时,我们的脚本将运行以复制文件、调整权限并重新启动 slapd 服务器。

配置 slapd 以提供安全连接

我们需要将 openldap 用户添加到 ssl-cert 组,以便 slapd 可以读取私钥:

sudo usermod -aG ssl-cert openldap

重新启动 slapd 以便它选择新组:

sudo systemctl 重启 slapd

最后,我们需要配置 slapd 来实际使用这些证书和密钥。为此,我们将所有配置更改放在一个 LDIF 文件(代表 LDAP 数据交换格式)中,然后使用“ldapmodify”命令将更改加载到我们的 LDAP 服务器中。

打开一个新的 LDIF 文件:

光盘~
纳米 ssl.ldif

这将打开一个空白文件。将以下内容粘贴到文件中,更新文件名以反映您的域:

ssl.ldif

dn:cnu003d配置
更改类型:修改
添加:olcTLSCACertificateFile
olcTLSCACertificateFile:/etc/ssl/certs/example.com.fullchain.pem
-
添加:olcTLSCertificateFile
olcTLSCertificateFile:/etc/ssl/certs/example.com.cert.pem
-
添加:olcTLSCertificateKeyFile
olcTLSCertificateKeyFile:/etc/ssl/private/example.com.privkey.pem

保存并关闭文件,然后使用 ldapmodify 应用更改:

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

输出SASL/EXTERNAL 身份验证已启动
SASL 用户名:gidNumberu003d0+uidNumberu003d0,cnu003dpeercred,cnu003dexternal,cnu003dauth
SASL SSF:0
修改条目“cnu003dconfig”

我们不需要重新加载 slapd 来加载新证书,这在我们使用 ldapmodify 更新配置时自动发生。再次运行 ldapwhoami 命令进行验证。这次我们需要使用正确的主机名并添加 -ZZ 选项来强制安全连接:

ldapwhoami -H ldap://example.com -x -ZZ

使用安全连接时我们需要完整的主机名,因为客户端将检查以确保主机名与证书上的主机名匹配。这可以防止中间人攻击,攻击者可以拦截您的连接并冒充您的服务器。

ldapwhoami 命令应该返回 anonymous,没有错误。我们已经成功加密了我们的 LDAP 连接。

结论

在本教程中,我们安装并配置了 OpenLDAP slapd 服务器,以及 LDAP Web 界面 phpLDAPadmin。我们还在两台服务器上设置了加密,并更新了 certbot 以自动处理 slapd 的 Let's Encrypt 证书更新过程。

我们建立的系统非常灵活,您将能够设计自己的组织架构并根据需要管理资源组。有关管理 LDAP 的更多信息,包括更多命令行工具和技术,请阅读我们的教程 [如何使用 OpenLDAP 实用程序管理和使用 LDAP 服务器](https://www.digitalocean.com/community/tutorials/how-to-manage -and-use-ldap-servers-with-openldap-utilities)。有关保护 LDAP 服务器的更深入信息,包括如何强制所有客户端使用安全连接,请阅读 [如何使用 STARTTLS 加密 OpenLDAP 连接](https://www.digitalocean.com/community/tutorials/how- to-encrypt-openldap-connections-using-starttls)。

Logo

更多推荐