配置LDAP客户端以通过LDAP服务器进行身份验证

时间:2020-01-09 10:37:45  来源:igfitidea点击:

安装Openldap客户端软件包

首先让我们安装所有必需的openldap客户端和相关软件包

由于我们计划使用authconfig来为RHEL/CentOS 7 Linux节点配置ldap客户端,因此我们仅安装SSSD和authconfig软件包。
必须具有" oddjob-mkhomedir"才能自动创建活动目录用户的主目录。

说明:

在RHEL系统上,我们必须具有RHN的有效订阅,或者我们可以配置本地脱机存储库,通过该本地脱机存储库,yum软件包管理器可以安装提供的rpm及其依赖项。

[root@ldap-client ~]# yum install authconfig authconfig-gtk openldap-clients sssd oddjob-mkhomedir.x86_64 -y

提示:

如果要使用nslcd配置LDAP客户端,则必须安装nss-pam-ldapdpam_ldap

我们将仅使用SSSD,因此不会在本教程中介绍此部分

配置LDAP客户端以通过LDAP服务器进行身份验证

在开始之前,请确保将/etc/openldap/cacerts/ca.cert.pem从ldap-server复制到ldap-client在同一位置下的/etc/openldap/cacerts/ca.cert.pem。
此项将由authconfig工具引用

方法1:使用authconfig-tui

配置客户端系统以使用LDAP目录进行用户身份验证就像在Fedora或者RHEL系统上一样容易。
Fedora具有命令行实用程序以及GUI工具(例如," system-config-authentication"," authconfig-gtk"),使操作变得简单。

软件包authconfig提供了一种命令行工具。
要从命令行启动该工具,请键入以下内容:

[root@ldap-client ~]# authconfig-tui

将会出现类似于接下来显示的屏幕:

  • 在Authentication Configuration屏幕上,导航至(使用键盘上的TAB),然后选择(使用键盘上的SPACEBAR)以下内容:Use LDAP→在User Information部分下Use LDAP Authentication→在Authentication下部分

  • 导航到"下一步"按钮,然后按ENTER键将其选中。

  • 使用以下信息来完成随后的" LDAP设置"屏幕中的字段:Serverldap://10.0.2.20/Base DN:dc = example,dc = com

说明:

这里10.0.2.20是我的ldap服务器的IP地址,用服务器详细信息替换它

  • 当我们点击"确定"时,这将自动更改一系列文件,否则必须手动更改。
    例如,它将在" /etc/openldap/ldap.conf"文件中添加以下行:
URI ldap://10.0.2.20/
BASE dc=example,dc=com
TLS_CACERTDIR /etc/openldap/cacerts

说明:

其中注释掉" TLS_CACERTDIR"并添加" TLS_REQCERT never"

方法2:使用authconfig CLI

我们还可以使用authconfig在客户端上配置ldap,如下所示

[root@ldap-client ~]# authconfig --enableldap --enableldapauth --ldapserver=10.0.2.20 --ldapbasedn="dc=example,dc=com" --enableldaptls --update

说明:

如果我们已经使用authconfig-tui配置了客户端,则可以使用authconfig跳过配置。

配置OpenLDAP

接下来,配置" openldap"客户端以与ldap服务器和通信方法进行通信。
/etc/openldap/ldap.conf中添加以下内容

BASE   dc=example,dc=com
URI    ldap://10.0.2.20
TLS_CACERTDIR /etc/openldap/cacerts

说明:

如果得到无法启动TLS加密。
TLS:重新启动sssd后,主机名与/var/log/messages中的对等证书错误中的CN不匹配,这意味着客户端的主机名未配置为使用CA证书。
在这种情况下,我们必须在ldap服务器上为此使用SAN证书的客户端生成正确的证书。

另外,我们可以在/etc/openldap/ldap.conf中使用TLS_REQCERT never禁用TLS检查,在/etc/sssd/sssdd.conf中使用ldap_id_use_start_tls = False禁用TLS检查。
但这将禁用TLS通信,从而使系统不安全。

配置oddjob-mkhomedir以自动创建主目录

我们可以使用oddjob-mkhomedir为登录客户端节点的任何ldap用户自动创建主目录。
这需要由我们先前已安装的ddjob-mkhomedir提供的pam_mkhomedir.so。

修改PAM配置以使用pam_oddjob_mkhomedir
例如,将这一行添加到/etc/pam.d/system-auth的底部。

session required pam_oddjob_mkhomedir.so

接下来启用并启动oddjobd.service

[root@ldap-client ~]# systemctl enable oddjobd.service --now

说明:

在RHEL/CentOS 6/7中,sshd pam配置文件(/etc/pam.d/sshd)使用/etc/pam.d/password-auth文件而不是/etc/pam.d/system- auth
因此,为了通过ssh登录时创建主目录,还需要在/etc/pam.d/password-auth文件中添加以上行。

除了手动编辑,还可以使用authconfig命令:

[root@ldap-client ~]# authconfig --enablemkhomedir --updateall

还重新启动sssd.service

[root@ldap-client ~]# systemctl restart sssd.service

创建LDAP用户(可选)

如果我们已经是ldap用户,则可以忽略此步骤。

为了认证为LDAP用户,在创建用户时,我们必须包括一系列字段,例如shell,uid,gid等。
例如,让我们添加用户testuser1
我们首先创建testuser1.ldif文件,其内容如下:

[root@ldap-client ~]# cat testuser1.ldif
dn: uid=testuser1,ou=users,dc=example,dc=com
uid: testuser1
cn: testuser1
objectClass: shadowAccount
objectClass: top
objectClass: person
objectClass: inetOrgPerson
objectClass: posixAccount
userPassword: {SSHA}5rMM/3f8Ki13IyarGTtwzieoTu7KMgwc
shadowLastChange: 17016
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/testuser1
sn: testuser1
mail: [email protected]

说明:

其中我已经在" ldap-server"节点上使用" slappasswd"为" testuser1"创建了一个加密密码。
我的testuser1密码是test

创建LDAP组(可选)

如果我们已经是ldap组,则可以忽略此步骤。

另外,我们将需要一个用于此" testuser1"的组,因此我将其添加到我们现有的OU用户中

[root@ldap-client ~]# cat groups.ldif
dn: cn=testuser1,ou=users,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn: testuser1
userPassword: {crypt}x
gidNumber: 1001

将用户和组添加到LDAP数据库(可选)

使用以下命令将用户和组添加到ldap目录

[root@ldap-client ~]# ldapadd -f testuser1.ldif -x -D cn=admin,dc=example,dc=com -w redhat
adding new entry "uid=testuser1,ou=users,dc=example,dc=com"
[root@ldap-client ~]# ldapadd -x -D cn=admin,dc=example,dc=com -f groups.ldif -w redhat
adding new entry "cn=testuser1,ou=users,dc=example,dc=com"

提示:

如果执行上述命令得到ldap_add:语法无效(21);添加信息:objectClass:值#0每个语法无效
ldap_add: Invalid syntax (21); additional info: objectClass: value #0 invalid per syntax

,则必须使用以下命令加载" nis.ldif"

# ldapadd -Y EXTERNAL -H ldapi://-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"

然后为用户/组重试" ldapadd"命令。

验证新用户和组(可选)

再次运行" ldapsearch"命令,并验证基本DN下是否列出了用户和组以完成配置。

[root@ldap-client ~]# ldapsearch -x -D cn=admin,dc=example,dc=com -b dc=example,dc=com -w redhat
# extended LDIF
## LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
## example.com
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: example
# users, example.com
dn: ou=users,dc=example,dc=com
objectClass: organizationalUnit
ou: users
# scientists, users, example.com
dn: cn=scientists,ou=users,dc=example,dc=com
cn: scientists
objectClass: groupOfNames
member: cn=Archimedes of Syracuse,ou=users,dc=example,dc=com
# testuser1, users, example.com
dn: uid=testuser1,ou=users,dc=example,dc=com
uid: testuser1
cn: testuser1
objectClass: shadowAccount
objectClass: top
objectClass: person
objectClass: inetOrgPerson
objectClass: posixAccount
userPassword:: e1NTSEF9NXJNTS8zZjhLaTEzSXlhckdUdHd6aWVvVHU3S01nd2M=
shadowLastChange: 17016
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/testuser1
sn: testuser1
mail: [email protected]
# testuser1, users, example.com
dn: cn=testuser1,ou=users,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn: testuser1
userPassword:: e2NyeXB0fXg=
gidNumber: 1001
# search result
search: 2
result: 0 Success
# numResponses: 6
# numEntries: 5

通过LDAP用户连接

由于我们已经安装了oddjob,因此我们不需要手动创建ldap用户的主目录,而是在用户首次登录时创建的。
现在,我们将能够通过LDAP用户进行身份验证

login as: testuser1
[email protected]'s password:
[testuser1@ldap-client ~]$