将 OpenLDAP 与 IBM Spectrum LSF 集成
IBM Spectrum LSF 是一个工作负载管理平台,提供强大的资源管理功能来优化应用程序性能和最大限度提高资源使用率。 OpenLDAP 是轻量级目录访问协议 (LDAP) 的开放式源代码实现,提供集中式认证和目录服务。
通过遵循本教程中概述的步骤,您可以将 OpenLDAP 与 IBM Spectrum LSF集成,这使您能够使用现有 LDAP 基础结构进行认证,从而使用户能够更安全,更简化地访问 IBM Spectrum LSF。
请注意:本教程仅涵盖在 Linux® 系统 (RHEL 7.9 作为主机) 上配置 OpenLDAP 服务器。
设计注意事项
将 OpenLDAP 与 IBM Spectrum LSF 集成涉及修改 LSF 配置文件和 OpenLDAP 服务器配置文件。 此集成的设计注意事项包括:
(1)IBM Spectrum LSF 使用可插入认证模块 (PAM) 框架进行认证。
(2)IBM Spectrum LSF 的 PAM 配置位于 /etc/pam.d/lsf 文件中。
(3) OpenLDAP 使用称为专有名称 (DN) 的分层命名结构来标识目录中的条目。
(4)OpenLDAP 配置文件位于 /etc/openldap/slapd.conf 或 /etc/openldap/slapd.d/中。
(5) 必须将 OpenLDAP 服务器配置为通过安全连接 (LDAPS) 使用 LDAP 协议进行认证。
准备工作
开始之前,请确保查看以下先决条件:
常规先决条件
(1)已安装并配置 IBM Spectrum LSF V 10.1 或更高版本。
(2)已安装并配置 OpenLDAP V 2.4 或更高版本。
(3)可从 IBM Spectrum LSF 集群节点访问 OpenLDAP 服务器。
(4)ldapsearch 命令行工具安装在每个 IBM Spectrum LSF 集群节点上。
(5)pam_ldap 和 nss_ldap LDAP 客户机库安装在每个 IBM Spectrum LSF 集群节点上。
网络先决条件
要成功将 OpenLDAP 与 Spectrum LSF 集群节点集成,必须满足以下网络需求:
(1)** OpenLDAP 服务器与 Spectrum LSF 集群节点之间的网络连接**: 确保 OpenLDAP 服务器可以通过网络与 Spectrum LSF 集群节点进行通信。 这可以通过在 OpenLDAP 服务器和 Spectrum LSF 集群节点上配置网络设置来实现。
(2)端口需求: OpenLDAP 服务器和 Spectrum LSF 集群节点必须能够通过特定端口进行通信。 缺省情况下, OpenLDAP 将端口 389 用于未加密通信,将端口 636 用于加密通信。
(3)防火墙配置: 如果网络中存在防火墙,请确保打开必要的端口以在 OpenLDAP 服务器与 Spectrum LSF 集群节点之间进行通信。
(4)DNS 配置: 确保 Spectrum LSF 集群节点可以解析 OpenLDAP 服务器的主机名或 IP 地址。 如果 DNS 解析不可用,请在每个节点上配置 /etc/hosts 文件以包含 OpenLDAP 服务器的主机名和 IP 地址。
步骤 1: 配置 OpenLDAP 服务器
重要信息:确保您有权访问具有 root 用户特权的 Linux® 系统。
(1) 通过运行以下命令来安装 OpenLDAP 服务器和客户机软件包:
yum -y install openldap-servers openldap-clients
(2) 将 DB_CONFIG.example 文件复制到 /var/lib/ldap 目录,并通过运行以下命令将其所有权更改为 ldap 用户:
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
(3)通过运行以下命令,启动 slapd 服务并使其能够在引导时自动启动:
systemctl start slapd
systemctl enable slapd
(4)通过运行 slappasswd 命令来生成管理密码。 系统会提示您输入密码。 例如:
slappasswd
您会看到类似于以下内容的输出:
示例输出:
{SSHA}FUMV8TZ9lZQxABxCBE5UZ+oU/dlwf/d4
请注意稍后生成的密码散列 (在本例中为 {SSHA}FUMV8TZ9lZQxABxCBE5UZ+oU/dlwf/d4))。
(5)创建名为 chrootpw.ldif 的文件,并向其添加以下行:
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}FUMV8TZ9lZQxABxCBE5UZ+oU/dlwf/d4
将 olcRootPW 值替换为您在上一步中生成的密码散列。
(6)通过运行以下命令来导入基本模式:
ldapadd -Y EXTERNAL -H ldapi:/// -f
/etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f
/etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f
/etc/openldap/schema/inetorgperson.ldif
(7) 通过再次运行 slappasswd 命令来生成管理器密码。
slappasswd
您会看到类似于以下内容的输出:
示例输出:
{SSHA}TVW9z6WLIBC3EXtFHFWnb2EVlK7EZQ3b
请注意稍后生成的密码散列 (在本例中为 {SSHA}TVW9z6WLIBC3EXtFHFWnb2EVlK7EZQ3b)。
(8)通过创建名为 chdomain.ldif 的文件并向其添加以下行,添加管理器密码并启用管理器帐户:
# DC should be your domain
# specify the password generated above for "olcRootPW"
section
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=ibmlsf,dc=com" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=ibmlsf,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=ibmlsf,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}TVW9z6WLIBC3EXtFHFWnb2EVlK7EZQ3b
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=Manager,dc=ibmlsf,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=ibmlsf,dc=com" write by * read
将 {SSHA} 值替换为您在上一步中生成的密码散列。
(9)通过运行以下命令来应用更改:
ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
(10) 创建名为 basedomain.ldif 的文件,并向其添加以下行:
dn: dc=ibmlsf,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: WES Migration
dc: ibmlsf
dn: cn=Manager,dc=ibmlsf,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager
dn: ou=People,dc=ibmlsf,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=ibmlsf,dc=com
objectClass: organizationalUnit
ou: Group
(11)通过运行以下命令来应用上一步中所做的更改: ldapadd -x -D cn=Manager,dc=ibmlsf,dc=com -W -f basedomain.ldif
(12)使用编辑器 (例如 VI) 创建名为 ldapuser.ldif 的文件,并向其添加以下行 (在 "dc=***,dc=***" 部分中替换为您自己的必需域名): dn: uid=Lsfclusteruser,ou=People,dc=ibmlsf,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: Lsfclusteruser
sn: Linux
userPassword: {SSHA}+A6gC87JU5ugW6qthWL2HGYzsQIdN1EN
loginShell: /bin/bash
uidNumber: 1003
gidNumber: 1003
homeDirectory: /home/Lsfclusteruser
dn: cn=Lsfclusteruser,ou=Group,dc=ibmlsf,dc=com
objectClass: posixGroup
cn: Lsfclusteruser
gidNumber: 1001
memberUid: Lsfclusteruser
将 {SSHA} 值替换为先前生成的密码散列。
(13)通过运行以下命令来应用更改: ldapadd -x -D cn=Manager,dc=ibmlsf,dc=com -W -f ldapuser.ldif
(14)要验证是否已按先前步骤中提到的那样创建用户,请使用以下命令: ldapsearch -x -LLL -b "ou=People,dc=ibmlsf,dc=com" "(objectClass=posixAccount)" uid cn
OpenLDAP 服务器现已配置完毕,可供使用。 通过创建更多 LDIF 文件并使用 ldapadd 命令将这些文件导入到目录中,可以添加更多用户和组。
步骤 2: 在 OLDAP 目录中创建用户组
现在已配置 OpenLDAP 服务器,您需要在 OLDAP 目录中创建用户组,该用户组由应该访问 LSF 集群的用户组成。
(1)要创建组,请使用 ldapadd 命令将组的 LDIF 条目添加到 LDAP 目录。 例如,要创建名为 "LSFAdministrators" 和 "LSF使用者" 的组,可以创建具有以下内容的 LDIF 文件:
# create an organizational unit for groups
dn: ou=groups,dc=ibmlsf,dc=com
objectClass: organizationalUnit
ou: groups
# create a group called "LSFadministrators"
dn: cn=LSFadministrators,ou=groups,dc=ibmlsf,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1001
cn: LSFadministrators
description: LSFadministrators group
# create a group called "LSFconsumers"
dn: cn=LSFconsumers,ou=groups,dc=ibmlsf,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1002
cn: LSFconsumers
description: LSFconsumers group
在此示例中,第一个条目创建名为 "groups" 的组织单元。 接下来的两个条目将创建名为 "LSFAdministrators" 和 "LSF使用者" 的组。
每个组条目指定 objectClass "top" 和 "posixGroup" 以定义组的模式。 gidNumber 属性指定组的唯一标识,而 cn 属性指定组的公共名称。 最后, description 属性提供组的简要描述。
(2)您可以将上一步中的内容保存在具有 .ldif 扩展名的文件 (例如 groups.ldif) 中,然后使用 ldapadd 命令将这些组条目添加到 LDAP 目录中。 请参阅以下 ldapadd 示例命令:
ldapadd -x -D cn=Manager,dc=ibmlsf,dc=com -W -f groups.ldif
[root@oldapserverlsfcl ~]# ldapsearch -x -D
cn=Manager,dc=ibmlsf,dc=com -W -b
"ou=groups,dc=ibmlsf,dc=com" "(objectClass=posixGroup)"
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <ou=groups,dc=ibmlsf,dc=com> with scope subtree
# filter: (objectClass=posixGroup)
# requesting: ALL
#
# LSFadministrators, groups, ibmlsf.com
dn: cn=LSFadministrators,ou=groups,dc=ibmlsf,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1001
cn: LSFadministrators
description: LSFadministrators group
memberUid: user2lsf
memberUid: user1lsf
# LSFconsumers, groups, ibmlsf.com
dn: cn=LSFconsumers,ou=groups,dc=ibmlsf,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1002
cn: LSFconsumers
description: LSFconsumers group
memberUid: lsfoprt
memberUid: lsfsupport
# search result
search: 2
result: 0 Success显示更多
此输出显示在 ou=groups,dc=ibmlsf,dc=com 组织单元中有两个组条目: LSFadministrators 和 LSFconsumers。
稍后,您可以使用 ldapmodify 命令将现有用户添加到这些组。 在先前的 ldapsearch 输出中,两个用户被视为每个组的成员。
接下来,需要为正在将 RHEL 8 作为操作系统运行的客户端机器配置 LDAP 认证,并将 OLDAP 服务器作为认证提供程序或身份提供者运行。 在这种情况下, OLDAP 客户机是 LSF 集群,因此以下步骤适用于在 RHEL 8 Linux® 机器上运行的 LSF 集群节点。
重要信息:在以下步骤中,确保将 "dc=***,dc=***" 部分中的域名替换为您自己的域名。
(1)请运行以下命令:
yum -y install openldap-clients nss-pam-ldapd
yum install authselect sssd oddjob oddjob-mkhomedir
authconfig --enablesssd --enablesssdauth --update
(2)启用 SSSD 认证概要文件:
authselect select sssd
(3)将 LDAP 服务器 URL 和基本搜索 DN 添加到 /etc/openldap/ldap.conf 文件,如以下示例中所示:
URI ldap://ibmlsf.com/ <or IP address will also work>
BASE dc=ibmlsf,dc=com
(4)在 /etc/sssd 目录中,使用以下内容创建文件 sssd.conf :
[domain/default]
autofs_provider = ldap
cache_credentials = True
ldap_search_base = dc=ibmlsf,dc=com
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://<ip address of the LDAP Server>
[sssd]
services = nss, pam, autofs
domains = default
[nss]
homedir_substring = /home
使用基本 DN 更新 ldap_search_base 参数,并使用 LDAP 服务器的 URL 更新 ldap_uri 。
(5)更改 /etc/sssd/sssd.conf 文件的许可权:
chmod 600 /etc/sssd/sssd.conf
(6)重新启动并启用 SSSD:
systemctl restart sssd
systemctl enable sssd
现在,您已将 SSSD 配置为在 RHEL 8 系统上使用 LDAP 服务器 "ibmlsf.com" 进行用户认证。
现在,您已配置 LDAP 客户机认证,需要配置在 LDAP 上托管的 LSF 集群以指向 OLDAP 服务器,这将确保 LSF 集群与 OLDAP 服务器的集成可用于用户管理。
(1)备份现有 lsf.conf 和 lsf.cluster.name 文件:
cp/etc/lsf.conf /etc/lsf.conf.backup cp/etc/lsf.cluster.name /etc/lsf.cluster.name.backup
(2)编辑 lsf.conf 文件以添加 LDAP 认证设置:
AUTHMODE=ldap AUTHLDAPSERVER=<OpenLDAP_server>
AUTHLDAPBASEDN=<LDAP_base_DN> AUTHLDAPUSER=<bind_DN>
AUTHLDAPPASS=<bind_password>
AUTHLDAPUSERTYPE=<user_object_class>
AUTHLDAPUSERSEARCH=<user_search_filter>
AUTHLDAPGROUP=<group_object_class>
AUTHLDAPGROUPSEARCH=<group_search_filter>
将值替换为您的相关信息。 请参阅下表以获取更多详细信息:
值 | 描述 |
---|---|
<OpenLDAP_server> | OpenLDAP 服务器的主机名或 IP 地址 |
<LDAP_base_DN> | OpenLDAP 目录的基本 DN |
<bind_DN> | IBM Spectrum LSF 应该用于绑定到 OpenLDAP 服务器以进行认证的用户的专有名称 |
<bind_password> | 绑定用户的密码 |
<user_object_class> | OpenLDAP 目录中用户条目的对象类 |
<user_search_filter> | 用户条目的搜索过滤器 |
<group_object_class> | 组条目的对象类 |
<group_search_filter> | 组条目的搜索过滤器 |
图1. LDAP 认证设置
(3)重新启动以下三个服务,以便您在 lsf.conf 文件中配置的认证设置可以生效:
bctrld restart sbd all
bctrld restart res all
bctrld restart lim all
(4)编辑 lsf.cluster.name 文件以指定 LDAP 认证域:
LSF_CLUSTER_NAME=<cluster_name> LSF_LDAP_DOMAIN=<LDAP_authentication_domain
将 <cluster_name> 替换为 IBM Spectrum LSF 集群的名称,并将 <LDAP_authentication_domain> 替换为 LDAP 认证域的名称。
要向组授予对 LSF 集群的访问权,需要编辑 LSF 配置文件以将该组包含在相应的访问控制表 (ACL) 中。
请注意:特定 LDAP 命令行工具和命令可能有所不同。
(1)以 LSF 管理员身份登录到集群中的任何主机。
(2)打开 lsb.users (/opt/ibm/lsf/conf/lsbatch/HPCCLUSTER/configdir)。
(3)编辑 "UserGroup" 部分。 以下示例显示了 lsb.users的 "UserGroup" 部分; 但是,如果您看到另一个 "UserGroup" 部分,那么可以使用此示例中的值 (取自 LSF 集群服务器) 创建新的部分:
[root@icgen2host-172-19-1-69 configdir]# cat lsb.users
# $Revision$Date$
# After editing this file, run "badmin reconfig" to apply your changes.
# User groups can be referenced by the lsb.hosts and lsb.queues files.
# All the example definitions here are commented out
# User group for lsf cluster administration
Begin UserGroup
GROUP_NAME PRIORITY GROUP_MEMBER GROUP_ADMIN
lsfamitadmin 100 (user1lsf user2lsf) (user1lsf)
#groupA 200 (user1 user2 user3 user4) (user5)
#groupB 100 (groupA user5) (groupA)
#groupC 50 (!) ()
End UserGroup
# User group for all LSF administrators
Begin UserGroup
GROUP_NAME GROUP_MEMBER #USER_SHARES # Key words
lsfadmins (lsfadmin )
newlsf (lsfuser123)
#ldapusers (ldapuser01 ldapuser02)
End UserGroup
# Perform the following edit in the lsb.params file located in "/opt/ibm/lsf/conf/lsbatch/HPCCLUSTER/configdir"
Define STRICT_UG_CONTROL=Y in lsb.params
(4)要启用用户组管理员,请在 GROUP_ADMIN 列中指定用户或用户组,使用空格分隔用户和用户组,并将每个 GROUP_ADMIN 条目括在方括号中。
(5)保存更改。
(6)运行 badmin ckconfig 以检查新的用户组定义。 如果报告了任何错误,请修正问题并再次检查配置。
(7)运行 badmin reconfig 以重新配置集群。
登录后,可以使用 EGO 命令来管理 LSF 集群,例如 egosh resource, egosh job和 egosh host等 (如以下示例中所示)。
提示:要完成以下步骤,您需要使用具有高特权的 LSF 用户帐户。 只有具有高特权的帐户才能将用户添加到 LSF 集群,然后向其分配角色。 但是,如果为新添加的用户分配了 CLUSTER_Admin 角色,那么该用户还可以为随后添加的用户完成以下步骤。
(1)要将 OLDAP 服务器中创建的现有用户 "user1lsf" 添加到 LSF 集群,您需要以集群管理员身份登录,然后运行以下命令:
[root@icgen2host-172-19-1-69 ~]# su Lsfadmin
bash-4.4$ egosh user logon -u Admin -x Admin
Admin@HPCCluster> user add
user account: user1lsf
password:
password(type again, please):
User account < user1lsf > added successfully
Admin@HPCCluster>@HPCCluster> user logoff
Logged off successfully
(2)通过运行以下命令,使用上一步中添加的用户登录到 LSF 集群:
[root@icgen2host-172-19-1-69 ~]# su user1lsf
bash-4.4$ egosh user logon -u user1lsf -x welcome@31!
Logged on successfully
bash-4.4$ egosh
user1lsf@HPCCluster> resource list
NAME status mem swp tmp ut it pg r1m r15s r15m ls
icgen2h* ok 14G 0M 74G 2% 0 0 0.1 0 0 1
icgen2h* ok 15G 0M 75G 0% 20339 0 0 0.3 0 0
user1lsf@HPCCluster> ego info
Cluster name : HPCCluster
EGO master host name : icgen2host-172-19-1-69
EGO master version : 3.4
user1lsf@HPCCluster>
(3)通过运行以下命令向新用户分配角色:
lsfadmin@HPCCluster> user assignrole -u user1lsf -r CONSUMER_USER
Role <Consumer User> is assigned to user <user1lsf>.
lsfadmin@HPCCluster> user list
ACCOUNT PHONE EMAIL DESCRIPTION
----------------------------------------------------------------
Admin
Guest
user2lsf
user1lsf
smith
现在,您已成功将 OpenLDAP 与 IBM Spectrum LSF 集成,以提供集中式认证和目录服务,这使您能够使用现有 LDAP 基础结构进行认证。 您还启用了对 IBM Spectrum LSF的安全且简化的用户访问权。