Jenkins 在 Linux 环境下的安全设置清单
一 系统与网络加固
- 保持系统与 Jenkins 持续更新:及时升级操作系统补丁与 Jenkins 及其插件,第一时间修复已知漏洞。
- 最小暴露面:仅开放必要端口(如 8080/8443/443 与 SSH 22),使用 UFW/firewalld 限制来源 IP;将默认端口 8080 改为非标准端口可降低自动化扫描命中率。
- 加固 SSH:禁用 root 远程登录,强制使用 SSH 密钥 认证,限制可登录用户组。
- 反向代理与 HTTPS:使用 Nginx/Apache 终止 TLS,配置强加密套件与 HSTS,对外仅暴露 443。
- 构建隔离:避免在主节点执行敏感构建,使用 代理节点/容器 运行作业,缩小被攻破后的影响范围。
- 备份与恢复:定期备份 JENKINS_HOME(含 jobs、credentials、plugins 等),并进行离线/异地保存与演练恢复。
二 Jenkins 身份与授权
- 启用全局安全:在 Manage Jenkins → Configure Global Security 勾选 Enable security,禁用 匿名访问。
- 外部认证集成:对接 LDAP/AD/GitHub/OAuth 等统一身份源,统一账号生命周期与口令策略。
- 细粒度授权:安装 Role-Based Authorization Strategy 插件,按 全局角色/项目角色/节点角色 分配权限,遵循最小权限原则。
- 安全审计:定期查看 审计日志 与系统日志,监控关键事件(登录、权限变更、凭据使用、节点上线等)。
三 凭据与数据安全
- 集中凭据管理:使用 Credentials 存储 用户名/密码、SSH 私钥、API Token、证书 等,避免在 Jenkinsfile/脚本 中硬编码。
- 凭据注入:在流水线通过 withCredentials 安全地注入到环境变量或临时文件,构建结束后自动清理。
- 凭据绑定:使用 Credentials Binding 插件在拉取代码、部署等环节自动提供凭据,减少明文暴露风险。
- 文件保护:对 initialAdminPassword 等敏感文件设置不可变属性(如 chattr +i),防止被篡改或提前泄露。
四 网络与端口配置
- 防火墙放行:
- Debian/Ubuntu(UFW):sudo ufw allow 8080/tcp;如需 HTTPS:sudo ufw allow 443/tcp
- RHEL/CentOS(firewalld):sudo firewall-cmd --permanent --add-service=http;如需 HTTPS:sudo firewall-cmd --permanent --add-service=https;重载:sudo firewall-cmd --reload
- 修改默认端口:编辑 /etc/default/jenkins(Debian 系)或 /etc/sysconfig/jenkins(RHEL/CentOS 系),设置 JENKINS_PORT=xxxx 并重启服务。
- 代理与域名:在 Manage Jenkins → System 正确设置 Jenkins URL 与 反向代理 头部,确保登录/回调与静态资源路径正确。
- 代理示例(Nginx,关键片段):
- 监听 443,TLS 终止,反向代理到 http://127.0.0.1:8080
- 设置 X-Forwarded-Proto、X-Forwarded-Port、X-Forwarded-For 等头部,关闭不安全协议与弱密码套件
五 运行环境与维护
- Java 运行时:安装 OpenJDK 11+,确保 JAVA_HOME 与系统默认 Java 版本一致,避免因版本不兼容导致启动或插件异常。
- 构建节点隔离:优先在 代理节点 执行构建与部署,控制器仅做调度与管理,降低主机被渗透风险。
- 文件与目录权限:确保 JENKINS_HOME 与子目录归属 jenkins 运行用户,仅授予必要权限;对关键文件设置不可变属性防止篡改。
- 会话与超时:为管理控制台设置 会话超时 与 并发会话限制,减少会话劫持与共享会话风险。
- 定期巡检:例行检查 插件更新、系统补丁、日志告警、备份可用性,并建立变更评审与回滚预案。