Slurm集群中的PAM安全模块:pam_slurm_adopt详解
slurm Slurm: A Highly Scalable Workload Manager 项目地址: https://gitcode.com/gh_mirrors/sl/slurm
概述
pam_slurm_adopt是Slurm工作负载管理器中的一个PAM(可插拔认证模块)安全组件,主要用于增强集群计算节点的访问控制。该模块通过将SSH会话与用户作业关联,实现了以下核心功能:
- 访问控制:只允许拥有运行中作业的用户登录计算节点
- 进程跟踪:将SSH会话及其衍生进程纳入作业管理范围
- 资源清理:确保作业结束时所有相关进程被正确终止
核心工作原理
当用户尝试SSH登录计算节点时,pam_slurm_adopt会执行以下检查流程:
- 识别发起SSH连接的源作业
- 将用户连接"收养"到作业的"external"步骤中
- 如果检查失败,返回相关错误信息拒绝访问
安装指南
从源码安装
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
配置注意事项:
- 该模块应放在account栈的最后位置
- 需要使用"-"前缀防止模块缺失导致系统锁定
- 必须禁用pam_systemd模块以避免冲突
高级配置选项
管理员访问控制
可通过组合其他PAM模块实现管理员特殊访问权限:
- pam_access方案:
account sufficient pam_slurm_adopt.so
account required pam_access.so
- 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
限制与注意事项
- 仅支持publickey和password认证方式
- 需要正确配置cgroups子系统
- 在多作业情况下可能无法准确识别源作业
- 在共享文件系统环境中需要特别注意模块加载问题
通过合理配置pam_slurm_adopt,可以显著提升Slurm集群的安全性和资源管理效率,确保计算节点只被合法作业使用,并实现完整的进程生命周期管理。
slurm Slurm: A Highly Scalable Workload Manager 项目地址: https://gitcode.com/gh_mirrors/sl/slurm
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考