温馨提示×

Jenkins Linux环境下的安全设置

小樊
34
2025-11-30 10:35:49
栏目: 智能运维

Jenkins 在 Linux 环境下的安全设置清单

一 系统与网络加固

  • 保持系统与 Jenkins 持续更新:及时升级操作系统补丁与 Jenkins 及其插件,第一时间修复已知漏洞。
  • 最小暴露面:仅开放必要端口(如 8080/8443/443SSH 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 运行用户,仅授予必要权限;对关键文件设置不可变属性防止篡改。
  • 会话与超时:为管理控制台设置 会话超时并发会话限制,减少会话劫持与共享会话风险。
  • 定期巡检:例行检查 插件更新、系统补丁、日志告警、备份可用性,并建立变更评审与回滚预案。

0