跳到主要内容

安全加固

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

  1. 检查授权策略,确认只有必要账号有 Overall/Administer
  2. 用凭证审计确认没有日志泄露密码
  3. 清理不再使用的插件

练习 B

  1. 用 Nginx 限制 /script 路径,验证外部无法访问
  2. 开启 Audit Trail,做一次"修改 Job 权限"操作并查看审计记录
  3. 对照安全加固清单逐项自检

验收清单

  • 清楚 Jenkins 的五大攻击面(凭证、脚本控制台、插件、构建脚本、备份)
  • 完成最小权限与凭证保护加固
  • 知道脚本控制台风险并做了访问限制
  • 有插件供应链安全措施(来源、更新、审计)
  • 启用了审计日志和凭证审计
  • 备份与凭证得到同等安全保护

下一篇:故障排查。