白名单的语义
AllowUsers 与 AllowGroups 是 OpenSSH 的访问控制指令:一旦出现,未被列出的账户将被直接拒绝登录。AllowUsers 还能按『用户@来源地址』做双重限制,把登录收敛到指定网段。相比在防火墙侧做限制,它在认证层就能生效,且不依赖网络拓扑;代价是配置写错时的现象通常是『所有人突然都登不上』,因此改完必须按用户与来源两个维度验证。
基本信息
| 配置文件 | /etc/ssh/sshd_config(或 conf.d 下的包含文件) |
|---|---|
| 按用户 | AllowUsers 用户名、AllowUsers 用户@来源 |
| 按组 | AllowGroups 组名 |
| 拒绝项 | DenyUsers、DenyGroups |
| 条件块 | Match Group/User/Address 后跟块内指令 |
| 校验与生效 | sshd -t && systemctl reload sshd |
典型使用场景
- 把运维登录限制在管理网段内,公网只保留跳板机
- 只允许特定账户登录生产机,杜绝共享账号
- 对高权限账户收紧来源,普通账户不受影响
- 批量交付时统一下发登录白名单,符合最小授权要求
- 排查异常登录来源时确认白名单是否被绕过
配置示例
配置示例
# /etc/ssh/sshd_config
# AllowUsers deploy@10.0.0.* backup@10.0.1.5 # 用户与来源双维度限定
# AllowGroups ops admins # 按组放行
# DenyUsers guest # 显式拒绝的账户
sshd -T | grep -iE 'allowusers|allowgroups|denyusers' # 查看最终生效值
sshd -t && systemctl reload sshd # 语法校验后重载按组下的条件收敛
按组下的条件收敛
# Match 块必须放在文件靠后位置,块内指令只对匹配的会话生效
Match Group ops
PermitRootLogin no # 运维组成员也不允许直接登录 root
X11Forwarding no
AllowTcpForwarding no # 收窄隧道能力,按业务需要决定
Match Address 10.0.0.0/8
PasswordAuthentication no # 内网来源也强制密钥认证指令与效果
| 指令 | 匹配维度 | 典型现象 |
|---|---|---|
| AllowUsers 用户 | 账户名 | 未列出账户登录被拒 |
| AllowUsers 用户@地址 | 账户与来源 | 来源不符时即使口令正确也被拒 |
| AllowGroups 组 | 组成员关系 | 账户不在组内即拒绝 |
| DenyUsers | 账户名 | 显式拒绝,优先级处理按实现 |
| Match 块 | 用户/组/地址/主机 | 块内指令只对匹配会话生效 |
| 未配置任何白名单 | 默认全部放行 | 加固不到位,基线核查常被判不合格 |
白名单配置错误时的表现是全部登录被拒绝:先在测试账户与测试来源上验证,再考虑批量下发,并保留一个已登录会话作为回退通道。
Match 块之后的全局指令会被当作块内配置处理:保持 Match 放在文件后部,避免影响其他设置。