如何在 CentOS / RHEL Linux 上安装和配置 OpenLDAP
LDAP 代表轻量级目录访问协议。
LDAP 是一种通过网络访问集中存储信息的解决方案。这种集中存储的信息组织在一个遵循 X.500 标准的目录中。
信息以分层方式存储和组织,这种方法的优点是信息可以分组到容器中,客户端可以在需要时访问这些容器。
OpenLDAP 层次结构几乎类似于 DNS 层次结构。
以下是 OpenLDAP 中最常用的两个对象:
- cn(通用名称)——这是指叶条目,它们是最终对象(例如:用户和组)
- dc(域组件)——这是指 LDAP 层次结构中的容器条目之一。如果在设置中 LDAP 层次结构映射到 DNS 层次结构,通常所有 DNS 域都称为 DC 对象。
例如,如果层次结构 sam.thegeekstuff.com 中有用户,则该用户的完全可分辨名称称为 cn=sam, dc=thegeekstuff, dc=com。如果您在 FDN(完全专有名称)中注意到,使用逗号作为分隔符而不是点,这在 DNS 中很常见。
通过使用不同的 LDAP 条目类型,您可以设置分层目录结构。这就是 openLDAP 被广泛使用的原因。您可以轻松地构建一个 openLDAP 层次结构,其中可以轻松引用其他位置的对象,而无需将它们存储在本地服务器上。这使得 OpenLDAP 成为一个轻量级目录,尤其是与其他目录服务器(例如 Microsoft 的 Active Directory)相比时。
现在让我们看看如何设置 LDAP 服务器的单个实例,供网络中的多个客户端使用以进行身份验证。
安装 OpenLDAP 软件包
在 CentOS 和 RedHat 上,使用 yum install 如下图所示,安装 openldap 相关包。
yum install -y openldap openldap-clients openldap-servers
您应该安装以下三个包:
- openldap-servers – 这是主要的 LDAP 服务器
- openldap-clients – 这包含所有必需的 LDAP 客户端实用程序
- openldap – 此包包含 LDAP 支持库
LDAP 配置文件
- config.ldif – LDAP 默认配置存储在 /etc/openldap/slapd.d/cn=config.ldif 中的文件下,该文件以 LDIF 格式创建。这是 LDAP 输入格式 (LDIF),这是一种允许您将信息输入到 LDAP 目录的特定格式。
- olcDatabase{2}bdb.ldif – 您还可以在 /etc/openldap/slapd.d/cn=config/olcDatabase{2}bdb 文件下修改设置,例如服务器可以支持的连接数、超时和其他数据库设置。 ldif. 该文件还包含 LDAP 根用户和基本 DN 等参数。
以管理员身份创建 olcRootDN 帐户
始终建议首先创建一个具有更改 LDAP 数据库信息的完全权限的专用用户帐户。
修改 olcDatabase={2}bdb.ldif 文件,并更改 olcRootDN 条目。以下是默认条目。
# grep olcRootDN /etc/openldap/slapd.d/cn=config/olcDatabase={2}bdb.ldif
olcRootDN: cn=Manager,dc=my-domain,dc=com
将上面的行更改为管理员用户。在此示例中,用户“ramesh”将是 olcRootDN。
olcRootDN: cn=ramesh,dc=thegeekstuff,dc=com
创建 olcRootPW 根密码
现在使用 slappasswd 命令为您要使用的 root 密码创建一个哈希值。生成密码后,打开 cn=config.ldif 文件,包含 olcRootPW 参数,并复制散列后的密码,如下所示。
执行以下命令并指定密码。这将为给定的密码生成哈希。
# slappasswd
New password: SecretLDAPRootPass2015
Re-enter new password: SecretLDAPRootPass2015
{SSHA}1pgok6qWn24lpBkVreTDboTr81rg4QC6
将上述命令的hash输出添加到config.ldif文件中的oclRootPW参数中,如下图所示。
# vi /etc/openldap/slapd.d/cn=config.ldif
olcRootPW: {SSHA}1pgok6qWn24lpBkVreTDboTr81rg4QC6
创建 olcSuffix 域名
现在设置 olcSuffix 并设置您想要的域。只需修改文件 olcDatabase={2}bdb.ldif 中以 olcSuffix 开头的行,如下所示。
# vi /etc/openldap/slapd.d/cn=config/olcDatabase={2}bdb.ldif
olcSuffix: dc=thegeekstuff,dc=com
验证配置文件
使用 slaptest 命令验证配置文件,如下所示。这应该显示“测试成功”消息,如下所示。
# slaptest -u
config file testing succeeded
在执行上述命令期间,您可能会收到以下消息,您可以暂时忽略这些消息。
54a39508 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif"
54a39508 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}bdb.ldif"
启动 LDAP 服务器
启动 ldap 服务器,如下所示。
# service slapd start
Checking configuration files for slapd: [WARNING]
config file testing succeeded
Starting slapd: [ OK ]
验证 LDAP 搜索
要验证 ldap 服务器是否配置成功,您可以使用以下命令并验证域条目是否存在。
# ldapsearch -x -b "dc=thegeekstuff,dc=com"
# extended LDIF
#
# LDAPv3
# base <dc=thegeekstuff,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 32 No such object
# numResponses: 1
base.ldif 中的基本 LDAP 结构
OU(组织单位)对象的使用可以帮助您为 LDAP 数据库提供额外的结构。如果您计划将不同类型的条目(例如用户、组、计算机、打印机等)添加到 LDAP 目录中,则可以更轻松地将每个条目类型放入其自己的容器中。
要创建这些 OU,您可以创建一个初始 LDIF 文件,如下例所示。在此示例中,此文件允许您创建基本容器 dc=thegeekstuff,dc=com,并在该容器中创建两个名称为用户和组的组织单位。
# cat base.ldif
dn: dc=thegeekstuff,dc=com
objectClass: dcObject
objectClass: organization
o: thegeekstuff.com
dc: thegeekstuff
dn: ou=users,dc=thegeekstuff,dc=com
objectClass: organizationalUnit
objectClass: top
ou: users
dn: ou=groups,dc=thegeekstuff,dc=com
objectClass: organizationalUnit
objectClass: top
ou: groups
使用 ldapadd 导入基础结构
现在我们可以使用 ldapadd 命令将基本结构导入到 LDAP 目录中,如下所示。
# ldapadd -x -W -D "cn=ramesh,dc=thegeekstuff,dc=com" -f base.ldif
Enter LDAP Password:
adding new entry "dc=thegeekstuff,dc=com"
adding new entry "ou=users,dc=thegeekstuff,dc=com"
adding new entry "ou=groups,dc=thegeekstuff,dc=com"
使用 ldapsearch 验证基本结构
要验证 OU 是否已成功创建,请使用以下 ldapsearch 命令。
# ldapsearch -x -W -D "cn=ramesh,dc=thegeekstuff,dc=com" -b "dc=thegeekstuff,dc=com" "(objectclass=*)"
Enter LDAP Password:
上述命令的输出将显示 LDAP 目录结构中的所有对象。
# extended LDIF
#
# LDAPv3
# base <dc=thegeekstuff,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# thegeekstuff.com
dn: dc=thegeekstuff,dc=com
objectClass: dcObject
objectClass: organization
o: thegeekstuff.com
dc: thegeekstuff
# users, thegeekstuff.com
dn: ou=users,dc=thegeekstuff,dc=com
objectClass: organizationalUnit
objectClass: top
ou: users
# groups, thegeekstuff.com
dn: ou=groups,dc=thegeekstuff,dc=com
objectClass: organizationalUnit
objectClass: top
ou: groups
# search result
search: 2
result: 0 Success
# numResponses: 4
# numEntries: 3
- 点赞
- 收藏
- 关注作者
评论(0)