申请试用

将 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 输出中,两个用户被视为每个组的成员。


步骤 3: 在客户端机器上配置 LDAP 认证

接下来,需要为正在将 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" 进行用户认证。


步骤 4: 配置 LSF 集群

现在,您已配置 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 文件中配置的认证设置可以生效:

  1.  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 集群的访问权,需要编辑 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 以重新配置集群。


管理 LSF 集群

登录后,可以使用 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的安全且简化的用户访问权。