RHCSA 系列:在 RHEL 7 中设置基于 LDAP 的身份验证 - 第 14 部分
我们将首先概述一些 LDAP 基础知识(它是什么、在哪里使用以及为什么)来开始本文,并展示如何设置 LDAP 服务器并配置客户端以使用 对其进行身份验证红帽企业 Linux 7 系统。
正如我们将看到的,还有其他几种可能的应用场景,但在本指南中,我们将完全关注基于 LDAP 的身份验证。此外,请记住,由于该主题非常广泛,我们在这里仅介绍其基础知识,但您可以参考摘要中概述的文档以获取更深入的详细信息。
出于同样的原因,您会注意到,为了简洁起见,我决定省略对 LDAP 工具手册页的一些引用,但相应的解释却触手可及(man ldapadd,例如例子)。
也就是说,让我们开始吧。
我们的测试环境
我们的测试环境由两个 RHEL 7 盒子组成:
Server: 192.168.0.18. FQDN: rhel7.mydomain.com
Client: 192.168.0.20. FQDN: ldapclient.mydomain.com
如果需要,您可以使用第 12 部分:使用 Kickstart 作为客户端来自动化 RHEL 7 安装中安装的计算机。
什么是LDAP?
LDAP 代表轻量级目录访问协议,由一组协议组成,允许客户端通过网络访问集中存储的信息(例如登录 shell 的目录) 、主目录的绝对路径以及其他典型的系统用户信息,例如),这些信息应该可以从不同的地方访问或可供大量最终用户使用(另一个例子是家庭地址和电话号码的目录)一家公司)。
集中保存此类(以及更多)信息意味着每个被授予使用权限的人都可以更轻松地维护和访问这些信息。
下图提供了LDAP的简化图,并在下面进行了更详细的描述:
上图的详细解释。
- 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
其中基于 LDAP 的身份验证需要 allow_ypbind,某些应用程序可能需要 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
在哪里 :
- PASSWORD 是之前获得的哈希字符串。
- cn=config 表示全局配置选项。
- olcDatabase 表示特定的数据库实例名称,通常可以在 /etc/openldap/slapd.d/cn=config 中找到。
参考前面提供的理论背景,ldaprootpasswd.ldif
文件将向 LDAP 目录添加一个条目。在该条目中,每一行代表一个属性:值对(其中 dn、changetype、add 和 olcRootPW 是属性,每个冒号右侧的字符串是它们对应的值)。
在我们继续进行时,您可能需要记住这一点,并且请注意,我们在本文的其余部分中使用相同的通用名称 (cn=)
,其中每个步骤都依赖于前一个步骤。
5. 现在,通过指定引用 ldap 服务器的 URI 添加相应的 LDAP 条目,其中仅允许协议/主机/端口字段。
ldapadd -H ldapi:/// -f ldaprootpasswd.ldif
输出应类似于:
并从 /etc/openldap/schema
目录导入一些基本的 LDAP 定义:
for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done
6. 让 LDAP 在其数据库中使用您的域。
创建另一个 LDIF 文件,我们将其命名为 ldapdomain.ldif
,其中包含以下内容,并根据需要替换您的域(在域组件 dc= 中)和密码:
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
read by dn.base="cn=Manager,dc=mydomain,dc=com" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mydomain,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=mydomain,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read
然后加载如下:
ldapmodify -H ldapi:/// -f ldapdomain.ldif
7. 现在是时候向我们的 LDAP 目录添加一些条目了。在以下文件中,属性和值由冒号 (:)
分隔,我们将其命名为 baseldapdomain.ldif
:
dn: dc=mydomain,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: mydomain com
dc: mydomain
dn: cn=Manager,dc=mydomain,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager
dn: ou=People,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: Group
将条目添加到 LDAP 目录:
ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif
8. 创建名为 ldapuser 的 LDAP 用户 (adduser ldapuser),然后在 ldapgroup.ldif< 中创建 LDAP 组的定义/代码>。
adduser ldapuser
vi ldapgroup.ldif
添加以下内容。
dn: cn=Manager,ou=Group,dc=mydomain,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1004
其中 gidNumber 是 ldapuser 的 /etc/group 中的 GID)并加载它:
ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif
9. 添加包含用户 ldapuser 定义的 LDIF 文件 (ldapuser.ldif
):
dn: uid=ldapuser,ou=People,dc=mydomain,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser
uid: ldapuser
uidNumber: 1004
gidNumber: 1004
homeDirectory: /home/ldapuser
userPassword: {SSHA}fiN0YqzbDuDI0Fpqq9UudWmjZQY28S3M
loginShell: /bin/bash
gecos: ldapuser
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0
并加载它:
ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif
同样,您可以删除刚刚创建的用户条目:
ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"
10. 允许通过防火墙进行通信:
firewall-cmd --add-service=ldap
11. 最后但并非最不重要的一点是,使客户端能够使用 LDAP 进行身份验证。
为了帮助我们完成最后一步,我们将使用 authconfig 实用程序(用于配置系统身份验证资源的界面)。
使用以下命令,如果在 LDAP 服务器身份验证成功后,所请求用户的主目录不存在,则会创建该目录:
authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update
概括
在本文中,我们解释了如何针对 LDAP 服务器设置基本身份验证。要进一步配置本指南中描述的设置,请参阅 RHEL 7 系统管理员指南中的第 13 章 – LDAP 配置,特别注意使用 TLS 的安全设置。
请随时使用下面的评论表留下您可能有的任何问题。