CentOS 上部署 Jenkins 的安全设置清单
一 系统与网络加固
- 保持系统更新:执行 sudo yum update -y,及时修补内核与基础组件漏洞。
- 仅开放必要端口:Jenkins 默认端口为 8080/TCP,建议仅在内网开放;如需公网访问,前置 反向代理/Nginx/ALB 并开启 HTTPS。
- 开放端口示例:
- sudo firewall-cmd --permanent --add-port=8080/tcp
- sudo firewall-cmd --reload
- 禁止 root 直接运行 Jenkins:以 jenkins 系统用户运行服务,降低提权风险。
- 限制来源 IP:在反向代理或云安全组层限制可访问 IP 段。
- 最小暴露面:关闭未使用的端口与服务(如 Telnet、FTP),禁用不必要的内核模块与自启动服务。
二 Jenkins 身份认证与授权
- 启用安全:进入 Manage Jenkins → Configure Global Security,勾选 启用安全。
- 安全域:选择 Jenkins’ own user database;团队较小时不建议开启 允许用户注册,由管理员统一建账号。
- 授权策略:优先使用 Role-Based Authorization Strategy 插件实现细粒度授权。
- 全局角色示例:
- admin-role:Overall/Administer
- read-only-role:Overall/Read
- ops-role:Overall/Read、Job/Read、Job/Configure、Agent/Connect/Disconnect(不含系统设置与任务增删)
- 项目角色示例:
- team-a-dev:Pattern 填 team-a-.*,赋权 Job/Build、Job/Read、Job/Configure、Job/Cancel
- team-b-dev:Pattern 填 team-b-.*,权限同上
- 将角色分配给相应用户/组,遵循 最小权限原则。
- 安全矩阵补充:小规模可用 安全矩阵/项目矩阵授权策略 做临时分权,但长期建议迁移到 RBAC。
三 传输加密与反向代理
- 启用 HTTPS:使用 Let’s Encrypt 或企业 CA 证书,通过 Nginx/Apache 终止 TLS,避免明文传输凭据与构建产物。
- 反向代理示例(Nginx,/etc/nginx/conf.d/jenkins.conf):
- 建议开启 HSTS、X-Frame-Options、X-Content-Type-Options、X-XSS-Protection 等安全响应头。
- 禁用明文端口对外暴露:在 Jenkins 配置中仅监听 127.0.0.1:8080,由反向代理对外提供 443。
- 若暂时无法上 HTTPS,务必限制 8080 仅内网访问。
四 代理与节点通信安全
- 代理连接策略:优先使用 SSH 方式 连接代理节点(JNLP 已不推荐),并为代理用户配置 最小权限的 SSH 密钥。
- 禁用未使用的代理端口:在 全局安全配置中关闭 JNLP 代理 TCP 端口(若不使用)。
- 节点隔离:代理以 非 root 运行,按需挂载 workspace 与 Docker socket,避免赋予过宽系统权限。
- 云/容器代理:仅使用 可信镜像源,开启 镜像内容信任(DCT),并限制容器能力(Capabilities)。
五 凭据、审计与运维
- 凭据管理:使用 Credentials Plugin 集中管理 SSH 密钥、API Token、用户名/密码;禁止在 Job 配置/代码库中硬编码敏感信息。
- 审计与监控:开启 Audit Trail 或类似插件记录关键操作;结合 系统日志(rsyslog/journald) 与 监控告警 观察异常登录与构建行为。
- 备份与恢复:定期备份 $JENKINS_HOME(含 jobs、config.xml、credentials.xml、plugins 等),建议 每日 增量、每周 全量,并演练恢复流程。
- 安全维护:保持 Jenkins 核心、插件、操作系统与依赖 的及时更新;对公网实例启用 Fail2ban 或 WAF 缓解暴力破解与常见 Web 攻击。