Linux SSH 防御:设定 SSH 用户登录黑名单策略

作者:袖梨 2026-07-13
配置 SSH 用户登录黑名单需在 /etc/ssh/sshd_config 中使用 DenyUsers 指令(复数形式),支持空格分隔多用户及 username@ip/CIDR 格式限定来源,优先级高于 AllowUsers,配置后须 sshd -t 验证并 systemctl restart sshd 生效。

配置 SSH 用户登录黑名单,核心是用 DenyUsers 指令在 /etc/ssh/sshd_config 中明确禁止特定用户通过 SSH 登录。它不替代白名单,而是精准阻断已知风险账户(如测试账号、离职人员账号、默认账户),且不影响其本地或服务调用行为。

正确写入 DenyUsers 规则

编辑 /etc/ssh/sshd_config,在任意非注释行添加:

  • 语法必须是 DenyUsers(注意复数 s),不能拼成 DenyUser
  • 多个用户名用空格分隔,例如:DenyUsers guest testuser daemon
  • 支持限定来源 IP,格式为 username@ip[email protected].*,也可用 CIDR(如 [email protected]/8
  • 切勿写在以 # 开头的注释行之后——配置不会生效

理解优先级与冲突规避

SSH 访问控制按固定顺序判断:先查 DenyUsers,命中即拒绝,不再继续;未被拒绝的,再看是否在 AllowUsers 中。因此:

  • 若一个用户同时出现在 DenyUsersAllowUsers 中,仍会被拒绝
  • 如果启用了 AllowUsers 白名单,未列入的用户本就无法登录,此时 DenyUsers 对他们无实际作用
  • 真正需要 DenyUsers 的场景,通常是未启用白名单、但需快速封禁个别高危账号时

生效前必须验证与重启

配置保存后不能直接生效,必须完成两步:

  • 先做语法检查:sudo sshd -t,输出 Config test was successful 才表示无误
  • 然后执行 sudo systemctl restart sshd(不是 reload)——部分旧版 OpenSSH 的 reload 不重载用户控制策略
  • 切忌在当前 SSH 会话中执行 restart,否则可能被踢出;务必保留本地终端、VNC 或另一管理员连接

配合日志确认拦截效果

启用后可通过日志验证是否生效:

  • 查看拒绝记录:sudo journalctl -u sshd | grep "not allowed because of DenyUsers" 或搜索 refuseddenied
  • 常见错误提示包括:User user1 from 192.168.1.5 not allowed because listed in DenyUsers
  • 若没看到对应日志,说明配置未加载或用户未触发匹配(比如输错用户名、IP 不匹配)

相关文章

精彩推荐