Slurm集群中的PAM安全模块:pam_slurm_adopt详解

Slurm集群中的PAM安全模块:pam_slurm_adopt详解

slurm Slurm: A Highly Scalable Workload Manager slurm 项目地址: https://gitcode.com/gh_mirrors/sl/slurm

概述

pam_slurm_adopt是Slurm工作负载管理器中的一个PAM(可插拔认证模块)安全组件,主要用于增强集群计算节点的访问控制。该模块通过将SSH会话与用户作业关联,实现了以下核心功能:

  1. 访问控制:只允许拥有运行中作业的用户登录计算节点
  2. 进程跟踪:将SSH会话及其衍生进程纳入作业管理范围
  3. 资源清理:确保作业结束时所有相关进程被正确终止

核心工作原理

当用户尝试SSH登录计算节点时,pam_slurm_adopt会执行以下检查流程:

  1. 识别发起SSH连接的源作业
  2. 将用户连接"收养"到作业的"external"步骤中
  3. 如果检查失败,返回相关错误信息拒绝访问

安装指南

从源码安装

cd ./contribs/pam_slurm_adopt/
make && make install

安装完成后,模块文件将被放置在:

  • Debian系统:/lib/security/
  • RedHat/SuSE系统:/lib64/security/

包管理器安装

  • RPM系统:安装slurm-pam_slurm RPM包
  • DEB系统:安装slurm-smd-libpam-slurm-adopt DEB包

关键配置步骤

Slurm配置要求

必须在slurm.conf中设置以下参数:

PrologFlags=contain
TaskPlugin=task/cgroup
ProctrackType=proctrack/cgroup
LaunchParameters=ulimit_pam_adopt

重要警告:这些配置必须在启用pam_slurm_adopt前设置完成,否则模块无法正常工作。

SSH服务配置

确保/etc/ssh/sshd_config中包含:

UsePAM On
AuthenticationMethods publickey,password

特别注意:不支持keyboard-interactive认证方式,必须从AuthenticationMethods中移除。

PAM配置

在/etc/pam.d/sshd或system-auth中添加:

account required pam_slurm_adopt.so

配置注意事项:

  1. 该模块应放在account栈的最后位置
  2. 需要使用"-"前缀防止模块缺失导致系统锁定
  3. 必须禁用pam_systemd模块以避免冲突

高级配置选项

管理员访问控制

可通过组合其他PAM模块实现管理员特殊访问权限:

  1. pam_access方案
account sufficient pam_slurm_adopt.so
account required pam_access.so
  1. pam_listfile方案
account sufficient pam_listfile.so item=group sense=allow file=/path/to/allowed_groups
account required pam_slurm_adopt.so

模块参数配置

pam_slurm_adopt支持多种行为控制参数:

account sufficient pam_slurm_adopt.so action_no_jobs=deny action_unknown=newest

主要参数说明:

| 参数 | 说明 | 可选值 | |------|------|--------| | action_no_jobs | 无作业时的行为 | ignore, deny(默认) | | action_unknown | 无法确定源作业时的行为 | newest(默认), allow, deny | | disable_x11 | 禁用X11转发 | 0(默认), 1 | | log_level | 日志级别 | 参考SlurmdDebug |

系统集成注意事项

防火墙配置

确保slurmd服务在所有可能发起SSH连接的IP地址上可访问,特别是登录节点。

SELinux集成

SELinux可能与pam_slurm_adopt产生冲突,需要适当配置类型强制规则使其协同工作。

典型问题解决方案

用户会话管理

如果需要pam_systemd的功能(如/run/user/$UID),可通过以下脚本实现:

Prolog脚本

loginctl enable-linger $SLURM_JOB_USER

TaskProlog脚本

echo "export XDG_RUNTIME_DIR=/run/user/$SLURM_JOB_UID"

Epilog脚本

# 检查是否为该用户的最后一个作业
loginctl disable-linger $SLURM_JOB_USER

限制与注意事项

  1. 仅支持publickey和password认证方式
  2. 需要正确配置cgroups子系统
  3. 在多作业情况下可能无法准确识别源作业
  4. 在共享文件系统环境中需要特别注意模块加载问题

通过合理配置pam_slurm_adopt,可以显著提升Slurm集群的安全性和资源管理效率,确保计算节点只被合法作业使用,并实现完整的进程生命周期管理。

slurm Slurm: A Highly Scalable Workload Manager slurm 项目地址: https://gitcode.com/gh_mirrors/sl/slurm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

段琳惟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值