Linux/Slurm集群用户登录管理指南(管理员版)

作为 Linux 服务器和 Slurm 高性能计算集群的管理员,有效地管理用户访问、权限和资源是确保系统安全、稳定和资源公平分配的核心任务。本文将介绍一套完整的用户管理方法,从禁止登录到作业控制,再到服务器维护,为你提供一站式解决方案。


一、 用户登录与访问控制

核心任务:禁止用户登录系统

当需要临时或永久禁止某个用户登录时,有多种方法可以实现。

方法一:修改用户默认 Shell (最常用)

这是最推荐的方法,它会阻止所有类型的 Shell 登录(SSH、本地终端等),并且在用户尝试登录时给予明确提示。

操作步骤:
使用 usermod 命令,而不是手动编辑 /etc/passwd,这样更安全。

# -s, --shell <SHELL>  指定用户的默认登录Shell为 /sbin/nologin
sudo usermod -s /sbin/nologin <username>

恢复方法:
将用户的 Shell 修改回 /bin/bash 即可。

sudo usermod -s /bin/bash <username>
方法二:锁定用户密码 (passwd -l)

此方法会锁定密码,使其无法通过密码验证。但请注意:如果用户配置了 SSH 免密登录,此方法无法阻止他们通过密钥登录。

操作步骤:

sudo passwd -l <username>

恢复方法:

sudo passwd -u <username>
方法三:设置账户过期时间 (chage)

通过将账户过期日期设置为一个过去的时间,可以立即禁用该账户。非常适合管理临时账户。

操作步骤:

# -E, --expiredate  将账户过期日期设为1970年1月1日
sudo chage -E 1970-01-01 <username>

恢复方法:
将过期日期设为 -1,表示永不过期。

sudo chage -E -1 <username>

二、 用户密码与认证管理

修改用户密码

作为管理员,你可以强制为任何用户重置密码。

sudo passwd <username>

执行后,系统会提示你输入两次新密码。新密码会立即生效。

对于集群用户,还需要额外的操作,即,将修改后的密码同步到集群的所有的机器上。
比如我所用的集群,是用NIS数据库来管理用户的,那么我就需要:

cd /var/yp
sudo make

配置 SSH 登录方式

管理员可以通过修改 SSH 服务的配置文件 /etc/ssh/sshd_config 来全局控制认证策略。

重要提示:修改后,必须重启 SSH 服务才能生效:sudo systemctl restart sshd

策略1:强制使用密钥登录(禁止密码登录)

这是最安全的推荐实践。

# /etc/ssh/sshd_config

PubkeyAuthentication yes
PasswordAuthentication no
策略2:强制使用密码登录(禁止密钥登录)

在特定安全策略下可能需要。

# /etc/ssh/sshd_config

PubkeyAuthentication no
PasswordAuthentication yes
策略3:要求密钥 + 密码双重认证 (2FA)

提供最高级别的安全性。用户登录时,必须先验证密钥,然后再输入自己的账户密码。

# /etc/ssh/sshd_config

PubkeyAuthentication yes
PasswordAuthentication yes
# 指定需要同时满足两种认证方法
AuthenticationMethods publickey,password

三、 Slurm 作业管理

禁止用户提交新作业

阻止用户提交任何新作业,但不影响已在运行的作业。

# 需要 Slurm 管理员权限
sudo sacctmgr modify user where name=<username> set MaxSubmitJobs=0

恢复方法:将 MaxSubmitJobs 设为 -1(无限制)或一个具体数字。

sudo sacctmgr modify user where name=<username> set MaxSubmitJobs=-1

挂起与恢复作业

挂起 (Suspend)

挂起操作会暂停正在运行的作业,释放 CPU 资源,但作业依然保留在内存中。这对于临时腾出计算资源非常有用。

挂起单个作业:

scontrol suspend <job_id>

挂起某个用户的所有作业:

# 使用 squeue 查找用户的所有作业ID,然后传递给 scontrol
squeue -u <username> -h -o "%i" | xargs -I {} scontrol suspend {}

挂起所有用户的全部作业:

squeue -h -o "%i" | xargs -I {} scontrol suspend {}
恢复 (Resume)

恢复被挂起的作业,使其从暂停处继续运行。

恢复单个作业:

scontrol resume <job_id>

恢复某个用户的所有作业:

squeue -u <username> -h -o "%i" | xargs -I {} scontrol resume {}

恢复所有作业:

squeue -h -o "%i" | xargs -I {} scontrol resume {}

四、 服务器维护与批量用户控制

完整流程:彻底禁用一个集群用户

  1. [Slurm] 取消用户所有作业scancel -u <username>
  2. [Slurm] 禁止用户提交新作业sudo sacctmgr modify user where name=<username> set MaxSubmitJobs=0
  3. [Linux] 踢出当前会话:如果用户正登录着,强制踢出。这会终止用户所有进程。
    # 使用 who 或 w 查看用户登录情况(可选)
    who
    # 强制终止该用户的所有进程,从而实现踢出效果
    sudo pkill -u <username>
    
  4. [Linux] 阻止未来登录sudo usermod -s /sbin/nologin <username>

维护模式:临时禁止所有非root用户登录

当你需要进行系统维护,不希望普通用户登录干扰时,可以使用 nologin 文件快速实现,无需关机或重启服务。

开启维护模式(禁止登录):
创建一个 /etc/nologin 文件。当此文件存在时,只有 root 用户可以登录。普通用户登录时,会看到该文件的内容。

# 创建文件并写入提示信息,告知用户服务器正在维护
echo "服务器正在进行紧急维护,预计1小时后恢复。请稍后重试。" | sudo tee /etc/nologin

关闭维护模式(恢复登录):
只需删除该文件即可。

sudo rm /etc/nologin

所有非 root 用户即可恢复正常登录。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐