我们将验证 LDAP 身份验证是否正常工作,了解用户是如何管理的,并向目录中添加一个新用户。
多用户设置由三个组件构成:
/home)上创建用户的主目录。我们无需配置任何内容——在 Image Builder 过程中,SSSD 已被固化到 AMI 中,并已设置好 LDAP 服务器 URI、base DN 和绑定凭证。
在login机器上执行以下命令:
export INFRA_STACK="pcs-workshop-infra"
export AWS_DEFAULT_REGION="us-east-2"
检查预配置的测试用户是否可以被解析:
getent passwd user1
getent passwd user2
id user1
我们应该会看到:
user1:*:2001:2000:User One:/home/user1:/bin/bash
user2:*:2002:2000:User Two:/home/user2:/bin/bash
uid=2001(user1) gid=2000(hpcusers) groups=2000(hpcusers)
两个用户都在 hpcusers 组(gid 2000)中。每个用户的密码是在堆栈部署时生成的,并存储在各自的 Secrets Manager 密钥中—密钥名称作为堆栈输出 User1PasswordSecretName 和 User2PasswordSecretName 暴露。
从 Secrets Manager 检索 user1 的密码:
USER1_SECRET=$(aws cloudformation describe-stacks \
--stack-name $INFRA_STACK \
--query "Stacks[0].Outputs[?OutputKey=='User1PasswordSecretName'].OutputValue" \
--output text)
USER1_PASSWORD=$(aws secretsmanager get-secret-value \
--secret-id $USER1_SECRET \
--query SecretString \
--output text \
--region us-east-2)
echo "user1 password is $USER1_PASSWORD"
如果我们需要 user2 的密码,使用 User2PasswordSecretName 采用相同的模式。
登录节点位于私有子网中,通过 NAT 网关访问 Secrets Manager。
切换到 user1 并验证主目录是否已自动创建:
sudo su - user1 -c "whoami && pwd && ls -la"
pam_mkhomedir 模块在 user1 首次登录时会在 EFS 上创建 /home/user1。由于 EFS 在所有节点间共享,因此该主目录可从集群中的每个节点访问。

要添加一个新用户,我们需要 LDAP 管理员密码和服务器 URI。LDAP URI 位于节点上的 SSSD 配置中。密码存储在 Secrets Manager 中。
从本地 SSSD 配置获取 LDAP URI,并从 Secrets Manager 获取密码:
LDAP_URI=$(grep ldap_uri /etc/sssd/sssd.conf | awk '{print $3}')
echo "LDAP URI: $LDAP_URI"
LDAP_PASSWORD=$(aws secretsmanager get-secret-value \
--secret-id pcs-workshop-ldap-password-$INFRA_STACK \
--query SecretString \
--output text \
--region us-east-2)
echo "Got password: ${#LDAP_PASSWORD} chars"
为新用户创建一个 LDIF 文件:
cat > new-user.ldif << 'EOF'
dn: cn=Workshop User,ou=people,dc=pcs,dc=workshop
givenName: Workshop
sn: User
cn: Workshop User
uid: workshopuser
uidNumber: 2003
gidNumber: 2000
homeDirectory: /home/workshopuser
loginShell: /bin/bash
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
mail: workshopuser@pcs.workshop
EOF
该 LDIF 文件定义了一个新用户,包含:
uid: workshopuser — Linux 用户名uidNumber: 2003 — 唯一的用户 ID(不得与现有用户冲突)gidNumber: 2000 — hpcusers 组homeDirectory: /home/workshopuser — 将由 pam_mkhomedir 自动创建将该用户添加到 LDAP:
ldapadd -x \
-D "cn=Manager,dc=pcs,dc=workshop" \
-w "$LDAP_PASSWORD" \
-H "$LDAP_URI" \
-f new-user.ldif
我们应该会看到 adding new entry "cn=Workshop User,ou=people,dc=pcs,dc=workshop"。
# 清除 SSSD 缓存以立即识别新用户
sudo sss_cache -E
getent passwd workshopuser
id workshopuser
我们应该会看到:
workshopuser:*:2003:2000:Workshop User:/home/workshopuser:/bin/bash
uid=2003(workshopuser) gid=2000(hpcusers) groups=2000(hpcusers)
测试切换到新用户:
su - workshopuser -c "whoami && pwd"

通过提交一个简单的作业,测试 Slurm 是否能识别 LDAP 用户:
sudo su - user1 -c 'sbatch --wrap="hostname && whoami && id" -p x86 -o /home/user1/test-job.out'
此作业将启动一个 hpc7a 实例(由于实例从零开始扩展,第一个作业需要几分钟时间)。我们可以使用 squeue 检查作业状态并等待其完成。
LDAP 多用户访问正常工作。用户从 LDAP 目录解析,主目录在 EFS 上自动创建,Slurm 接受来自 LDAP 用户的作业。