在 CentOS 7 上安装 OpenLDAP 身份验证服务器

OpenLDAP 是轻型目录访问协议 (LDAP) 的免费开源实现。
LDAP 是一种开放的、供应商中立的行业标准应用协议,用于通过 IP 网络访问和维护分布式目录信息服务。
目录服务通过允许在整个网络中共享有关用户、系统、网络、服务和应用程序的信息,在开发 Intranet 和 Internet 应用程序方面发挥着重要作用。

在这篇文章中,将介绍如何在 CentOS/RHEL 7 平台上使用 OpenLDAP v2.4 配置中央远程身份验证服务器。

在 CentOS 7 上配置 LDAP 服务器

以 root 用户登录到 VM,并安装 openldap 包。

[root@ldapserver ~]# yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-devel

从模板创建数据库。

[root@ldapserver ldap]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@ldapserver ldap]# slaptest -u
config file testing succeeded
[root@ldapserver ldap]# chown ldap:ldap /var/lib/ldap/*

启动并启用 slapd 服务。

[root@ldapserver ~]# systemctl enable slapd && systemctl start slapd
ln -s '/usr/lib/systemd/system/slapd.service' '/etc/systemd/system/multi-user.target.wants/slapd.service'

在防火墙中允许 ldaps 端口。

[root@ldapserver ~]# firewall-cmd --permanent --add-service=ldaps
success
[root@ldapserver ~]# firewall-cmd --reload
success

配置 OpenLDAP 系统日志。

[root@ldapserver ~]# cat >> /etc/rsyslog.conf << EOF
> #LDAP Logging
> local4.* /var/log/openldap.log
> EOF
[root@ldapserver ~]# systemctl restart rsyslog

将所需的架构添加到我们的 OpenLDAP 目录。

[root@ldapserver ~]# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"
[root@ldapserver ~]# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"

为目录管理器生成密码哈希 123.

[root@ldapserver ~]# slappasswd
New password:
Re-enter new password:
{SSHA}mNOljCtwWbG0P88Hu+jqsrkUOzjfqvak

复制密码哈希,我们将在以后的配置中需要它。
添加初始数据库配置。

[root@ldapserver ldap]# mkdir ~/ldap
[root@ldapserver ldap]# cd ~/ldap
[root@ldapserver ldap]# cat > db.ldif << EOF
> dn: olcDatabase={2}hdb,cn=config
> changetype: modify
> replace: olcSuffix
> olcSuffix: dc=itlab,dc=com
>
> dn: olcDatabase={2}hdb,cn=config
> changetype: modify
> replace: olcRootDN
> olcRootDN: cn=ldapadm,dc=itlab,dc=com
>
> dn: olcDatabase={2}hdb,cn=config
> changetype: modify
> replace: olcRootPW
> olcRootPW: {SSHA}mNOljCtwWbG0P88Hu+jqsrkUOzjfqvak
> EOF
[root@ldapserver ldap]# ldapmodify -Y EXTERNAL  -H ldapi:/// -f db.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"

由于我们计划在 TLS 模式下运行此服务,因此必须为此目的创建安全证书。
为简单起见,我使用自签名证书,但是,如果我们为网络配置了证书颁发机构 (CA),则可以使用签名证书。

[root@ldapserver ~]# openssl req -new -x509 -nodes -out /etc/openldap/certs/ldapserver.pem -keyout /etc/openldap/certs/ldapserver.key -days 365
Generating a 2048 bit RSA private key
.........................+++
..................................................................+++
writing new private key to '/etc/openldap/certs/ldapserver.key'
----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
----
Country Name (2 letter code) [XX]:PK
State or Province Name (full name) []:Sindh
Locality Name (eg, city) [Default City]:Karachi
Organization Name (eg, company) [Default Company Ltd]:XYZ
Organizational Unit Name (eg, section) []:IT Lab
Common Name (eg, your name or your server's hostname) []:ldapserver.on-itroad.com
Email Address []:root@ldapserver.on-itroad.com
[root@ldapserver ~]# cd /etc/openldap/certs
[root@ldapserver certs]# chown ldap:ldap *
[root@ldapserver certs]# chmod 600 ldapserver.key

在 /etc/sysconfig/slapd 中编辑以下指令,使服务能够在 TLS 模式下运行。

SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"

现在,将安全证书和私钥添加到 LDAP 配置。

[root@ldapserver ~]# cd ~/ldap
[root@ldapserver ldap]# cat > cert.ldif << EOF
> dn: cn=config
> changetype: modify
> replace: olcTLSCertificateFile
> olcTLSCertificateFile: /etc/openldap/certs/ldapserver.pem
>
> dn: cn=config
> changetype: modify
> replace: olcTLSCertificateKeyFile
> olcTLSCertificateKeyFile: /etc/openldap/certs/ldapserver.key
>
> dn: cn=config
> changetype: modify
> replace: olcLogLevel
> olcLogLevel: -1
> EOF
[root@ldapserver ldap]# ldapmodify -Y EXTERNAL  -H ldapi:/// -f cert.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
modifying entry "cn=config"
modifying entry "cn=config"

创建目录、LDAP 管理器用户和两个用于保存用户和组条目的组织单位。

[root@ldapserver ldap]# cd ~/ldap
[root@ldapserver ldap]# cat > base.ldif << EOF
> dn: dc=itlab,dc=com
> dc: itlab
> objectClass: top
> objectClass: domain
>
> dn: cn=ldapadm ,dc=itlab,dc=com
> objectClass: organizationalRole
> cn: ldapadm
> description: LDAP Manager
>
> dn: ou=People,dc=itlab,dc=com
> objectClass: organizationalUnit
> ou: People
>
> dn: ou=Groups,dc=itlab,dc=com
> objectClass: organizationalUnit
> ou: Groups
> EOF
[root@ldapserver ldap]# ldapadd -x -W -D "cn=ldapadm,dc=itlab,dc=com" -f base.ldif
Enter LDAP Password:
adding new entry "dc=itlab,dc=com"
adding new entry "cn=ldapadm ,dc=itlab,dc=com"
adding new entry "ou=People,dc=itlab,dc=com"
adding new entry "ou=Groups,dc=itlab,dc=com"

定义目录的访问级别。

[root@ldapserver ldap]# cd ~/ldap
[root@ldapserver ldap]# cat > access.ldif << EOF
> 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=ldapadm,dc=itlab,dc=com" read by * none
>
> changetype: modify
> replace: olcAccess
> olcAccess: {0}to dn.subtree="dc=itlab,dc=com" by dn.base="cn=ldapadm,dc=itlab,dc=com" manage by * read
> EOF
[root@ldapserver ldap]# ldapmodify -Y EXTERNAL  -H ldapi:/// -f access.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

让我们创建三个组。
此处的 jackli 和 fqyang 组被定义为用户 jackli 和 fqyang 的主要组。
而组 dba 将用作两个用户的补充组。

[root@ldapserver ldap]# cd ~/ldap
[root@ldapserver ldap]# cat > groups.ldif << EOF
> dn: cn=jackli,ou=Groups,dc=itlab,dc=com
> cn: jackli
> objectClass: posixGroup
> objectClass: top
> gidNumber: 10001
> memberuid: jackli
>
> dn: cn=fqyang,ou=Groups,dc=itlab,dc=com
> cn: fqyang
> objectClass: posixGroup
> objectClass: top
> gidNumber: 10002
> memberuid: fqyang
>
> dn: cn=dba,ou=Groups,dc=itlab,dc=com
> cn: dba
> objectClass: posixGroup
> objectClass: top
> gidNumber: 10003
> memberuid: jackli
> memberuid: fqyang
> EOF
[root@ldapserver ldap]# ldapadd -x -W -D "cn=ldapadm,dc=itlab,dc=com" -f groups.ldif
Enter LDAP Password:
adding new entry "cn=jackli,ou=Groups,dc=itlab,dc=com"
adding new entry "cn=fqyang,ou=Groups,dc=itlab,dc=com"
adding new entry "cn=dba,ou=Groups,dc=itlab,dc=com"

现在创建用户。

[root@ldapserver ldap]# cd ~/ldap
[root@ldapserver ldap]# cat > users.ldif << EOF
> dn: uid=jackli,ou=People,dc=itlab,dc=com
> uid: jackli
> cn: jackli
> objectClass: account
> objectClass: posixAccount
> objectClass: top
> objectClass: shadowAccount
> userPassword: {crypt}a
> shadowLastChange: 17665
> shadowMin: 0
> shadowMax: 99999
> shadowWarning: 7
> loginShell: /bin/bash
> uidNumber: 10001
> gidNumber: 10001
> homeDirectory: /home/jackli
>
> dn: uid=fqyang,ou=People,dc=itlab,dc=com
> uid: fqyang
> cn: fqyang
> objectClass: account
> objectClass: posixAccount
> objectClass: top
> objectClass: shadowAccount
> userPassword: {crypt}a
> shadowLastChange: 17665
> shadowMin: 0
> shadowMax: 99999
> shadowWarning: 7
> loginShell: /bin/bash
> uidNumber: 10002
> gidNumber: 10002
> homeDirectory: /home/fqyang
> EOF
[root@ldapserver ldap]# ldapadd -x -W -D "cn=ldapadm,dc=itlab,dc=com" -f users.ldif
Enter LDAP Password:
adding new entry "uid=jackli,ou=People,dc=itlab,dc=com"
adding new entry "uid=fqyang,ou=People,dc=itlab,dc=com"

为用户设置密码。

[root@ldapserver ldap]# ldappasswd -S -x -D "cn=ldapadm,dc=itlab,dc=com" -W "uid=jackli,ou=People,dc=itlab,dc=com"
New password:
Re-enter new password:
Enter LDAP Password:
[root@ldapserver ldap]# ldappasswd -S -x -D "cn=ldapadm,dc=itlab,dc=com" -W "uid=fqyang,ou=People,dc=itlab,dc=com"
New password:
Re-enter new password:
Enter LDAP Password:

我们还可以使用 LDAP 浏览器实用程序来管理我们的目录。
以下是我们此时目录的截图。

有各种商业和免费的 LDAP 目录浏览器和管理员工具可用。
我使用 LDAPAdmin 来完成这项工作。

www. On IT Road .com

在 CentOS 7 上配置 LDAP 客户端

现在,我将配置 Linux 客户端以使用我们的 LDAP 目录进行远程身份验证。
我在这里有一台带有 hostname=Desktop1 的客户端机器,我将其用于此目的。
首先,确保我们的 LDAP 目录服务器的主机名必须是可解析的,因为我们使用主机名 ldapserver.on-itroad.com 作为安全证书中的通用名称。

[root@desktop1 ~]# echo 192.168.1.3 ldapserver.on-itroad.com ldapserver >> /etc/hosts

现在安装所需的软件包。

[root@desktop1 ~]# yum -y install openldap sssd
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
localyum                                                                                           | 4.1 kB  00:00:00
Package openldap-2.4.39-3.el7.x86_64 already installed and latest version
Package sssd-1.11.2-65.el7.x86_64 already installed and latest version
Nothing to do
[root@desktop1 home]# systemctl start sssd && systemctl enable sssd
ln -s '/usr/lib/systemd/system/sssd.service' '/etc/systemd/system/multi-user.target.wants/sssd.service'

由于我们使用的是 LDAPS,因此我们必须将自签名证书复制到我们的客户端机器上。

[root@desktop1 ~]# scp root@ldapserver.on-itroad.com:/etc/openldap/certs/ldapserver.pem /etc/openldap/cacerts/ldapserver.pem
The authenticity of host 'ldapserver.on-itroad.com (192.168.1.3)' can't be established.
ECDSA key fingerprint is 4c:7f:83:39:d1:bc:ef:4c:fd:58:82:7b:36:ff:9e:f2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ldapserver.on-itroad.com,192.168.1.3' (ECDSA) to the list of known hosts.
root@ldapserver.on-itroad.com's password:
ldapserver.pem                                                                          100% 1452     1.4KB/s   00:00

现在在客户端机器上使用 LDAP 配置远程身份验证。

[root@desktop1 ~]# authconfig --update --enableldap --enableldapauth --enableldaptls --ldapserver=ldaps://ldapserver.on-itroad.com --ldapbasedn="dc=itlab,dc=com" --enablemkhomedir

现在使用 LDAP 用户进行连接。

[root@desktop1 home]# su - jackli
Creating directory '/home/jackli'.
Last login: Mon Jan 28 11:28:17 PDT 2018 on pts/0
[jackli@desktop1 ~]$ id
uid=10001(jackli) gid=10001(jackli) groups=10001(jackli),10003(dba) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

我们的客户端机器现在配置为向 OpenLDAP 远程身份验证服务器进行身份验证。

日期:2020-09-17 00:12:41 来源:oir作者:oir