升级到 Jenkins LTS 2.263.x

每个部分涵盖了从之前的 LTS 版本升级,2.263.1 的部分涵盖了自 2.249.3 以来的升级。

升级到 Jenkins LTS 2.263.4

Docker 镜像更新

Jenkins 2.263.4 Docker 镜像标签为 jenkins/jenkins:2.263.4-ltsjenkins/jenkins:2.263.4,同时 jenkins/jenkins:lts 使用 AdoptOpenJDK 8u282 版本替代了之前镜像中使用的 OpenJDK 8u242 版本。 这些镜像也使用 Debian 10 (“Buster”) 版本替代了之前镜像中使用的 Debian 9 (“Stretch”) 。 关于变更更详尽的说明请查阅 博客文章

从 Debian 9 到 Debian 10 的更改从基础 Docker 镜像中删除了几个软件包。 subversionmercurialbzrpython 包已经从基础镜像以及其他软件包中移除。 依赖于特定操作系统软件包的 Jenkins 安装的 Dockerfile 定义可能需要更新以使用 Jenkins 2.263.4 及更高版本

下面提供了示例 Dockerfile 定义:

Subversion

以下 Docker 镜像定义将 Jenkins 2.263.4 与 subversion 插件和操作系统 subversion 软件包一起使用:

  1. FROM jenkins/jenkins:2.263.4-lts
  2. USER root
  3. RUN apt-get update && \
  4. apt-get install -y --no-install-recommends subversion
  5. USER jenkins
  6. RUN jenkins-plugin-cli --plugins subversion:2.14.0
Mercurial

以下 Docker 镜像定义将 Jenkins 2.263.4 与 mercurial 插件和操作系统 mercurial 软件包一起使用:

  1. FROM jenkins/jenkins:2.263.4
  2. USER root
  3. RUN apt-get update && \
  4. apt-get install -y --no-install-recommends mercurial
  5. USER jenkins
  6. RUN jenkins-plugin-cli --plugins mercurial:2.12
Bazaar

以下 Docker 镜像定义将 Jenkins 2.263.4 与 bazaar 插件和操作系统 bzr 软件包一起使用:

  1. FROM jenkins/jenkins:2.263.4-lts
  2. USER root
  3. RUN apt-get update && \
  4. apt-get install -y --no-install-recommends bzr
  5. USER jenkins
  6. RUN jenkins-plugin-cli --plugins bazaar:1.22
Python

以下 Docker 镜像定义将 Jenkins 2.263.4 与操作系统 python3 安装包(自 2020 年 1 月 Python 2 支持终止)一起使用:

  1. FROM jenkins/jenkins:2.263.4
  2. USER root
  3. RUN apt-get update && \
  4. apt-get install -y --no-install-recommends python3
  5. USER jenkins

如果您的 Jenkins 安装需要其他操作系统软件包(例如 bzip2 或某些库),则可以使用 apt-get install 命令从 Dockerfile 安装这些软件包。

升级到 Jenkins LTS 2.263.3

升级没有需要特别注意的内容。

升级到 Jenkins LTS 2.263.2

多种安全修复,可能有副作用

Jenkins 2.275 和 LTS 2.263.2 包含限制某些功能的 多种安全修复。 其中大多数允许管理员根据需要设置 Java 系统属性 来选择退出(部分)安全修复。

文件浏览器中的 Symlink 支持已被删除

SECURITY-1452

经典 Jenkins UI 上的目录浏览器不再支持符号链接。 尽管它们可能仍存在于磁盘上,并且将通过(发布)构建步骤进行归档,但它们将不再出现在 Web UI 上。

如果依赖以前的行为,则可以通过设置 Java 系统属性 hudson.model.DirectoryBrowserSupport.allowSymlinkEscapetrue 来禁用此安全修复。 强烈建议不要这样做。

旧数据监视器不再包含用户提交的配置数据

SECURITY-1923

旧数据监控器将不再报告用户提交的配置数据(例如来自 POST config.xml 的请求)。

请注意,与无效的配置数据提交有关的错误消息已经记录在记录器 hudson.util.RobustReflectionConverter 中的 ` FINE` 级别,并且您不需要“旧数据监视器”来解决配置提交问题。 请 查看日志

如果依赖以前的行为,可以使用下述的 Java 系统属性 来禁用部分或全部此项修复:

始终可访问哪些 URL 的新限制

SECURITY-2047

Jenkins 2.275 和 LTS 2.263.2 中的安全修复纠正了一项检查,该检查确定用户是否应在_没有_“全局/读取”权限的情况下访问 Jenkins 中的 URL。

虽然我们不希望这会引起问题,Java 系统属性 jenkins.model.Jenkins.additionalReadablePaths 可用于添加应始终可访问的其他 URL。 例如, 如果 /loginFoo//loginBar/ URL 存在于你的 Jenkins 实例中,并且在此项修复之前是可以访问的,现在也需要可以被访问,设置 jenkins.model.Jenkins.additionalReadablePathsloginFoo,loginBar

引入此类 URL 并期望没有“全局/读取”权限的用户可以访问的所有插件都应进行更改,例如来实现 UnprotectedRootAction 而不是 RootAction
标记格式化预览的安全修复

SECURITY-2153

Jenkins 2.275 和 LTS 2.263.2 中的安全修复限制了如何访问标记格式化预览 URL,并限制了如何呈现其输出。

如果您在使用标记格式化预览时遇到问题,请确保没有发送 GET 请求,并且不要独立呈现这些页面。

可以通过设置 Java 系统属性 来禁用附加的防护措施:

强烈建议不要这样做,尤其是如果您使用允许输出包含不安全的内容标记格式化程序(例如 JavaScript)。

图形大小限制

SECURITY-2025

Jenkins 2.275 和 LTS 2.263.2 中的安全修复限制了 Jenkins 绘制的各种图形的最大尺寸。 现在默认允许大小为 1000 万像素(例如 4000 x 2500),如果请求更大的尺寸,它将呈现默认尺寸。

通过设置 Java 系统属性 hudson.util.Graph.maxArea 为所需大小来改变这个限制。

安全增强

除了上面列出的安全修复之外,Jenkins 的多项功能还获得了安全改进,这些改进不被视为修复程序。

表单验证响应的安全性强化

现在,使用标准 Jenkins API 实现的表单验证会在响应上设置限制性的 Content-Security-Policy 标头。

这将防止表单验证响应中的跨站点脚本漏洞被利用为反射型 XSS。

这并意味着这些漏洞不再是问题,利用将变得更加困难,例如,它们可能需要额外的权限才能设置。

如果有问题,可以通过设置 Java 系统属性 hudson.util.FormValidation.applyContentSecurityPolicyHeaders 为 `false`来禁用此项增强。

Digester2 的安全增强

Jenkins 从 Apache Commons 项目提供了对 Digester 的稍微修改的实现,称为 hudson.util.Digester2。 它在许多插件中用作解析简单 XML 文件的简便方法。

从 Jenkins 2.275 和 LTS 2.263.2 开始,Digester2 将默认禁用 XML 外部实体(XXE)处理。

插件维护者可以通过使用新的构造函数重载来选择退出该保护。

如果有问题,管理员可以通过设置 Java 系统属性 hudson.util.Digester2.UNSAFEtrue 来禁用此项增强。 由于这是一个全局选项,因此不能由插件设置,并且需要注意的是仅在适当的时候进行设置。

标签名称的安全加固

Jenkins 允许使用标签来连接任务及其可以在其上运行的代理。 除非保存其配置,否则仅在内存中创建标签。

从 Jenkins 2.275 和 LTS 2.263.2 开始,无法保存带有不安全名称的标签的配置。 给定标签在磁盘上的存储方式,某些标签名称将允许覆盖不相关的配置文件。

需要“全局/管理”权限去保存标签配置,并且具有该权限的用户可以使用脚本控制台并始终访问 Jenkins 控制器文件系统,这不被视为安全漏洞。

如果有问题,管理员可以通过设置 Java 系统属性 hudson.model.LabelAtom.allowFolderTraversaltrue 来禁用此项增强。

升级到 Jenkins LTS 2.263.1

SSHD 密钥交换和 MAC 算法

Jenkins SSHD 模块 已在此版本中升级。 默认情况下,升级会禁用不推荐使用的密钥交换算法和不推荐使用的 MAC 算法。

如果管理员需要一种或多种不推荐使用的算法,则可以使用系统属性启用。 请注意,通常认为这些系统属性不受支持,并且可以随时删除。

  • org.jenkinsci.main.modules.sshd.SSHD.excludedKeyExchanges 是用逗号分隔的要禁用的密钥交换算法字符串。 默认情况下,这将禁用基于SHA-1的算法,因为它们不再被认为是安全的。 使用空字符串禁用任何算法。 可以使用日志FINE 级别上初始化期间的 org.jenkinsci.main.modules.sshd.SSHD 来查看受支持、已启用和已禁用算法的名称。

  • org.jenkinsci.main.modules.sshd.SSHD.excludedMacs 是用逗号分隔的要禁用的 HMAC 算法字符串。 默认情况下,这将禁用 MD5 和基于 SHA-1 的截断算法,因为它们不再被认为是安全的。 使用空字符串禁用任何算法。 可以使用日志FINE 级别上初始化期间的 org.jenkinsci.main.modules.sshd.SSHD 查看受支持、已启用和已禁用算法的名称。