安全加固
Jenkins 权限极高——能执行任意命令、持有所有凭证、直连集群。一次失守等于 CI/CD 供应链被控。安全加固的优先级高于功能扩展。
本篇目标:能识别 Jenkins 的主要攻击面,完成权限、凭证、脚本控制台、插件供应链和审计的加固。
1. 攻击面盘点
| 攻击面 | 风险 |
|---|---|
| 凭证库 | 拿到凭证 = 拿到代码/镜像/集群权限 |
/script 脚本控制台 | 可执行任意 Groovy,等于控制整个 Master |
| 插件 | 恶意/过时插件可植入后门 |
| 构建脚本 | 恶意仓库的 Jenkinsfile 可执行任意命令 |
| Web UI / API | 弱口令、未授权访问 |
$JENKINS_HOME 备份 | 备份泄露 = 凭证泄露 |
2. 权限加固(详见第 3 篇)
- 关闭匿名访问,禁用"任何人均可做任何事";
- 用 RBAC / Matrix 最小权限,普通用户不给
Overall/Administer; - 凭证按全局/文件夹分级,按需授权;
- 保留本地管理员兜底账号。
# 检查当前有哪些 Overall/Administer
# Manage Jenkins → Security → 查看授权策略中的 Administer 授权项
3. 凭证保护(详见第 4 篇)
- 凭证用专用 CI 账号,不用个人密码;
- 启用凭据绑定 + 日志打码,确保密码不出现在日志;
- 定期轮换,到期删除;
- 备份文件中的
secrets/与备份本体同等保护。
4. 脚本控制台(/script)风险
http://<jenkins>/script 是 Jenkins 的 Groovy 脚本控制台,能读取所有凭证、执行系统命令。只有管理员才能访问,且应:
- 检查授权策略中谁有
Overall/Administer; - 生产建议通过反代限制
/script路径只允许内网 IP 访问; - 审计脚本控制台的使用日志。
# Nginx 限制 /script 只允许跳板机访问
location ^~ /script {
allow 10.0.0.0/8;
deny all;
proxy_pass http://127.0.0.1:8080;
}
脚本控制台 = 最高权限后门
任何有 Overall/Administer 的人(包括被劫持的账号)都能通过脚本控制台执行任意代码。它是 Jenkins 安全的天花板——权限模型再好,一个 Administer 权限泄露就全盘失守。
5. 插件供应链安全
| 措施 | 说明 |
|---|---|
| 只装可信来源插件 | 官方 Update Center / 企业私有插件仓库 |
| 不装来路不明的插件 | 警惕第三方"破解""增强"插件,可能带后门 |
| 及时更新已装插件 | 官方安全公告,尤其含 CVE 的插件 |
| 更新前验证 | 测试实例先验证,再更新生产 |
| 审计已装插件 | 定期清理不再使用的插件 |
| 锁定版本 | 生产用固定插件版本(plugins.txt / 自定义镜像) |
# 关注 Jenkins 官方安全公告
# https://www.jenkins.io/security/advisories/
6. 构建脚本安全
恶意仓库可以通过 Jenkinsfile 执行任意命令(在 Agent 上)。缓解:
- 限定 Agent 来源:只给可信仓库建 Job,用
agent { label }限定在受控 Agent; - 沙箱:
Manage Jenkins → In-process Script Approval,把运行在 master 的脚本限制在沙箱; - 凭证最小暴露:
withCredentials只在块内暴露,不传给不可信步骤; - Agent 隔离:K8s 动态 Agent 每次独立 Pod,天然隔离(见第 10 篇);
- 准入:Agent 上禁用写
$JENKINS_HOME、禁用直接访问凭证文件。
7. 审计与日志
| 手段 | 作用 |
|---|---|
| Audit Trail 插件 | 记录管理操作(建 Job、改权限、更新插件) |
| Credentials 审计 | 记录凭证读取和使用 |
| 构建日志保留 | 保存日志用于事后调查 |
| 访问日志(反代层) | 记录 Web 访问来源 |
// 审计:谁在什么时候改了权限
# Audit Trail 插件会在 Manage Jenkins → 记录
# 也建议把 Jenkins 访问日志接入日志平台(ELK / Loki)
8. 安全加固清单
- 关闭匿名访问,RBAC 最小权限
- 凭证专用账号、日志打码、定期轮换
-
/script限制访问 + 审计 - 插件来源可信、及时更新、定期清理
- Agent 构建脚本沙箱 + 标签限定 + 隔离
- 备份文件安全存储,凭证与备份同等级保护
- 启用 Audit Trail 与凭证审计
9. 练习与验收
练习 A
- 检查授权策略,确认只有必要账号有
Overall/Administer - 用凭证审计确认没有日志泄露密码
- 清理不再使用的插件
练习 B
- 用 Nginx 限制
/script路径,验证外部无法访问 - 开启 Audit Trail,做一次"修改 Job 权限"操作并查看审计记录
- 对照安全加固清单逐项自检
验收清单
- 清楚 Jenkins 的五大攻击面(凭证、脚本控制台、插件、构建脚本、备份)
- 完成最小权限与凭证保护加固
- 知道脚本控制台风险并做了访问限制
- 有插件供应链安全措施(来源、更新、审计)
- 启用了审计日志和凭证审计
- 备份与凭证得到同等安全保护
下一篇:故障排查。