如何防止SLURM通过sbatch、srun提交的任务写入/home目录?
SLURM作业禁止写入/home目录相关问题解答
SLURM原生能力说明
SLURM作为集群调度器本身不提供文件系统操作的拦截、管控或监控能力,它的核心职能是资源分配、作业调度和生命周期管理,不会介入作业进程的系统调用层面的操作,所以原生无法实现禁止作业写入/home目录的需求,也没有内置的这类IO操作的监控功能。
基于SLURM周边配置的可选实现(局限性较高)
- 可以配置
SubmitPlugins提交钩子,在作业提交时扫描作业脚本的明文内容,拦截显式写/home目录的命令,但这种方案无法识别变量拼接路径、二进制程序内部硬编码路径等场景,误判和漏判概率很高。 - 可以通过SLURM配置强制作业默认工作目录指向临时/scratch路径,但用户仍可在作业脚本或程序中主动切换到/home目录执行写入,无法完全禁止。
成熟的替代解决方案
1. 文件系统层面管控(最推荐,实现简单可靠性高)
- 计算节点侧将/home目录设置为只读挂载:仅在登录节点开放/home的读写权限,所有计算节点的/home统一用只读方式挂载,无论作业是通过
sbatch还是srun提交,都无法写入/home目录,用户仅能写入专属的scratch目录或者集群共享存储路径。 - 配置ACL访问控制规则:如果不能直接设置只读挂载,可以用
setfacl命令给slurm作业所属的用户组配置/home目录的只读权限,示例命令:setfacl -R -m g:slurm:r-x /home/*,所有slurmd启动的作业进程都会继承该组权限,无法写入/home。
2. 系统安全模块管控(灵活性更高)
配置AppArmor或SELinux策略,给slurmd启动的所有作业进程定义安全规则,明确禁止对/home目录的写入权限,支持更细粒度的规则配置,比如允许读取/home下的配置文件、仅禁止写入操作,或者仅禁止写入特定用户的/home子目录。
3. 监控审计方案(仅需监控时使用)
- 部署auditd审计工具,配置规则监控所有对/home目录的写入系统调用,过滤父进程为
slurmd、或者UID属于作业用户的操作,留存完整的操作日志,也可以配置告警规则,检测到违规写入时自动暂停对应SLURM作业。 - 用inotify/fanotify实时监控/home目录的写入事件,过滤SLURM作业相关进程的操作,实现实时监控和告警。
内容的提问来源于stack exchange,提问作者ajthealchemist
相关产品推荐
相关产品推荐

