在 Rocky Linux 8/AlmaLinux 8 上安装和配置 OpenLDAP 服务器 |
目录服务也称为名称服务,充当全球多家公司的权威身份提供商 (IdP)。它们将网络资源的名称映射到各自的网络地址。它充当共享信息基础设施,用于查找、管理和组织日常资源,例如卷、文件夹、文件、打印机、用户、组、设备、电话号码等。为您的组织选择正确的目录服务器非常重要,因为它成为数字工作空间上身份验证和授权的真实来源。
LDAP 是轻量级目录访问协议的缩写。这是用于访问和修改在 TCP/IP 上运行的基于 X.500 的目录服务的协议。它用于处理身份验证并将有关用户、系统、服务、网络和应用程序的信息从目录服务共享到其他服务/应用程序。它不仅可以读取Active Directory,还可以与其他Linux程序集成。
OpenLDAP 是由 OpenLDAP 项目开发的 LDAP 的免费开源实现,并根据称为“OpenLDAP 公共许可证”的独特 BSD 风格许可证发布。它提供了一个命令行实用程序,可用于构建和管理 LDAP 目录。要使用此工具,您需要对 LDAP 协议和结构有一定的深入了解。为了消除这种麻烦,您可以使用 phpLDAPadmin 等第三方工具来管理服务。
OpenLDAP 提供以下很酷的功能:
- 低成本:它是免费的,使其成为初创公司的常见选择。
- 灵活性:这使其具有广泛的适用性。
- LDAPv3 支持:它提供对简单身份验证和安全层以及传输层安全的支持。
- IPv6 支持:OpenLDAP 支持下一代互联网协议版本 6。
- 操作系统无关性:Mac、Windows 和 Linux 系统完全支持它。
- 更新了 C API:这改进了程序员连接和使用 LDAP 目录服务器的方式。
- 增强型独立 LDAP 服务器
- DIFv1 支持:它完全符合 LDAP 数据交换格式 (LDIF) 版本 1。
在本指南中,我们将学习如何在 Rocky Linux 8/AlmaLinux 8 上安装和配置 OpenLDAP 服务器。
准备您的服务器
在开始安装之前,您需要确保服务器已更新:
sudo dnf update -y
完成后,检查是否需要重新启动并执行它:
[ -f /var/run/reboot-required ] && sudo reboot -f
设置系统的正确主机名。
sudo hostnamectl set-hostname ldapmaster.computingforgeeks.com
使用正确的主机名和 IP 更新 /etc/hosts,如下所示:
$ sudo vim /etc/hosts
192.168.205.2 ldapmaster.computingforgeeks.com
192.168.205.13 ldapclient.computingforgeeks.com
第 1 步 – 安装 OpenLDAP 软件包
执行完上述所有活动后,启用提供 OpenLDAP 包的 symas 存储库。
sudo wget -q https://repo.symas.com/configs/SOFL/rhel8/sofl.repo -O /etc/yum.repos.d/sofl.repo
启用存储库后,使用以下命令安装软件包:
sudo dnf install symas-openldap-clients symas-openldap-servers
依赖树:
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
symas-openldap-clients x86_64 2.4.59-1.el8 sofl 203 k
symas-openldap-servers x86_64 2.4.59-1.el8 sofl 2.2 M
Installing dependencies:
symas-openldap x86_64 2.4.59-1.el8 sofl 345 k
Transaction Summary
================================================================================
Install 3 Packages
Total download size: 2.8 M
Installed size: 6.8 M
Is this ok [y/N]: y
安装完成后,验证如下:
$ rpm -qa | grep ldap
symas-openldap-2.4.59-1.el8.x86_64
openldap-2.4.46-18.el8.x86_64
symas-openldap-servers-2.4.59-1.el8.x86_64
sssd-ldap-2.6.2-3.el8.x86_64
symas-openldap-clients-2.4.59-1.el8.x86_64
步骤 2 – 配置 OpenLDAP 服务器
安装完成后,您可以对 OpenLDAP 服务器进行多项调整。一些必需的配置是:
1.配置SLAPD数据库
现在准备数据库模板 DB_CONFIG;
sudo cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
为文件设置正确的权限:
sudo chown ldap. /var/lib/ldap/DB_CONFIG
现在在 Rocky Linux 8/AlmaLinux 8 上启动并启用 slapd 服务
sudo systemctl enable --now slapd
验证服务是否正在运行:
$ systemctl status slapd
● slapd.service - OpenLDAP Server Daemon
Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2022-09-24 04:37:08 EDT; 13s ago
Docs: man:slapd
man:slapd-config
man:slapd-hdb
man:slapd-mdb
file:///usr/share/doc/openldap-servers/guide.html
Process: 3917 ExecStart=/usr/sbin/slapd -u ldap -h ldap:/// ldaps:/// ldapi:/// (code=exited, status=0/SUCCESS)
Process: 3904 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS)
Main PID: 3919 (slapd)
Tasks: 2 (limit: 23198)
Memory: 3.1M
CGroup: /system.slice/slapd.service
└─3919 /usr/sbin/slapd -u ldap -h ldap:/// ldaps:/// ldapi:///
允许服务通过防火墙:
sudo firewall-cmd --add-service={ldap,ldaps} --permanent
sudo firewall-cmd --reload
配置 OpenLDAP 服务器时涉及多个属性。这些都是:
- CN – 通用名称
- O – 组织
- OU – 组织单位
- SN – 姓氏
- DC – 域组件(DC 通常带有两个条目 dc=example,dc=com)
- DN – 专有名称
2.创建管理员密码
首先,使用 slappasswd 实用程序生成管理员密码。
$ slappasswd
New password:
Re-enter new password:
{SSHA}Z6wjWlDYAgHkMpezhpCRSw3fGCLiNdMM
以 {SSHA} 开头的密码哈希是密码的加密格式。现在,创建一个包含以下内容的 .ldif:
$ vim changerootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}Z6wjWlDYAgHkMpezhpCRSw3fGCLiNdMM
使用创建的 LDIF 文件修改 root 密码,如下所示:
$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f changerootpw.ldif
ASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
3.导入基本Schema
OpenLDAP 需要多种模式。其中包括属性类型、属性语法、匹配规则以及目录可能具有的对象类型。默认情况下,架构存储在 /etc/openldap/schema/ 下。现在,我们需要 cosine、nis 和 inetorgperson LDAP 模式。
要导入它们,请使用以下命令:
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
创建 OpenLDAP SUDO 架构;
sudo cp /usr/share/doc/sudo/schema.OpenLDAP /etc/openldap/schema/sudo.schema
创建 sudo 架构 LDIF 文件;
sudo tee /etc/openldap/schema/sudo.ldif<<EOF
dn: cn=sudo,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: sudo
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' DESC 'Host(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.3 NAME 'sudoCommand' DESC 'Command(s) to be executed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.4 NAME 'sudoRunAs' DESC 'User(s) impersonated by sudo (deprecated)' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.5 NAME 'sudoOption' DESC 'Options(s) followed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'User(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC 'Group(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcObjectClasses: ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL DESC 'Sudoer Entries' MUST ( cn ) MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ description ) )
EOF
应用配置:
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/sudo.ldif
4. 更新 LDAP 数据库中的域名
我们将使用我们的域名、管理员用户(Manager)和加密密码创建另一个 LDIF 文件,如下所示:
$ vim setdomainname.ldif
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=computingforgeeks,dc=com
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=computingforgeeks,dc=com
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}Z6wjWlDYAgHkMpezhpCRSw3fGCLiNdMM
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=computingforgeeks,dc=com" read by * none
要应用更改,请运行:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f setdomainname.ldif
步骤 3 – 在 OpenLDAP 上创建组织单位
创建组织单位 (OU)。我们需要创建一个包含以下条目的文件;
$ vim adddomain.ldif
dn: dc=computingforgeeks,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: My example Organisation
dc: computingforgeeks
dn: cn=Manager,dc=computingforgeeks,dc=com
objectClass: organizationalRole
cn: Manager
description: OpenLDAP Manager
dn: ou=People,dc=computingforgeeks,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=computingforgeeks,dc=com
objectClass: organizationalUnit
ou: Group
要应用更改,请运行:
$ sudo ldapadd -x -D cn=Manager,dc=computingforgeeks,dc=com -W -f adddomain.ldif
Enter LDAP Password: Enter_set_password_here
adding new entry "dc=computingforgeeks,dc=com"
adding new entry "cn=Manager,dc=computingforgeeks,dc=com"
adding new entry "ou=People,dc=computingforgeeks,dc=com"
adding new entry "ou=Group,dc=computingforgeeks,dc=com"
步骤 4 – 管理 OpenLDAP 服务器上的用户
要在 OpenLDAP 上添加用户帐户,请创建一个文件:
vim addtestuser.ldif
在文件中,添加以下行并根据需要进行更改。
dn: uid=testuser,ou=People,dc=computingforgeeks,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: testuser
sn: temp
userPassword: {SSHA}XXXXXXXXXXXXXXXXXXXX
loginShell: /bin/bash
uidNumber: 2000
gidNumber: 2000
homeDirectory: /home/testuser
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0
dn: cn=testuser,ou=Group,dc=computingforgeeks,dc=com
objectClass: posixGroup
cn: testuser
gidNumber: 2000
memberUid: testuser
您可以使用 slappasswd
实用程序创建用户密码,并将其替换为 userPassword: {SSHA}XXXXXXXXXXXXXXXXXXXX
现在应用更改:
$ sudo ldapadd -x -D cn=Manager,dc=computingforgeeks,dc=com -W -f addtestuser.ldif
Enter LDAP Password:
adding new entry "uid=testuser,ou=People,dc=computingforgeeks,dc=com"
adding new entry "cn=testuser,ou=Group,dc=computingforgeeks,dc=com"
创建后,验证用户是否已添加。
ldapsearch -x cn=testuser -b dc=computingforgeeks,dc=com
示例输出:
从 LDAP 数据库中删除用户
也可以从数据库中删除用户。例如,要从 LDAP 服务器中删除上面创建的用户,我们将使用以下命令:
sudo ldapdelete -x -W -D 'cn=Manager,dc=computingforgeeks,dc=com' "uid=testuser1,ou=People,dc=computingforgeeks,dc=com"
sudo ldapdelete -x -W -D 'cn=Manager,dc=computingforgeeks,dc=com' "cn=testuser1,ou=Group,dc=computingforgeeks,dc=com"
步骤 5 – 配置 OpenLDAP SSL/TLS
可以为 OpenLDAP 设置安全的客户端-服务器通信。您需要为 OpenLDAP 生成 SSL 证书。
例如,您可以生成自签名证书,如图所示;
sudo openssl req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout /etc/pki/tls/ldapserver.key \
-out /etc/pki/tls/ldapserver.crt
生成后,设置正确的所有权:
sudo chown ldap:ldap /etc/pki/tls/{ldapserver.crt,ldapserver.key}
现在,创建一个配置文件:
$ vim add-tls.ldif
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/pki/tls/ldapserver.crt
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/pki/tls/ldapserver.key
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/pki/tls/ldapserver.crt
应用更改:
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f add-tls.ldif
最后,更新 OpenLDAP 配置:
$ sudo vim /etc/openldap/ldap.conf
...
#TLS_CACERT /etc/pki/tls/cert.pem
TLS_CACERT /etc/pki/tls/ldapserver.crt
要应用更改,请重新启动服务:
sudo systemctl restart slapd
下一篇文章是关于客户端配置:
- 在 Rocky Linux 8/AlmaLinux 8 上配置 OpenLDAP 客户端
结论
这标志着本指南关于如何在 Rocky Linux 8/AlmaLinux 8 上安装和配置 OpenLDAP 服务器的结束。此时,您应该能够配置 OpenLDAP 并创建用户和组,甚至添加 TLS 证书。
查看更多:
- 如何在 Docker 容器中运行 OpenLDAP 服务器
- 在CentOS 8上配置OpenLDAP主从复制
- 在 CentOS 8 上设置 OpenLDAP 多主复制