最直接有效的方式是结合pam_limits.so模块与limits.conf中的maxlogins项,通过在PAM session段启用该模块并配置hard maxlogins值(如alice hard maxlogins 2),可限制普通用户并发登录数,root默认不受限,需重新登录生效。

在 Linux 运维中,限制普通用户最大并发登录数最直接有效的方式是结合 pam_limits.so 模块与 /etc/security/limits.conf 中的 maxlogins 项。该机制作用于 SSH、本地终端(tty)、图形界面等所有 PAM 登录会话,对 root 用户默认不生效,适合生产环境精细管控。
确保 pam_limits.so 在登录服务中启用
该模块必须显式加载,否则 limits.conf 的任何设置均无效:
- Debian/Ubuntu 系统:检查并编辑 /etc/pam.d/common-session,确认存在且未被注释的行:
session required pam_limits.so - RHEL/CentOS/Fedora 系统:检查 /etc/pam.d/system-auth 或 /etc/pam.d/sshd(若只管 SSH),添加相同行
- 关键点:必须放在 session 段;不能写在 auth 或 account 段;避免重复加载;SSH 需要
UsePAM yes在/etc/ssh/sshd_config中启用
在 limits.conf 中配置 maxlogins 限制
编辑 /etc/security/limits.conf 或新建 /etc/security/limits.d/90-login-limit.conf,按四字段格式添加规则:
-
domain:用用户名(如
alice)、组名(如@devs)或通配符*(所有普通用户) -
type:推荐用
hard(不可绕过)或-(软硬同设) -
item:填
maxlogins(注意不是maxsyslogins,后者已废弃) -
value:整数,如
3表示最多 3 个活跃登录会话
示例:
alice hard maxlogins 2 @qa - maxlogins 1 * hard maxlogins 3
说明:第一行限制用户 alice 最多 2 个并发登录;第二行对 qa 组统一限为 1;第三行对所有普通用户设上限为 3。
验证与注意事项
配置后需新开会话才能生效,不能仅 reload sshd:
- 用户需完全退出当前所有会话(如关闭所有 SSH 窗口、注销图形桌面),再重新登录
- 验证命令:
ulimit -a | grep "max logins"(显示 soft 值),或loginctl list-sessions --no-legend | awk '{print $3}' | grep ^username查当前活跃会话 - root 用户默认不受
maxlogins限制,如需控制,须显式添加root hard maxlogins 2并确保内核支持(部分发行版需开启deny_root选项) - 该限制针对“登录会话”本身(即每个
sshd子进程 + 对应 shell),不统计后台 daemon 或 systemd --user 实例;若用户大量使用 screen/tmux,建议同步限制nproc防止绕过


















