CentOS中Jenkins的安全设置有哪些
小樊
42
2025-11-28 01:49:11
CentOS 上 Jenkins 的安全设置清单
一 系统与网络加固
- 保持系统与软件更新:执行 yum update -y,及时修补漏洞;Jenkins 与插件也要定期更新。
- 运行环境:安装受支持的 Java 11(如 java-11-openjdk-devel),避免使用过时版本。
- 防火墙仅开放必要端口:仅放行 8080/TCP(HTTP),如使用代理或 HTTPS 则放行 443/TCP;如使用 JNLP 代理再放行 50000/TCP。示例:
- sudo firewall-cmd --permanent --add-port=8080/tcp
- sudo firewall-cmd --permanent --add-port=443/tcp(启用 HTTPS 时)
- sudo firewall-cmd --permanent --add-port=50000/tcp(需要 JNLP 时)
- sudo firewall-cmd --reload
- 端口与监听:如需降低暴露面,可在 /etc/sysconfig/jenkins 中修改 JENKINS_PORT 为非默认端口,并限制来源 IP(配合防火墙/安全组)。
- SELinux:保持启用并按需设置 /var/lib/jenkins 的上下文,避免权限错配导致服务异常。
- 备份:定期备份 JENKINS_HOME(作业配置、凭据、插件等),可使用脚本或插件实现自动化备份与恢复演练。
二 Jenkins 应用层安全配置
- 启用安全与 CSRF:在 Manage Jenkins → Configure Global Security 勾选 Enable security,并开启 CSRF Protection(跨站请求伪造防护)。
- 安全域与授权:
- 安全域(Authentication)可选 Jenkins 自有用户数据库、LDAP 等;
- 授权(Authorization)避免使用“任何人都可以做任何事”,生产建议 基于矩阵 或 基于角色的授权策略(Role-Based Authorization Strategy),实现最小权限。
- 禁用匿名访问:除非明确需要,禁止匿名读取或执行。
- 代理与执行器:为降低控制器风险,建议将控制器 执行器数量设为 0,所有构建在 代理节点 执行;必要时仅允许带特定标签的作业在控制器运行。
- 代理通信端口:不使用 JNLP 代理时,禁用 TCP 50000 端口以减少攻击面。
- 凭据管理:使用 Credentials Binding 等插件集中、加密存储凭据,避免明文出现在作业配置或代码库。
三 加密通信与反向代理
- 启用 HTTPS:为管理界面与 API 启用 TLS,可使用 自签名证书 或 受信任 CA 证书;对外服务强制跳转 HTTPS。
- 反向代理部署:建议前置 Nginx/Apache 终止 TLS,并配置:
- 仅暴露 443/TCP;
- 设置 HSTS、X-Frame-Options、X-Content-Type-Options、X-XSS-Protection 等安全响应头;
- 对管理路径(如 /manage)实施更严格的访问控制(如仅内网来源)。
四 审计、监控与备份恢复
- 日志与审计:启用并定期检查 Jenkins 系统日志 与 操作审计,对关键操作(创建/删除作业、凭据变更、插件安装)建立留痕与告警。
- 监控与告警:对 登录失败、权限变更、节点上线/离线、磁盘空间不足 等事件设置监控与通知。
- 更新与补丁:在 Manage Jenkins 中关注 安全公告 与 插件更新,建立例行升级与回滚预案。
- 备份策略:定期全量/增量备份 JENKINS_HOME,并进行 离线/异地 存储与 定期恢复演练,确保可用性与完整性。
五 最小化权限与操作建议
- 最小权限原则:按团队与项目划分角色,细化到 视图/任务/凭据/节点 维度,避免共享高权限账号。
- 凭据与密钥:禁止在 Job 配置/代码仓库 中硬编码凭据;使用 凭据绑定、SSH 密钥 或 Vault 等方案集中管理。
- 控制器隔离:控制器仅做 编排与调度,不在控制器上执行构建、脚本或拉取敏感代码。
- 网络分区:管理口与构建口分离,代理节点按 项目/环境 分组,限制横向移动。
- 变更管控:通过 审批流程 与 变更记录 管理安全配置、插件与脚本变更。