如何在服务器上安装OpenLDAP

介绍

轻量级目录访问协议(LDAP)是一种标准协议,旨在通过网络管理和访问分层目录信息。目录服务在开发内部网和与互联网程序共享用户、系统、网络、服务和应用的过程中占据了重要地位。例如,目录服务可能提供了组织有序的记录集合,通常有层级结构,例如公司电子邮件目录。同理,也可以提供包含了地址和电话号码的电话簿。 用例子来说,一个用语言描述的LDAP的搜索如:“在公司邮件目录中搜索公司位于那什维尔名字中含有“Jessy”的有邮件地址的所有人。请返回他们的全名,电子邮件,头衔和简述。

在本教程中,我们将讨论如何在Ubuntu 16.04上安装和配置OpenLDAP服务器。之后,我们将安装phpLDAPadmin,一个用于查看和操作LDAP信息的Web界面。我们将使用腾讯云SSL证书来保护Web界面和LDAP服务。

准备

在开始本教程之前,您应该使用Apache和PHP设置Ubuntu 16.04服务器。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器。如何安装LAMP请参考这篇文章

此外,由于我们将在Web界面中输入密码,因此我们应该使用SSL加密来保护Apache。您需要SSL证书,如何设置此证书取决于你是否拥有可解析该服务器的域名。

第一步、安装和配置LDAP服务器

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

登录您的服务器,我们将刷新本地包索引,然后安装我们想要的包:

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

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

即使我们刚刚安装了软件包,我们还需继续重新配置它。slapd软件包能够提出许多重要的配置问题,但默认情况下会在安装过程中跳过这些问题。通过下面的命令,我们可以访问所有提示:

sudo dpkg-reconfigure slapd

在这个过程中有很多新的问题需要回答。我们将接受大多数默认值。我们先来看看问题:

  • 省略OpenLDAP服务器配置?回答“NO”
  • DNS域名?
    • 此选项将确定目录路径的基本结构。即使您不知道实际的域名,您也可以选择您想要的任何值。但是,本教程假设您拥有适当的服务器域名。我们将在整个教程中使用example.com
  • 机构名称?
    • 本教程中,我们将使用example作为我们组织的名称。您可以选择您认为合适的名称。
  • 管理员密码?输入两次安全密码
  • 数据库后端?MDB
  • 清除slapd时删除数据库?回答NO
  • 移动旧数据库?回答YES
  • 允许LDAPv2协议?回答NO

此时,您的LDAP服务器已配置并正在运行。我们需要打开防火墙上的LDAP端口,以便外部客户端可以连接,如果您使用的是腾讯云的CVM服务器,您可以直接在腾讯云控制台中的安全组进行设置。:

sudo ufw allow ldap
​

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

ldapwhoami -H ldap:// -x
anonymous

anonymous是我们想要的结果,因为我们在ldapwhoami没有登录LDAP服务器的情况下运行。接下来,我们将设置一个Web界面来管理LDAP数据。

第二步、安装和配置phpLDAPadmin Web界面

虽然通过命令行管理LDAP功能很强大,但使用Web界面更容易。我们将安装phpLDAPadmin,这是一个提供此功能的PHP应用程序。Ubuntu存储库包含一个phpLDAPadmin包。你可以用apt-get安装它:

sudo apt-get install phpldapadmin

这将安装应用程序,启用必要的Apache配置,并重新加载Apache。Web服务器现在配置为服务应用程序,但我们需要进行一些其他更改。我们需要配置phpLDAPadmin以使用我们的域名。

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

sudo nano /etc/phpldapadmin/config.php

寻找以$servers->setValue('server','name'开头的行。在nano中,您可以通过输入CTRL-W搜索一个字符串,最后按ENTER。您的光标必须放在正确的行上。

此行是LDAP服务器的显示名称,Web界面使用该名称来显示有关服务器的标头和消息。选择任何适合的内容:

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

接下来,向下移动到$servers->setValue('server','name'。此配置告诉phpLDAPadminLDAP层次结构的根目录。这基于我们在重新配置slapd包时输入的值。在我们选择的示例example.com中,我们需要将每个域组件(所有内容都不是点)放入dc=符号中,从而将其转换为LDAP语法:

$servers->setValue('server','base', array('dc=example,dc=com'));

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

#$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');

此选项预先填充Web界面中的管理员登录详细信息。但我们不应该设置phpLDAPadmin页面为可公开访问。

我们最后调整控制某些phpLDAPadmin警告消息的可见性的设置。默认情况下,应用程序将显示有关模板文件的大量警告消息。我们可以通过搜索hide_template_warning参数,取消注释包含它的行并将其设置为true来隐藏它们:

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

这是我们需要调整的最后一件事。保存并关闭文件。我们无需重新启动任何内容即可使更改生效。

接下来我们将登录phpLDAPadmin。

第三步、登录phpLDAPadmin Web界面

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

https://example.com/phpldapadmin

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

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

cn=admin,dc=example,dc=com

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

您将进入主界面:

此时,您将登录到phpLDAPadmin界面。您可以添加用户,组织单位,群组和关系。LDAP可以灵活地构建数据和目录层次结构。您可以创建任何类型的结构,并为它们的交互方式创建规则。这些步骤适用于phpLDAPadmin,所以请继续学习如何使用界面和构建数据。

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

第四步、配置SSL LDAP加密

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

申请免费的SSL证书

申请入口

进入SSL证书管理控制台

单击【申请证书】

查看申请域名型证书型号,单击【确定】

填写申请

填写申请域名,例如qcloud.com,cloud.tencent.com,demo.test.qlcoud.com。

手动DNS验证方式

证书默认支持收到DNS验证,验证方法可查看详情

提交申请后验证身份

提交申请成功后弹窗提示如下,需要前往【证书详情页】获取CName记录添加解析:

获取CName记录如Tips中显示,需要尽快成功添加解析,方可通过CA机构审核:

复制腾讯云的加密证书

由于slapd守护程序作为用户openldap运行,并且腾讯云的加密证书只能由root用户读取,因此我们需要进行一些调整以允许slapd访问证书。我们将创建一个脚本将证书复制到/etc/ssl/SSL证书和密钥的标准系统目录。

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

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

这将打开一个空白文本文件。粘贴以下脚本。请务必更新该部分以反映腾讯云加密证书的存储位置。下载证书后,你需要找到正确的值。

#!/bin/sh
​
SITE=example.com
​
# move to the correct Tencent Cloud SSL directory 这里选择你证书的目录
cd /etc/Tencent_Cloud_SSL/live/$SITE
​
# copy the files
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
​
# adjust permissions of the private key
chown :ssl-cert /etc/ssl/private/$SITE.privkey.pem
chmod 640 /etc/ssl/private/$SITE.privkey.pem
​
# restart slapd to load new certificates
systemctl restart slapd

此脚本进入腾讯云的加密证书目录,将文件复制到/etc/ssl,然后更新私钥的权限,使其可由系统的ssl-cert组读取。它也会重新启动slapd

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

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 '. . .'在执行之前将整个ls命令包装在rootshell中。如果我们不这样做,*通配符文件名扩展将与您的非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

配置slapd以提供安全连接

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

sudo usermod -aG ssl-cert openldap

重新启动slapd以便它获取新组:

sudo systemctl restart slapd

最后,我们需要配置slapd实际使用这些证书和密钥。为此,我们将所有配置更改放在LDIF文件中,然后使用ldapmodify命令将更改加载到LDAP服务器中。

打开一个新的LDIF文件:

cd ~
nano ssl.ldif

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

dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/example.com.fullchain.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/example.com.cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/example.com.privkey.pem

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

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

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

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

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

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

结论

在本教程中,我们安装并配置了OpenLDAP 服务器和phpLDAPadminWeb界面。我们还在两台服务器上设置了SSL加密。我们设置的系统非常灵活,您可以根据需要设计自己的组织架构并管理资源组。感谢你的阅读,更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Install and Configure OpenLDAP and phpLDAPadmin on Ubuntu 16.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Ubuntu 18.04上为用户目录设置vsftpd

FTP是文件传输协议的缩写,是一种曾经广泛用于在客户端和服务器之间移动文件的网络协议。它已被更快,更安全,更方便的文件传输方式所取代。许多普通网民希望通过htt...

13300
来自专栏云计算教程系列

如何在Debian 9上为用户目录设置vsftpd

FTP是文件传输协议的缩写,是一种曾经广泛用于在客户端和服务器之间移动文件的网络协议。它已被更快,更安全,更方便的文件传输方式所取代。很多休闲互联网用户希望直接...

43540
来自专栏耕耘实录

SSH免密远程登录的配置与实现

操作系统:CentOS Linux release 7.4.1708 (Core)

14020
来自专栏Java帮帮-微信公众号-技术文章全总结

Centos6.5安装配置nginx

出现如下代码: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is...

11530
来自专栏Linux驱动

Linux-kill命令(11)

kill:指定将信号发送给某个进程,常用来杀掉进程,可以通过ps、top命令来查看进程 在默认情况下: 采用编号为15的TERM信号。TERM信号将终止所有不能...

24450
来自专栏云计算教程系列

如何使用Spiped在Ubuntu 16.04上加密到Redis的流量

Redis是一个开源键值数据存储,使用内存存储模型和可选的磁盘写入来实现持久性。它具有事务,发布/订阅消息传递模式以及其他功能之间的自动故障转移功能。Redis...

35300
来自专栏云计算教程系列

使用SSH隧道保护三层Rails应用程序中的通信

在Ruby on Rails应用程序中,它可以轻易地映射到表示层的Web服务器,应用程序层的Rails服务器和数据层的数据库。在此设置中,应用程序层与数据层通信...

11530
来自专栏SpiritLing

自己写的加密网页,与百度网盘私密很相似,需要密码才能访问(原创)

题记: 马上就要招聘了,所以我打算放置简历在自己的网页上,但是又不想给除了招聘的人,或者我指定的人外看,所以我需要对网页页面加密 我找了许多资料,查看了许多所谓...

57950
来自专栏跟着阿笨一起玩NET

EntityFramework 连接数据库出错

本文转载:http://www.cnblogs.com/shuang121/archive/2012/03/19/2406121.html

14210
来自专栏python3

lsyncd实时同步工具

再后来sersync,这个是基于rsync的,需要有rsync客户端和服务端,比较麻烦

23440

扫码关注云+社区

领取腾讯云代金券