linux ssh登录权限控制核心是精准授权,通过allowusers/denyusers白名单、禁用密码启用密钥认证、match条件化策略、pam访问控制及fail2ban动态封禁实现分层防护。

Linux 系统中,SSH 登录权限控制的核心在于限制谁可以登录、用什么方式登录、能执行哪些操作。关键不是“禁用 SSH”,而是精准授权——只让必要的人、以必要的方式、访问必要的资源。
限制可登录用户(AllowUsers / DenyUsers)
在 /etc/ssh/sshd_config 中配置白名单或黑名单,是最直接有效的准入控制方式。
- 只允许特定用户登录:添加 AllowUsers alice bob@192.168.1.*,支持用户名、用户名@IP 模式,多个用户空格分隔
- 禁止高危账户登录:添加 DenyUsers root daemon nobody,尤其建议禁用 root 密码登录(但可保留密钥登录)
- 修改后必须运行 sudo systemctl reload sshd 生效,不要用 restart,避免断连
禁用密码登录,强制使用密钥认证
密码易被爆破,密钥认证更安全且可精细管理。启用前务必确保至少一个密钥已成功登录,避免锁死。
- 编辑 /etc/ssh/sshd_config,设 PasswordAuthentication no 和 PubkeyAuthentication yes
- 用户需在自己家目录下正确放置 ~/.ssh/authorized_keys,权限设为 600,目录为 700
- 可为不同密钥设置命令限制,例如在 authorized_keys 中加前缀:command=”/usr/bin/git-shell -c “$SSH_ORIGINAL_COMMAND””,no-port-forwarding,no-X11-forwarding ssh-rsa AAAA…
按用户或组限制登录方式与环境
通过 Match 块实现条件化策略,适合多角色场景(如运维、开发、审计账号)。
- 限制某用户仅能从内网登录:Match User monitor
AllowTcpForwarding no
X11Forwarding no
ForceCommand /usr/local/bin/monitor-shell - 限制某个组只能用密钥且不可交互:Match Group sftp-only
PasswordAuthentication no
ChrootDirectory /sftp/%u
ForceCommand internal-sftp - Match 块必须放在配置文件末尾,且每段以空行分隔
辅助手段:PAM 与 fail2ban 加强防护
SSH 配置是基础,PAM 和 fail2ban 提供运行时增强,堵住配置遗漏或新型攻击路径。
- 启用 PAM 登录限制:在 /etc/pam.d/sshd 中加入 auth [default=deny] pam_access.so accessfile=/etc/security/access.conf,然后在 access.conf 中定义规则,如 – : ALL EXCEPT wheel : 10.0.0.0/24
- 部署 fail2ban:安装后启用 sshd jail,自动封禁多次失败登录的 IP,默认 10 分钟,可调为永久或联动防火墙
- 注意:fail2ban 日志路径需与实际 SSH 日志一致(如 /var/log/auth.log 或 /var/log/secure),否则无法触发