权限边界管什么
边界由主体(哪个账号或流水线)、客体(哪些目标主机与分组)、动作(只读、变更、破坏性)、时间(窗口与有效期)四要素构成。批量场景最典型的失控是共享高权账号:所有人用同一个 root 或管理员账号执行,出事后无法归因到人,撤回权限也无从下手。合理做法是建专用执行账号,按目标分组授权,只读与变更动作分开提权,凭据集中存放并定期轮换,临时提权设到期时间。
基本信息
| 四要素 | 主体账号、目标范围、动作等级、生效时间 |
|---|---|
| 动作分级 | 只读(查询与采集)、变更(配置与服务操作)、破坏(删除与清空) |
| 落地手段 | 专用执行账号、提权白名单、凭据集中管理、按分组授权 |
| 关键约束 | 批量账号的权限范围等于其泄露后的影响范围 |
典型使用场景
- 分层授权:值班人员只读,变更动作由负责人或流水线执行
- 外部协作:外包或第三方只能触及指定分组主机
- 流水线账号收敛:持续集成执行账号仅具备下发与回读权限
- 环境隔离:生产与测试使用不同凭据,避免误指向
- 临时提权:应急期间授予限时权限,到期自动回收
- 审计留痕:每次批量操作可追溯到具体主体与授权依据
最小权限提权示例
最小权限提权示例
# 专用执行账号只授予必需命令(sudoers 片段示意,路径按发行版调整)
# /etc/sudoers.d/batch-ops
Cmnd_Alias BATCH_READ = /bin/systemctl status *, /usr/bin/journalctl *
Cmnd_Alias BATCH_CHG = /bin/systemctl restart app.service
batchops ALL=(root) NOPASSWD: BATCH_READ
batchops ALL=(root) PASSWD: BATCH_CHG # 变更类动作仍需二次凭据
# 改完务必校验语法,写坏 sudoers 会导致提权失败甚至无法登录
visudo -c -f /etc/sudoers.d/batch-ops
# 执行侧:只读动作走 -n 免交互,变更动作单独申请
# ssh -i /etc/batch/id_ed25519 batchops@host 'sudo -n systemctl status app'
# 轮换与回收:凭据集中存放,离职与项目结束后按清单回收要素与失控后果
| 要素 | 控制方式 | 常见失误 | 失控后果 |
|---|---|---|---|
| 主体 | 每人独立账号或独立流水线凭据 | 共享管理员账号 | 无法归因,权限无法按人回收 |
| 目标范围 | 按分组授权,名单限定 | 授权到全量主机 | 一台误操作扩散到全部 |
| 动作等级 | 只读与变更分开提权 | 一律豁免密码 | 只读账号被滥用做变更 |
| 时间 | 窗口内有效,到期回收 | 临时授权不设期限 | 临时权限变成长期后门 |
| 凭据 | 集中管理与轮换 | 硬编码在脚本中 | 脚本被读即凭据泄露 |
只读与变更分开授权,除了安全考虑,也便于审计:只读动作可以宽松批准并大规模使用,变更动作集中留痕,事后统计异常操作时信噪比更高。
把口令或私钥写进脚本、计划任务、流水线变量明文里,等于把权限随文件一起分发。凭据应放在集中管理位置,通过运行时注入或短期凭证获取,并限制读取者范围。