You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Slurm用户执行scancel取消自身作业及绕过Slurm?

问题翻译

在部署有Slurm的HPC环境中,用户通过SSH登录后会自动执行~/.profile中一段不可修改的脚本,脚本内容如下:

srun -A <ACCOUNT_NAME> -p <PARTITION> --mem=<MEMORY> --time=HH:MM:SS -N <NUM_NODES> --gres=gpu:<NUM_GPU> --pty /bin/bash -i

该脚本用于自动提交交互式bash作业。现咨询两个问题:

  1. 是否可以阻止用户绕过Slurm直接使用登录节点的shell?
  2. 是否可以阻止用户执行scancel命令?
解决方案

一、阻止用户绕过Slurm

1. 依赖Slurm环境变量强制校验

srun启动的交互式shell会自动注入SLURM_JOB_ID等Slurm专属环境变量,可在系统级bash配置文件(如/etc/bash.bashrc或/etc/profile.d/slurm_enforce.sh)中添加校验逻辑,若检测不到Slurm环境变量则强制退出:

# 检查是否处于Slurm作业环境
if [ -z "$SLURM_JOB_ID" ]; then
    echo "错误:必须通过Slurm交互式作业访问系统,即将退出。" >&2
    exit 1
fi

这种方式能覆盖所有用户的bash会话,且用户无法修改系统级配置。

2. 限制计算节点的SSH访问

确保用户只能登录登录节点(Head Node),禁止直接SSH连接计算节点:

  • 修改计算节点的sshd_config,添加AllowUsers slurm(仅允许Slurm服务用户登录),或通过PAM模块限制登录源IP为登录节点。
  • 在Slurm配置中设置计算节点为State=ALLOCATED或启用NodeName=... NoLogin=YES,阻止用户直接登录。

3. 限制登录节点的本地资源权限

即使用户绕过Slurm,也无法在登录节点执行有效计算:

  • 将登录节点的用户默认shell改为受限shell(rbash),限制用户执行特定命令或访问系统资源。
  • 用cgroup对登录节点的普通用户进程设置严格的CPU、内存限额,让本地shell无法承载计算任务。

二、阻止用户执行scancel命令

1. 基于Slurm权限配置精细控制

如果仅需阻止用户取消他人作业,Slurm默认已限制用户只能取消自己的作业;若需完全禁止用户取消作业,可通过QOS或用户权限配置实现:

  • 创建禁止取消作业的QOS:
    sacctmgr create qos qos_no_cancel AllowCancel=no
    
  • 将目标用户绑定到该QOS:
    sacctmgr modify user <用户名> set DefaultQOS=qos_no_cancel
    

2. 修改scancel程序权限

直接修改scancel的文件权限,仅允许root和Slurm管理员组执行:

chmod 750 /usr/bin/scancel
chgrp slurm /usr/bin/scancel

注意:此方法会完全禁止普通用户使用scancel,包括取消自己的作业,需根据业务场景谨慎使用。

3. 禁用scancel的别名(辅助手段)

在系统级bash配置中添加别名,拦截scancel命令的调用(但用户仍可通过绝对路径绕过,需配合权限控制):

alias scancel='echo "禁止执行scancel命令,请联系管理员处理作业。"'

内容的提问来源于stack exchange,提问作者klaus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:54:34