集中管理是为了让轮换可执行
凭据散落在脚本、配置文件、定时任务与个人手里时,更换一次口令要改动的位置无法穷举,结果是没人敢换——只能长期沿用同一套口令。集中管理的价值不在于「存起来」,而在于建立唯一来源:使用者从集中点获取而不再本地保存,因此轮换只需改一处;同时每次取用都有记录,可以回答「谁在什么时间取过哪份凭据」。轮换的可行性,才是集中管理的核心收益。
基本信息
| 适用对象 | 服务器口令与密钥、数据库账号、接口调用凭据 |
|---|---|
| 核心原则 | 唯一来源、按需取用、全程留痕、可独立轮换 |
| 取用方式 | 由执行环境运行时获取,而非写入代码与配置文件 |
| 轮换要求 | 轮换过程不影响在跑任务,且失败可回退 |
| 权限要求 | 凭据的读写范围应分开授权,读取也需要审计 |
建立机制的顺序
- 先做清点:把现有凭据的存在位置列出来,包括最容易被忘掉的定时任务与旧脚本
- 再把取用方式改掉:让执行环境在运行时取凭据,代码与配置里不再出现真实值
- 然后收敛权限:读取范围按任务划分,避免一个入口能取到全部凭据
- 接着定轮换周期:按凭据影响面分级,影响越大周期越短,并标记负责方
- 最后做演练:实际执行一次轮换,验证在跑任务不受影响、失败能回退
- 关键时机强制轮换:人员离开、怀疑泄露、系统迁移都必须立即执行
发现硬编码凭据
发现硬编码凭据
grep -rIl --exclude-dir=.git -E 'password|passwd|secret|token' /opt/scripts 2>/dev/null | head # 粗筛可疑文件
grep -rIn --exclude-dir=.git -E '(password|secret|token)\s*[:=]' /etc/app 2>/dev/null | head # 配置文件里的明文项
crontab -l | grep -v '^#' # 定时任务里常见内联凭据
systemctl cat myapp | grep -i 'Environment' # 服务单元中的环境变量
history | grep -i -E 'mysql|sshpass' # 交互历史里的口令痕迹凭据类型与轮换要点
| 凭据类型 | 轮换难点 | 要点 |
|---|---|---|
| 操作系统口令 | 多处缓存与依赖 | 先清缓存与自动化引用再改 |
| 登录密钥 | 公钥需分发到多台 | 新旧并存期内完成替换 |
| 数据库账号 | 连接池需重连 | 轮换后触发连接重建 |
| 接口调用凭据 | 第三方限制更换频率 | 按平台能力规划节奏 |
| 证书类凭据 | 有效期刚性 | 提前启动并验证链完整 |
轮换窗口内通常需要新旧凭据短暂并存,这本身是风险敞口。做法是把并存期压到最短,并在并存期结束后确认旧凭据确实失效——很多环境的问题恰恰是旧凭据没人回收,长期保持可用。
集中点自身是高价值目标:它被攻破等同于全部凭据泄露。访问集中点的身份需要比操作目标更强的保护,取用日志要与提权日志一起审计,读写权限也应分离。