在 CentOS / RHEL Linux 上安装和配置 OpenLDAP
LDAP 代表轻量级目录访问协议。
LDAP 是一种通过网络访问集中存储信息的解决方案。这些集中存储的信息被组织在一个遵循 X.500 标准的目录中。
信息以分层方式存储和组织,这种方法的优点是可以将信息分组到容器中,并且客户端可以在需要时访问这些容器。
OpenLDAP 层次结构与 DNS 层次结构几乎相似。
以下是 OpenLDAP 中最常用的两个对象:
- cn (common name) – 这是指叶子条目,它们是最终对象(例如:用户和组)
- 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 默认配置存储在以 LDIF 格式创建的 /etc/openldap/slapd.d/cn=config.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=hgst,dc=com.cn
创建 olcRootPW 根密码
现在使用 slappasswd 命令为您要使用的 root 密码创建一个哈希值。生成密码后,打开 cn=config.ldif 文件,包含 olcRootPW 参数,然后复制哈希密码,如下所示。
执行以下命令并指定密码。这将为给定密码生成。
# slappasswd
New password: SecretLDAPRootPass2015
Re-enter new password: SecretLDAPRootPass2015
{SSHA}1pgok6qWn24lpBkVreTDboTr81rg4QC6
取上述命令的哈希输出,并将其添加到 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=hgst,dc=com.cn> 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=hgst,dc=com.cn
objectClass: dcObject
objectClass: organization
o: thegeekstuff.com
dc: thegeekstuff
dn: ou=users,dc=hgst,dc=com
objectClass: organizationalUnit
objectClass: top
ou: users
dn: ou=groups,dc=hgst,dc=com
objectClass: organizationalUnit
objectClass: top
ou: groups
使用 ldapadd 导入基础结构
现在我们可以使用 ldapadd 命令将基本结构导入 LDAP 目录,如下所示。
# ldapadd -x -W -D "cn=ramesh,dc=hgst,dc=com" -f base.ldif
Enter LDAP Password:
adding new entry "dc=hgst,dc=com"
adding new entry "ou=users,dc=hgst,dc=com"
adding new entry "ou=groups,dc=hgst,dc=com"
使用 ldapsearch 验证基本结构
要验证 OU 是否已成功创建,请使用以下 ldapsearch 命令。
# ldapsearch -x -W -D "cn=ramesh,dc=hgst,dc=com" -b "dc=hgst,dc=com" "(objectclass=*)"
Enter LDAP Password:
上述命令的输出将显示 LDAP 目录结构中的所有对象。
# extended LDIF
#
# LDAPv3
# base <dc=hgst,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# hgst.com.cn
dn: dc=hgst,dc=com
objectClass: dcObject
objectClass: organization
o: hgst.com
dc: hgst
# users, hgst.com
dn: ou=users,dc=hgst,dc=com
objectClass: organizationalUnit
objectClass: top
ou: users
# groups, hgst.com
dn: ou=groups,dc=hgst,dc=com
objectClass: organizationalUnit
objectClass: top
ou: groups
# search result
search: 2
result: 0 Success
# numResponses: 4
# numEntries: 3
- 点赞
- 收藏
- 关注作者
评论(0)