简介
LDAP,即轻量级目录访问协议,是一种设计用于管理和访问集中式分层文件和目录结构中相关信息的协议。
在某些方面,它的操作方式类似于关系型数据库,但这并不适用于所有情况。分层结构是数据关联方式的主要区别。它可以用来存储任何类型的信息,通常作为集中式认证系统的一个组件。
在本指南中,我们将讨论如何在 Ubuntu 14.04 服务器上安装和配置 OpenLDAP 服务器。然后,我们将安装和保护 phpLDAPadmin 接口,以提供一个简单的 Web 接口。
安装 LDAP 和辅助工具
在开始之前,我们必须安装必要的软件。幸运的是,这些软件包都可以在 Ubuntu 的默认存储库中找到。
这是我们在本次会话中第一次使用 apt
,所以我们将刷新本地软件包索引。之后我们可以安装我们需要的软件包:
sudo apt-get update sudo apt-get install slapd ldap-utils
在安装过程中,您将被要求选择并确认 LDAP 的管理员密码。实际上,您可以输入任何内容,因为您很快就会有机会更改它。
重新配置 slapd 以选择更好的设置
尽管软件包刚刚安装完毕,我们将立即重新配置 Ubuntu 默认安装的默认设置。
原因是,尽管该软件包有能力询问许多重要的配置问题,但这些问题在安装过程中被跳过了。我们可以通过告诉系统重新配置软件包来获得所有提示:
sudo dpkg-reconfigure slapd
在您进行此过程时,将会询问一些新的问题。让我们现在来看看这些问题:
- 省略 OpenLDAP 服务器配置? No
- DNS 域名?
- 此选项将确定您的目录路径的基本结构。阅读消息以确切了解如何实施。
- 实际上,这是一个相当开放的选项。您可以选择任何您喜欢的“域名”值,即使您并不拥有实际的域名。但是,如果您有服务器的域名,最好使用它。
- 对于本指南,我们将为我们的配置选择 test.com。
- 组织名称?
- 再次,这基本上完全取决于您的偏好。
- 对于本指南,我们将使用 example 作为我们组织的名称。
- 管理员密码?
- 正如我在安装部分提到的,这是您真正选择管理员密码的机会。您在这里选择的任何内容都将覆盖您之前使用的密码。
- 数据库后端? HDB
- 在清除 slapd 时删除数据库? No
- 移动旧数据库? Yes
- 允许 LDAPv2 协议? No
此时,您的 LDAP 应该以相当合理的方式配置完成。
安装 phpLDAPadmin 以使用 Web 接口管理 LDAP
虽然通过命令行管理 LDAP 是完全可能的,但大多数用户会发现使用 Web 接口更容易。我们将安装 phpLDAPadmin,它提供此功能,以帮助消除学习 LDAP 工具的一些摩擦。
Ubuntu 存储库包含 phpLDAPadmin 软件包。您可以通过输入以下命令来安装它:
sudo apt-get install phpldapadmin
这将安装管理界面,启用必要的 Apache 虚拟主机文件,并重新加载 Apache。
Web 服务器现在已配置为提供您的应用程序,但我们将进行一些额外的更改。我们需要配置 phpLDAPadmin 以使用我们为 LDAP 配置的域架构,并且我们还将对配置进行一些调整以增强安全性。
配置 phpLDAPadmin
现在软件包已安装,我们需要配置一些内容,以便它可以连接到在 OpenLDAP 配置阶段创建的 LDAP 目录结构。
首先,使用 root 权限在文本编辑器中打开主配置文件:
sudo nano /etc/phpldapadmin/config.php
在此文件中,我们需要添加我们为 LDAP 服务器设置的配置详细信息。首先查找主机参数,并将其设置为您服务器的域名或公共 IP 地址。此参数应反映您计划如何访问 Web 接口:
$servers->setValue('server','host','server_domain_name_or_IP');
接下来,您需要配置您为 LDAP 服务器选择的域名。请记住,在我们的示例中,我们选择了 test.com
。我们需要通过将每个域组件(除了点之外的所有内容)替换为 dc
规范的值来将其转换为 LDAP 语法。
这意味着,我们将写入类似 dc=test,dc=com
的内容,而不是 test.com
。我们应该找到设置服务器基本参数的参数,并使用我们刚刚讨论的格式来引用我们决定的域:
$servers->setValue('server','base',array('dc=test,dc=com'));
我们需要在登录 bind_id 参数中进行相同的调整。cn
参数已设置为 “admin”。这是正确的。我们只需要再次调整 dc
部分,就像我们上面做的那样:
$servers->setValue('login','bind_id','cn=admin,dc=test,dc=com');
我们需要调整的最后一件事是控制警告消息可见性的设置。默认情况下,phpLDAPadmin 在其 Web 接口中会抛出相当多的关于对功能没有影响的模板文件的烦人警告消息。
我们可以通过搜索 hide_template_warning
参数,取消注释包含它的行,并将其设置为 “true” 来隐藏这些警告:
$config->custom->appearance['hide_template_warning'] = true;
这是我们需要调整的最后一件事。完成后,您可以保存并关闭文件。
创建 SSL 证书
我们希望通过 SSL 来保护与 LDAP 服务器的连接,以防止外部方拦截我们的通信。
由于管理界面是在本地网络上直接与 LDAP 服务器通信的,我们不需要为该连接使用 SSL。我们只需要在连接时保护我们与浏览器的外部连接。
为此,我们只需要设置一个自签名的 SSL 证书,以便我们的服务器可以使用。这不会帮助我们验证服务器的身份,但它将允许我们加密我们的消息。
OpenSSL 软件包应该默认安装在您的系统上。首先,我们应该创建一个目录来保存我们的证书和密钥:
sudo mkdir /etc/apache2/ssl
接下来,我们可以通过输入以下命令一次性创建密钥和证书:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
您将需要回答一些问题,以便工具正确填写证书中的字段。唯一重要的是提示中的 Common Name (e.g. server FQDN or YOUR name)
。输入您服务器的域名或 IP 地址。
完成后,您的证书和密钥将被写入 /etc/apache2/ssl
目录。
创建密码认证文件
我们还希望对 phpLDAPadmin 位置进行密码保护。即使 phpLDAPadmin 已经有密码认证,这将提供额外的保护层。
我们需要的实用程序包含在 Apache 实用程序包中。通过输入以下命令获取它:
sudo apt-get install apache2-utils
现在您已经可以创建一个包含您选择的用户名和相关哈希密码的密码文件。
我们将把它保存在 /etc/apache2
目录中。通过输入以下命令创建文件并指定您想要使用的用户名:
sudo htpasswd -c /etc/apache2/htpasswd <span class="highlight">demo_user</span>
现在,我们准备修改 Apache 以利用我们的安全升级。
安全配置 Apache
我们应该首先在 Apache 中启用 SSL 模块。通过输入以下命令可以实现:
sudo a2enmod ssl
这将启用该模块,使我们能够使用它。不过,我们仍然需要配置 Apache 来充分利用它。
目前,Apache 正在读取一个名为 000-default.conf
的文件以用于常规的非加密 HTTP 连接。我们需要告诉它重定向对我们的 phpLDAPadmin 接口的请求到我们的 HTTPS 接口,以便连接被加密。
当我们重定向流量以使用我们的 SSL 证书时,我们还将实施密码文件来验证用户。在修改这些内容的同时,我们还将更改 phpLDAPadmin 接口本身的位置,以最小化有针对性的攻击。
修改 phpLDAPadmin Apache 配置
我们首先要做的是修改设置用于提供我们的 phpLDAPadmin 文件的别名。
以 root 权限在文本编辑器中打开文件:
sudo nano /etc/phpldapadmin/apache.conf
这是我们需要决定我们想要访问接口的 URL 位置的地方。默认值是 /phpldapadmin
,但我们希望将其更改以减少机器人和恶意方的随机登录尝试。
在本指南中,我们将使用位置 /superldap
,但您应该选择您自己的值。
我们需要修改指定 Alias
的行。这应该在一个 IfModule mod_alias.c
块中。完成后,它应该如下所示:
<IfModule mod_alias.c> Alias <span class="highlight">/superldap</span> /usr/share/phpldapadmin/htdocs </IfModule>
完成后,保存并关闭文件。
配置 HTTP 虚拟主机
接下来,我们需要修改当前的虚拟主机文件。以 root 权限在编辑器中打开它:
sudo nano /etc/apache2/sites-enabled/000-default.conf
在其中,您将看到一个相当简单的配置文件,看起来像这样:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
我们希望添加关于我们的域名或 IP 地址的信息来定义我们的服务器名称,并且我们希望设置我们的重定向以将所有 HTTP 请求指向 HTTPS 接口。这将匹配我们在上一节中配置的别名。
我们讨论的更改最终将如下所示。使用您自己的值修改红色项:
<VirtualHost *:80> ServerAdmin webmaster@<span class="highlight">server_domain_or_IP</span> DocumentRoot /var/www/html <span class="highlight">ServerName server_domain_or_IP</span> <span class="highlight">Redirect permanent /superldap https://server_domain_or_IP/superldap</span> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
完成后,保存并关闭文件。
配置 HTTPS 虚拟主机文件
Apache 包含一个默认的 SSL 虚拟主机文件。但是,默认情况下它是未启用的。
我们可以通过输入以下命令来启用它:
sudo a2ensite default-ssl.conf
这将把文件从 sites-available
目录链接到 sites-enabled
目录。现在我们可以通过输入以下命令来编辑这个文件:
sudo nano /etc/apache2/sites-enabled/default-ssl.conf
这个文件比上一个文件复杂一些,所以我们只讨论我们需要做的更改。下面的所有更改都应该放在文件中的虚拟主机块内。
首先,再次将 ServerName
的值设置为您服务器的域名或 IP 地址,并且也要更改 ServerAdmin
指令:
ServerAdmin webmaster@<span class="highlight">server_domain_or_IP</span> <span class="highlight">ServerName server_domain_or_IP</span>
接下来,我们需要设置 SSL 证书指令,指向我们创建的密钥和证书。这些指令应该已经存在于您的文件中,所以只需修改它们指向的文件:
SSLCertificateFile <span class="highlight">/etc/apache2/ssl/apache.crt</span> SSLCertificateKeyFile <span class="highlight">/etc/apache2/ssl/apache.key</span>
我们需要做的最后一件事是设置将为整个 phpLDAPadmin 安装实施密码保护的位置块。
我们通过引用我们提供 phpLDAPadmin 服务的位置并使用我们生成的文件设置认证来实现这一点。我们将要求任何试图访问此内容的人作为有效用户进行认证:
<span class="highlight"><Location /superldap></span> <span class="highlight">AuthType Basic</span> <span class="highlight">AuthName "Restricted Files"</span> <span class="highlight">AuthUserFile /etc/apache2/htpasswd</span> <span class="highlight">Require valid-user</span> <span class="highlight"></Location>
完成后保存并关闭文件。
重新启动 Apache 以实施我们所做的所有更改:
sudo service apache2 restart
现在我们可以继续进行实际界面操作。
登录 phpLDAPadmin Web 界面
我们已经对 phpLDAPadmin 软件进行了所需的配置更改。现在我们可以开始使用它。
我们可以通过访问我们服务器的域名或公共 IP 地址,后面跟上我们配置的别名,来访问 Web 界面。在我们的情况下,这是 /superldap
:
http://<span class="highlight">server_domain_name_or_IP</span>/<span class="highlight">superldap</span>
第一次访问时,您可能会看到有关站点 SSL 证书的警告:
!phpLDAPadmin SSL 警告
这个警告只是为了让您知道浏览器不认识签署您证书的证书颁发机构。由于我们签署了自己的证书,这是预期的,不是问题。
点击“继续前往”按钮或您的浏览器提供的类似选项。
接下来,您将看到您为 Apache 配置的密码提示:
!phpLDAPadmin 密码提示
填写您使用 htpasswd
命令创建的帐户凭据。您将看到主 phpLDAPadmin 登陆页面:
!phpLDAPadmin 登陆页面
点击页面左侧可见的“login”链接。
!phpLDAPadmin 登陆页面
您将被带到一个登录提示。登录“DN”类似于您将要使用的用户名。它包含“cn”下的帐户名称和您为服务器选择的域名,按照我们上面描述的方式分成“dc”部分。
如果您正确配置了 phpLDAPadmin,它应该已经填充了管理员帐户的正确值。在我们的情况下,看起来是这样的:
cn=admin,dc=test,dc=com
对于密码,输入您在 LDAP 配置期间配置的管理员密码。
您将被带到主界面:
!phpLDAPadmin 主页面
添加组织单位、组和用户
此时,您已经登录到 phpLDAPadmin 界面。您可以添加用户、组织单位、组和关系。
LDAP 在您希望如何构建数据和目录层次结构方面非常灵活。您基本上可以创建任何您想要的结构,并创建它们相互交互的规则。
由于在 Ubuntu 14.04 上的这个安装与在 Ubuntu 12.04 上的安装完全相同,您可以按照 Ubuntu 12.04 上的 LDAP 安装文章中“添加组织单位、组和用户”部分中列出的步骤进行操作。
在这个安装上,步骤将完全相同,所以跟着进行一些练习,了解如何构建您的单位结构。
结论
您现在应该已经在您的 Ubuntu 14.04 服务器上安装并配置了 OpenLDAP。您还安装并配置了一个 web 界面,通过 phpLDAPadmin 程序来管理您的结构。您通过强制 SSL 和对整个应用程序进行密码保护,为应用程序配置了一些基本的安全性。
我们设置的系统非常灵活,您应该能够根据需要设计自己的组织架构,并管理资源组。在下一个指南中,我们将讨论如何配置您的网络机器,以便使用此 LDAP 服务器进行系统认证。