在这篇文章中,我们将首先罗列一些 LDAP 的基础知识(它是什么,它被用于何处以及为什么会被这样使用),然后向你展示如何使用 RHEL 7 系统来设置一个 LDAP 服务器以及配置一个客户端来使用它达到认证的目的。
正如你将看到的那样,关于认证,还存在其他可能的应用场景,但在这篇指南中,我们将只关注基于 LDAP 的认证。另外,请记住,由于这个话题的广泛性,在这里我们将只涵盖它的基础知识,但你可以参考位于总结部分中列出的文档,以此来了解更加深入的细节。
基于相同的原因,你将注意到:为了简洁起见,我已经决定省略了几个位于 man 页中 LDAP 工具的参考,但相应命令的解释是近在咫尺的(例如,输入 man ldapadd)。
那还是让我们开始吧。
我们的测试环境
我们的测试环境包含两台 RHEL 7机器:
-
Server: 192.168.0.18. FQDN: rhel7.mydomain.com
-
Client: 192.168.0.20. FQDN: ldapclient.mydomain.com
如若你想,你可以使用在 RHCSA 系列(十二): 使用 Kickstart 完成 RHEL 7 的自动化安装 中使用 Kickstart 安装的机子来作为客户端。
LDAP 是什么?
LDAP 代表轻量级目录访问协议,并包含在一系列协议之中,这些协议允许一个客户端通过网络去获取集中存储的信息(例如所登录的 shell 的路径,家目录的绝对路径,或者其他典型的系统用户信息),而这些信息可以从不同的地方访问到或被很多终端用户获取到(另一个例子是含有某个公司所有雇员的家庭地址和电话号码的目录)。
对于那些被赋予了权限可以使用这些信息的人来说,将这些信息进行集中管理意味着可以更容易地维护和获取。
下面的图表提供了一个简化了的关于 LDAP 的示意图,在下面将会进行更多的描述:
下面是对上面示意图的一个详细解释。
接下来,就让我们进入到有关服务器和客户端安装的内容。
安装和配置一个 LDAP 服务器和客户端
在 RHEL 7 中, LDAP 由 OpenLDAP 实现。为了安装服务器和客户端,分别使用下面的命令:
-
# yum update && yum install openldap openldap-clients openldap-servers
-
# yum update && yum install openldap openldap-clients nss-pam-ldapd
一旦安装完成,我们还需要关注一些事情。除非显示地提示,下面的步骤都只在服务器上执行:
1. 在服务器和客户端上,为了确保 SELinux 不会妨碍挡道,长久地开启下列的布尔值:
-
# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0
其中 allow_ypbind
为基于 LDAP 的认证所需要,而 authlogin_nsswitch_use_ldap
则可能会被某些应用所需要。
2. 开启并启动服务:
-
# systemctl enable slapd.service
-
# systemctl start slapd.service
记住你也可以使用 systemctl 来禁用,重启或停止服务:
-
# systemctl disable slapd.service
-
# systemctl restart slapd.service
-
# systemctl stop slapd.service
3. 由于 slapd 服务是由 ldap 用户来运行的(你可以使用 ps -e -o pid,uname,comm | grep slapd
来验证),为了使得服务器能够更改由管理工具创建的条目,该用户应该有目录/var/lib/ldap
的所有权,而这些管理工具仅可以由 root 用户来运行(紧接着有更多这方面的内容)。
在递归地更改这个目录的所有权之前,将 slapd 的示例数据库配置文件复制进这个目录:
-
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
-
# chown -R ldap:ldap /var/lib/ldap
4. 设置一个 OpenLDAP 管理用户并设置密码:
-
# slappasswd
正如下一幅图所展示的那样:
然后以下面的内容创建一个 LDIF 文件(ldaprootpasswd.ldif
):
-
dn: olcDatabase={0}config,cn=config
-
changetype: modify
-
add: olcRootPW
-
olcRootPW: {SSHA}PASSWORD
其中:
根据上面提供的理论背景,ldaprootpasswd.ldif
文件将添加一个条目到 LDAP 目录中。在那个条目中,每一行代表一个属性键值对(其中 dn,changetype,add 和 olcRootPW 为属性,每个冒号右边的字符串为相应的键值)。
随着我们的进一步深入,请记住上面的这些,并注意到在这篇文章的余下部分,我们使用相同的通用名