强制系统账号使用独立密钥对实现唯一访问,需策略层、服务层和账户层协同控制:绑定专属密钥、禁用密码登录、服务端强制校验、阻断复用旁路、实施生命周期管控。

强制系统账号使用独立密钥对实现唯一访问,核心在于切断共享凭据路径、确保每个账号绑定专属密钥,并在认证环节强制校验。这不是单纯生成一对密钥就能完成的事,而是需要策略层、服务层和账户层协同控制。
明确密钥归属与隔离范围
系统账号(如 Linux 的 service account、Windows 的托管服务账户或本地服务账户)必须与具体身份强绑定,不能复用同一密钥或共用密钥存储目录。例如:
- Linux 下为每个服务用户(如
mysql、nginx)单独创建~/.ssh目录,仅存放其专属私钥,权限严格设为700(目录)和600(私钥); - Windows 中避免使用 Local System 或 Network Service 这类泛化账户运行关键服务,改用专用域账户或 Managed Service Account(MSA),其密钥由 Active Directory 自动轮换并绑定至设备;
- 禁用所有账号的密码登录能力,只保留密钥认证通道,防止密钥被绕过。
在服务配置中硬性启用密钥验证
光有密钥不等于生效,必须在服务端强制启用且拒绝降级。常见操作包括:
- SSH 服务:在
/etc/ssh/sshd_config中设置PubkeyAuthentication yes,同时关闭PasswordAuthentication no和KbdInteractiveAuthentication no; - 数据库服务(如 PostgreSQL):在
pg_hba.conf中将对应用户认证方式设为cert或scram-sha-256配合客户端证书,而非md5; - Windows 服务:使用
sc.exe config [servicename] obj= "DOMAIN\svc-account" password= ""设置服务登录账户,并通过组策略禁用该账户的交互式登录权限,仅允许服务启动上下文调用。
阻断密钥复用与免密绕过路径
很多“唯一访问”失效,是因为存在未被覆盖的旁路。需主动清理这些风险点:
- 删除所有账号的
~/.ssh/authorized_keys中重复出现的公钥,尤其警惕运维人员通用密钥被写入多个账户; - 禁用 SSH 的
no-touch-required、no-user-rc等免交互标记,防止密钥被用于无约束的自动化调用; - 对 Windows 环境,关闭 Kerberos 的 S4U2Self 扩展或限制 SPN 注册权限,避免攻击者利用已泄露票据伪造其他服务身份。
建立密钥生命周期管控机制
密钥不是一次配置就永久有效,必须配套管理流程:
- 为每个系统账号配置密钥轮换周期(如每90天),并自动触发重签与部署(可通过 Ansible 或 Azure Automation 实现);
- 记录密钥指纹与绑定关系到 CMDB 或 IAM 平台,支持快速审计“某密钥是否只关联一个账号”;
- 服务启动时校验密钥有效性(如检查证书链、OCSP 响应、CRL 状态),失败则拒绝启动,不降级回退。











