欢迎光临
我们一直在努力

如何在Ubuntu 16.04上安装和配置OpenLDAP和phpLDAPadmin

介绍

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

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

先决条件

在开始本教程之前,您应该使用Apache和PHP设置Ubuntu 16.04服务器。 您可以按照我们的教程如何在Ubuntu 16.04上安装Linux,Apache,MySQL,PHP(LAMP) ,跳过第2步,因为我们不需要MySQL数据库服务器。

另外,由于我们将在Web界面中输入密码,所以我们应该使用SSL加密保护Apache。 阅读如何保护Apache,让我们在Ubuntu 16.04上加密下载和配置免费的SSL证书。 您将需要一个域名来完成此步骤。 我们将使用这些相同的证书来提供安全的LDAP连接。

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

第1步 – 安装和配置LDAP服务器

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

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

sudo apt-get updatesudo apt-get install slapd ldap-utils

在安装过程中,将要求您选择并确认LDAP的管理员密码。 您可以在这里输入任何内容,因为您将有机会在短时间内进行更新。

即使我们刚刚安装了这个软件包,我们也要进行重新配置。 slapd软件包有能力提出很多重要的配置问题,但默认情况下,它们将在安装过程中跳过。 通过告诉我们的系统重新配置包,我们可以访问所有提示:

sudo dpkg-reconfigure slapd

在这个过程中有很多新的问题需要回答。 我们将接受大部分违约。 我们来回答一下问题:

  • 省略了OpenLDAP服务器配置? 没有
  • DNS域名?
    • 此选项将确定目录路径的基本结构。 阅读消息以了解这将如何实现。 即使您不拥有实际的网域,您也可以选择所需的任何值。 但是,本教程假设您具有适当的服务器域名,因此您应该使用它。 我们将在整个教程中使用example.com
  • 机构名称?
    • 对于本指南,我们将使用示例作为我们组织的名称。 你可以选择任何你觉得合适的东西。
  • 管理员密码? 输入两次安全密码
  • 数据库后端? MDB
  • 清除slapd时删除数据库? 没有
  • 移动旧数据库?
  • 允许LDAPv2协议? 没有

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

sudo ufw allow ldap

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

ldapwhoami -H ldap:// -x
anonymous

anonymous是我们anonymous的结果,因为我们运行ldapwhoami而不登录到LDAP服务器。 这意味着服务器正在运行并应答查询。 接下来,我们将设置一个Web界面来管理LDAP数据。

第2步 – 安装和配置phpLDAPadmin Web界面

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

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

sudo apt-get install phpldapadmin

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

Web服务器现在配置为提供应用程序,但我们需要进行一些其他更改。 我们需要将phpLDAPadmin配置为使用我们的域,而不是自动填充LDAP登录信息。

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

sudo nano /etc/phpldapadmin/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 ,我们需要将每个域组件(不是一个点)放入dc= notation中将其转换为LDAP语法:

/etc/phpldapadmin/config.php
$servers->setValue('server','base', array('dc=example,dc=com'));

现在找到登录bind_id配置行,并bind_id开头注释#

/etc/phpldapadmin/config.php
#$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');

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

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

/etc/phpldapadmin/config.php
$config->custom->appearance['hide_template_warning'] = true;

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

接下来我们将登录到phpLDAPadmin。

第3步 – 登录到phpLDAPadmin Web界面

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

https://example.com/phpldapadmin

phpLDAPadmin着陆页将加载。 点击页面左侧菜单中的登录链接。 将提供登录表单:

phpLDAPadmin登录页面

登录DN是您将要使用的用户名。 它包含帐户名称作为cn=部分,您为服务器选择的域名分为dc=部分,如上述步骤所述。 我们在安装过程中设置的默认管理员帐户称为admin ,因此在我们的示例中,我们将键入以下内容:

cn=admin,dc=example,dc=com

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

您将被带到主界面:

phpLDAPadmin主页

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

LDAP如何构建数据和目录层次结构是灵活的。 您可以创建任何类型的结构,并创建如何交互的规则。

由于Ubuntu 16.04上的过程与以前的版本相同,因此您可以按照Ubuntu 12.04LDAP安装文章的添加组织单位,组和用户”部分中的步骤进行操作。

这些步骤将在此安装phpLDAPadmin上运行良好,因此请遵循以下操作,以了解如何使用界面并学习如何构建数据。

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

第4步 – 配置StartTLS LDAP加密

虽然我们加密了我们的Web界面,但外部LDAP客户端仍然连接到服务器,并以纯文本形式传递信息。 让我们使用我们的加密SSL证书向我们的LDAP服务器添加加密。

复制我们加密证书

因为slapd守护程序作为用户openldap运行,而让加密证书只能由root用户读取,所以我们需要进行一些调整以允许slapd访问证书。 我们将创建一个简短的脚本,将证书复制到SSL证书和密钥的标准系统目录/etc/ssl/ 我们正在做一个脚本来做这个,而不是手动输入命令,我们需要自动重复这个过程,当我们的加密证书被更新。 稍后我们将更新certbot cron作业,以启用此功能。

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

sudo nano /usr/local/bin/renew.sh

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

/usr/local/bin/renew.sh
#!/bin/shSITE=example.com# move to the correct let's encrypt directorycd /etc/letsencrypt/live/$SITE# copy the filescp cert.pem /etc/ssl/certs/$SITE.cert.pemcp fullchain.pem /etc/ssl/certs/$SITE.fullchain.pemcp privkey.pem /etc/ssl/private/$SITE.privkey.pem# adjust permissions of the private keychown :ssl-cert /etc/ssl/private/$SITE.privkey.pemchmod 640 /etc/ssl/private/$SITE.privkey.pem# restart slapd to load new certificatessystemctl restart slapd

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

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

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

然后用sudo运行脚本:

sudo /usr/local/bin/renew.sh

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

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

上面的sudo命令与普通命令略有不同。 su -c ' . . . ' su -c ' . . . ' su -c ' . . . '在执行它之前,将整个ls命令包装在 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 May 31 13:58 /etc/ssl/certs/example.com.fullchain.pem-rw-r----- 1 root ssl-cert 1704 May 31 13:58 /etc/ssl/private/example.com.privkey.pem

接下来,我们将使用certbot自动执行此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 restart slapd

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

打开一个新的LDIF文件:

cd ~nano ssl.ldif

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

ssl.ldif
dn: cn=configchangetype: modifyadd: olcTLSCACertificateFileolcTLSCACertificateFile: /etc/ssl/certs/example.com.fullchain.pem-add: olcTLSCertificateFileolcTLSCertificateFile: /etc/ssl/certs/example.com.cert.pem-add: olcTLSCertificateKeyFileolcTLSCertificateKeyFile: /etc/ssl/private/example.com.privkey.pem

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

sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ssl.ldif
SASL/EXTERNAL authentication startedSASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=authSASL SSF: 0modifying entry "cn=config"

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

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

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

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

结论

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

我们设置的系统非常灵活,您可以根据需要设计自己的组织架构并管理资源组。 有关管理LDAP的更多信息,包括更多的命令行工具和技术,请阅读我们的教程如何使用OpenLDAP实用程序管理和使用LDAP服务器 有关保护LDAP服务器的更深入的信息,包括如何强制所有客户端使用安全连接,请阅读如何使用STARTTLS加密OpenLDAP连接

赞(0) 打赏
未经允许不得转载:老赵部落 » 如何在Ubuntu 16.04上安装和配置OpenLDAP和phpLDAPadmin

评论 抢沙发