在Rocky Linux 8/AlmaLinux 8上配置OpenLDAP客户端

本文将学习如何在Rocky Linux 8/AlmaLinux 8上配置OpenLDAP客户端,并启用身份验证和共享有关多个网络资源的信息。

开始之前

对于本文,我假设您已经设置了OpenLDAP服务器。如果还没有,您可以使用以下指南安装和配置OpenLDAP:

在Rocky Linux 8/AlmaLinux 8上安装和配置OpenLDAP服务器:https://www.hmxthome.com/linux/4954.html

安装完成后,设置主机名:

sudo hostnamectl set-hostname ldapclient.computingforgeeks.com

现在更新/etc/hosts文件,如下所示:

$ sudo vim /etc/hosts

##OpenLDAP服务器

192.168.205.2 ldapmaster.computingforgeeks.com

##OpenLDAP客户端

192.168.205.16 ldapclient.computingforgeeks.com

对于这种情况,我的OpenLDAP服务器以域名“ldapmaster.computingforgeeks.com”运行。

验证服务器是否可访问:

$ sudo ping -c3 ldapmaster.computingforgeeks.com

PING ldapmaster.computingforgeeks.com (192.168.205.2) 56(84) bytes of data.

64 bytes from ldapmaster.computingforgeeks.com (192.168.205.2): icmp_seq=1 ttl=64 time=0.362 ms

64 bytes from ldapmaster.computingforgeeks.com (192.168.205.2): icmp_seq=2 ttl=64 time=0.295 ms

64 bytes from ldapmaster.computingforgeeks.com (192.168.205.2): icmp_seq=3 ttl=64 time=0.265 ms

--- ldapmaster.computingforgeeks.com ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2030ms

rtt min/avg/max/mdev = 0.265/0.307/0.362/0.043 ms

配置OpenLDAP客户端的方法

步骤1、安装OpenLDAP客户端和SSSD包

配置了FQDN和主机文件后,我们将在Rocky Linux 8/AlmaLinux 8上安装OpenLDAP客户端和SSSD包。SSSD包(System Security Service Daemon)用于将Linux系统注册到目录服务,如Active directory IPA服务器和LDAP域。

要安装所有必需的软件包,请发出以下命令:

sudo dnf install openldap-clients sssd sssd-ldap oddjob-mkhomedir libsss_sudo

依赖关系树:

Install   1 Package

Upgrade  16 Packages

Total download size: 4.6 M

Is this ok [y/N]: y

安装后,您需要将身份验证配置文件更改为SSSD。列出可用的配置文件:

$ authselect list

- minimal:Local users only for minimal installations

- nis:Enable NIS for system authentication

- sssd:Enable SSSD for system authentication (also for local users only)

- winbind:Enable winbind for system authentication

现在切换到SSSD配置文件:

$ sudo authselect select sssd with-mkhomedir --force

Backup stored at /var/lib/authselect/backups/2023-01-23-18-22-35.bE7tCJ

Profile "sssd" was selected.

The following nsswitch maps are overwritten by the profile:

- passwd

- group

- netgroup

- automount

- services

Make sure that SSSD service is configured and enabled. See SSSD documentation for more information.

- with-mkhomedir is selected, make sure pam_oddjob_mkhomedir module

  is present and oddjobd service is enabled and active

  - systemctl enable --now oddjobd.service

之后,启动并启用oddjobd服务:

sudo systemctl enable --now oddjobd.service

验证服务是否正在运行:

$ systemctl status oddjobd.service

步骤2、配置OpenLDAP客户端和SSSD服务

安装后,您可以配置OpenLDAP客户端和SSSD服务。我们将首先配置OpenLDAP客户端:

sudo vim /etc/openldap/ldap.conf

在文件中,按配置定义OpenLDAP服务器和基本搜索域名:

URI ldap://ldapmaster.computingforgeeks.com

BASE dc=computingforgeeks,dc=com

SUDOERS_BASE ou=sudo,dc=computingforgeeks,dc=com

最后一行是我们将在本文稍后创建的SUDO访问。保存文件并配置SSSD服务:

sudo vim /etc/sssd/sssd.conf

添加以下文件并适当替换“ldap_uri”、“ldap_search_base”和“sudoers_base”:

[domain/default]

id_provider = ldap

autofs_provider = ldap

auth_provider = ldap

chpass_provider = ldap

ldap_uri = ldap://ldapmaster.computingforgeeks.com

ldap_search_base = dc=computingforgeeks,dc=com

sudoers_base ou=sudo,dc=computingforgeeks,dc=com

sudo_provider = ldap

ldap_id_use_start_tls = True

ldap_tls_cacertdir = /etc/openldap/certs

cache_credentials = True

ldap_tls_reqcert = allow

[sssd]

services = nss, pam, autofs, sudo

domains = default

[nss]

homedir_substring = /home

[sudo]

保存文件并设置所需的权限:

sudo chmod 0600 /etc/sssd/sssd.conf

重新启动服务:

sudo systemctl restart sssd

验证服务是否正在运行:

$ systemctl status sssd

步骤3、在Rocky Linux 8/AlmaLinux 8上测试OpenLDAP身份验证

完成以上配置后,我们将测试是否可以使用OpenLDAP服务器上的可用用户帐户登录。

查找服务器上的可用用户帐户:

ldapsearch -x -b "ou=people,dc=computingforgeeks,dc=com"

在Rocky Linux 8/AlmaLinux 8上配置OpenLDAP客户端

比如,显示出来的是“testuser”,则现在我们将使用用户“testuser”登录进行测试。从GUI中,您可以使用新用户帐户登录,然后提供密码,并在验证后,如图所示验证ID:

在Rocky Linux 8/AlmaLinux 8上配置OpenLDAP客户端

也可以使用SSH,如下所示:

ssh testuser@192.168.205.16

样本输出:

在Rocky Linux 8/AlmaLinux 8上配置OpenLDAP客户端

步骤4、将sudoers添加到OpenLDAP

可以将具有sudo属性的用户添加到OpenLDAP。在设置OpenLDAP服务器时,我们在/etc/openldap/schema/sudo.ldif为sudo模式创建了LDIF:

$ cat /etc/openldap/schema/sudo.ldif

dn: cn=sudo,cn=schema,cn=config

objectClass: olcSchemaConfig

cn: sudo

olcAttributeTypes: {0}( 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}( 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: {2}( 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: {3}( 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: {4}( 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: {5}( 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: {6}( 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 )

olcAttributeTypes: {7}( 1.3.6.1.4.1.15953.9.1.8 NAME 'sudoNotBefore' DESC 'Start of time interval for which the entry is valid' EQUALITY generalizedTimeMatch ORDERING generalizedTimeOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )

olcAttributeTypes: {8}( 1.3.6.1.4.1.15953.9.1.9 NAME 'sudoNotAfter' DESC 'End of time interval for which the entry is valid' EQUALITY generalizedTimeMatch ORDERING generalizedTimeOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )

olcAttributeTypes: {9}( 1.3.6.1.4.1.15953.9.1.10 NAME 'sudoOrder' DESC 'an integer to order the sudoRole entries' EQUALITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )

olcObjectClasses: {0}( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' DESC 'Sudoer Entries' SUP top STRUCTURAL MUST cn MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ sudoOrder $ sudoNotBefore $ sudoNotAfter $ description ) )

现在,在OpenLDAP服务器上,创建一个sudoers组织单元(ou):

vim sudoers.ldif

在文件中,添加以下行:

dn: ou=sudo,dc=computingforgeeks,dc=com

objectClass: organizationalUnit

objectClass: top

ou: sudo

description: my-demo LDAP SUDO Entry

应用LDIF:

$ sudo ldapadd -x -D cn=Manager,dc=computingforgeeks,dc=com -W -f sudoers.ldif

Enter LDAP Password: 

adding new entry "ou=sudo,dc=computingforgeeks,dc=com"

创建默认LDIF:

$ vim defaults.ldif

dn: cn=defaults,ou=sudo,dc=computingforgeeks,dc=com

objectClass: sudoRole

objectClass: top

cn: defaults

sudoOption: env_reset

sudoOption: mail_badpass

sudoOption: secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

#sudoOrder: 1

应用更改:

$ sudo ldapadd -x -D cn=Manager,dc=computingforgeeks,dc=com -W -f defaults.ldif

Enter LDAP Password: 

adding new entry "cn=defaults,ou=sudo,dc=computingforgeeks,dc=com"

最后,将用户添加到角色:

$ vim sudo_user.ldif

dn: cn=testuser,ou=sudo,dc=computingforgeeks,dc=com

objectClass: sudoRole

objectClass: top

cn: testuser

sudoCommand: ALL

sudoHost: ALL

sudoRunAsUser: ALL

sudoUser: testuser

#sudoOrder: 2

记住用OpenLDAP服务器中的实际用户替换testuser。您还可以设置用户执行的sudo命令,而不是ALL,例如:

sudoCommand: /usr/sbin/useradd

如果要使用NOPASSWD OpenLDAP SUDO,请添加以下行:

sudooption: !authenticate

现在将LDIF添加到服务器:

sudo ldapadd -x -D cn=Manager,dc=computingforgeeks,dc=com -W -f sudo_user.ldif

添加后,返回LDAP客户端并修改以下文件:

##在LDAP客户端上##

sudo vim /etc/nsswitch.conf

在文件中,添加以下行:

sudoers: files sss

完成更改后,重新启动服务:

sudo systemctl restart sssd

现在测试是否为用户添加了sudo:

在Rocky Linux 8/AlmaLinux 8上配置OpenLDAP客户端

在Rocky Linux 8/AlmaLinux 8上配置OpenLDAP客户端

至此,配置成功。

总结

我们已经在Rocky Linux 8/AlmaLinux 8上成功配置了OpenLDAP客户端。现在,您可以将几个Rocky Linux 8/AlmaLinux 8客户端添加到OpenLDAP服务器,并根据需要使用它们。另外,我们还学习了如何为OpenLDAP用户配置sudo访问。

栏目相关文章