Ubuntu 上 Jenkins 的安全设置方法
一 基础安全配置
- 启用全局安全:进入 Manage Jenkins > Configure Global Security,勾选 Enable security。
- 安全域 Authentication:优先使用 Jenkins’ own user database;企业环境可选 LDAP 等集中认证。
- 授权策略 Authorization:建议使用 Project-based Matrix Authorization Strategy 或 Role-Based Strategy,遵循最小权限原则,细化到用户/项目/视图。
- CSRF 防护:保持 CSRF Protection 开启;如经反向代理或负载均衡,按需启用 Enable proxy compatibility。
- 审计与日志:开启并定期审查 Audit Log(系统管理 > 系统日志/审计),保留关键操作记录以便溯源。
- 持续更新:在 Manage Plugins 中启用自动更新或定期升级 Jenkins 核心与插件,及时修复已知漏洞。
二 加密与反向代理
- 推荐做法:使用 Nginx/Apache 作为反向代理,终止 HTTPS/TLS,Jenkins 仅监听 localhost:8080。
- Nginx 示例(HTTP→HTTPS 与代理头):
- 将 80→443 重定向;在 443 虚拟主机中设置:
- proxy_set_header:Host、X-Real-IP、X-Forwarded-For、X-Forwarded-Proto
- proxy_pass:http://localhost:8080
- proxy_redirect:将 http://localhost:8080 重定向为 https://你的域名
- 若配置不当,Jenkins 会提示 “Reverse proxy set up is broken”,需核对 proxy_pass 与 proxy_redirect。
- Apache 示例:启用 mod_proxy 与 mod_proxy_http,以 ProxyPass / http://localhost:8080/ 与 ProxyPassReverse 完成反向代理。
- 证书与合规:生产环境使用 Let’s Encrypt 或企业 CA 签发证书,强制 HTTPS 访问。
三 权限与认证强化
- 安装并启用 Role-based Authorization Strategy 插件,在 Manage Jenkins > Configure Global Security 选择 Role-Based Strategy。
- 角色设计:
- 全局角色:如 admin(全权)、read-only(只读)。
- 项目角色:按项目/视图命名(如 dev-/prod- 前缀),仅授予构建、查看、工作空间必要的权限。
- 用户与分配:在 Manage Users 创建账号,在 Manage and Assign Roles 将用户绑定到对应全局/项目角色,定期审计与回收不必要权限。
四 系统与网络安全
- 防火墙:仅开放必要端口,例如仅允许 443(若前置 Nginx/Apache);如直接暴露 8080,应限制来源 IP。示例(UFW):sudo ufw allow 443/tcp;如必须用 8080:sudo ufw allow from YOUR_TRUSTED_IP to any port 8080。
- 运行账户:Jenkins 默认以 jenkins 系统用户运行,避免使用 root 运行服务;如需访问外部资源,优先通过 sudo 精细化授权或专用部署账号,而非直接以 root 运行。
- 代理与头部:确保反向代理正确设置 X-Forwarded-Proto $scheme,避免回退到 HTTP 导致的安全隐患。
- 端口与暴露面:生产环境建议不直接暴露 8080,由 Nginx/Apache 统一对外。
五 快速检查清单
| 检查项 |
期望状态/做法 |
| 全局安全 |
已启用;CSRF 开启;代理兼容按需开启 |
| 认证方式 |
自建用户库或 LDAP;禁用匿名访问 |
| 授权模型 |
RBAC 或 项目矩阵;最小权限分配 |
| 加密通信 |
Nginx/Apache + TLS;Jenkins 仅本地 8080 |
| 防火墙 |
仅开放 443(或受控的 8080 来源 IP) |
| 插件与核心 |
自动/定期更新,移除不维护插件 |
| 日志与审计 |
启用审计日志,定期审查异常操作 |
以上步骤可在不影响现网业务的前提下分阶段实施:先启用安全与权限、再接入 HTTPS 与反向代理、最后进行细粒度授权与审计优化。