AllowGroups 是 SSH 逻辑访问控制机制,需结合组织建模、系统权限、网络隔离与运行环境分离才能实现企业级分层物理隔离。

AllowGroups 本身不提供“物理隔离”,它只是 SSH 服务端的逻辑访问控制机制,用于按用户所属组决定是否允许登录。所谓“按企业组织架构分层的 SSH 物理隔离准入”,需将 AllowGroups 作为策略中枢,再结合系统级分组、目录权限、网络隔离与运行环境分离,才能形成真正可落地的分层管控体系。
一、基于组织架构建模用户组体系
先梳理企业实际部门/角色结构(如:infra、devops、finance、hr、audit),每个层级对应一个 Linux 用户组,避免使用泛化组名(如 users、staff)。组之间不嵌套,保持扁平清晰:
- 用 groupadd 创建专属组:sudo groupadd infra-admins、sudo groupadd finance-readers
- 禁止普通用户加入高权限组(如 infra-admins):仅由管理员通过 usermod -aG infra-admins alice 手动授权
- 为审计合规保留独立组:sudo groupadd audit-logonly,该组用户仅能执行只读命令(配合 sudoers 限制)
二、在 sshd_config 中绑定组与访问能力
编辑 /etc/ssh/sshd_config,启用 AllowGroups 并严格限定范围。注意:一旦启用,未列组成员一律拒绝登录,包括 root(除非 root 属于某允许组):
- 只放行业务相关组:AllowGroups infra-admins devops-sre finance-readers
- 禁用 DenyGroups 或其他 Allow* 规则,防止策略冲突(DenyGroups 优先级更高,易导致误拒)
- 若需区分登录来源,可配合 Match 块实现组+IP 组合控制:
Match Group infra-admins,Address 10.10.0.0/16
PermitRootLogin no
MaxAuthTries 3
三、配合系统级隔离强化“物理感”
仅靠 AllowGroups 不足以实现环境隔离,必须叠加以下措施,让不同组实质运行在隔离上下文中:
- 家目录强制分离:为每组创建独立挂载点(如 /home/infra、/home/finance),用 bind mount 或独立磁盘分区,设置 chmod 750 /home/infra,并确保组内用户家目录属组正确
- Shell 与路径锁定:为 finance-readers 组用户统一设为 /usr/bin/rbash(受限 shell),并在其 ~/.bashrc 中硬编码 PATH=/usr/local/finance-bin:/bin:/usr/bin,屏蔽非授权命令路径
- 禁止跨组进程通信:启用 SELinux(RHEL/CentOS)或 AppArmor(Ubuntu),为各组定义域策略,例如限制 infra-admins 进程不得 connectto finance-readers 的本地 socket
四、验证与运维闭环
配置不是一次性的,需建立可持续验证机制:
- 每次修改后执行 sudo sshd -t 检查语法,再 sudo systemctl reload sshd(非 restart,避免断连)
- 用非 root 账户实测登录:ssh -o PreferredAuthentications=password user@host,确认仅目标组可通
- 定期导出组成员关系:getent group | grep -E '^(infra|finance|audit)',比对 HR 系统工号清单,发现离职未清理账号可快速响应
- 日志聚焦审计:grep 'Failed password' /var/log/auth.log | awk '{print $9}' | sort | uniq -c,重点监控被 AllowGroups 放行但频繁失败的组


















