前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在服务器上安装OpenLDAP

如何在服务器上安装OpenLDAP

原创
作者头像
不会飞的蝴蝶
修改2018-08-03 15:25:22
3.5K0
修改2018-08-03 15:25:22
举报

介绍

轻量级目录访问协议(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的默认存储库中找到。

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

代码语言:javascript
复制
sudo apt-get update
sudo apt-get install slapd ldap-utils

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

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

代码语言:javascript
复制
sudo dpkg-reconfigure slapd

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

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

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

代码语言:javascript
复制
sudo ufw allow ldap
​

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

代码语言:javascript
复制
ldapwhoami -H ldap:// -x
代码语言:javascript
复制
anonymous

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

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

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

代码语言:javascript
复制
sudo apt-get install phpldapadmin

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

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

代码语言:javascript
复制
sudo nano /etc/phpldapadmin/config.php

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

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

代码语言:javascript
复制
$servers->setValue('server','name','Example LDAP');

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

代码语言:javascript
复制
$servers->setValue('server','base', array('dc=example,dc=com'));

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

代码语言:javascript
复制
#$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');

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

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

代码语言:javascript
复制
$config->custom->appearance['hide_template_warning'] = true;

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

接下来我们将登录phpLDAPadmin。

第三步、登录phpLDAPadmin Web界面

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

代码语言:javascript
复制
https://example.com/phpldapadmin

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

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

代码语言:javascript
复制
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脚本的新文本文件:

代码语言:javascript
复制
sudo nano /usr/local/bin/renew.sh

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

代码语言:javascript
复制
#!/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

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

代码语言:javascript
复制
sudo chmod u+x /usr/local/bin/renew.sh

然后运行sudo脚本:

代码语言:javascript
复制
sudo /usr/local/bin/renew.sh

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

代码语言:javascript
复制
sudo su -c 'ls -al /etc/ssl/{certs,private}/example.com*'

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

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

代码语言:javascript
复制
-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读取私钥:

代码语言:javascript
复制
sudo usermod -aG ssl-cert openldap

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

代码语言:javascript
复制
sudo systemctl restart slapd

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

打开一个新的LDIF文件:

代码语言:javascript
复制
cd ~
nano ssl.ldif

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

代码语言:javascript
复制
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更改:

代码语言:javascript
复制
sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ssl.ldif
代码语言:javascript
复制
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强制安全连接的选项:

代码语言:javascript
复制
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》

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第一步、安装和配置LDAP服务器
  • 第二步、安装和配置phpLDAPadmin Web界面
  • 第三步、登录phpLDAPadmin Web界面
  • 第四步、配置SSL LDAP加密
    • 申请免费的SSL证书
      • 申请入口
      • 填写申请
      • 手动DNS验证方式
      • 提交申请后验证身份
    • 复制腾讯云的加密证书
      • 配置slapd以提供安全连接
      • 结论
      相关产品与服务
      SSL 证书
      腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档