升级到 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-lts
和 jenkins/jenkins:2.263.4
,同时 jenkins/jenkins:lts
使用 AdoptOpenJDK 8u282 版本替代了之前镜像中使用的 OpenJDK 8u242 版本。 这些镜像也使用 Debian 10 (“Buster”) 版本替代了之前镜像中使用的 Debian 9 (“Stretch”) 。 关于变更更详尽的说明请查阅 博客文章。
从 Debian 9 到 Debian 10 的更改从基础 Docker 镜像中删除了几个软件包。 subversion
、mercurial
、bzr
和 python
包已经从基础镜像以及其他软件包中移除。 依赖于特定操作系统软件包的 Jenkins 安装的 Dockerfile 定义可能需要更新以使用 Jenkins 2.263.4 及更高版本
下面提供了示例 Dockerfile 定义:
Subversion
以下 Docker 镜像定义将 Jenkins 2.263.4 与 subversion 插件和操作系统 subversion
软件包一起使用:
FROM jenkins/jenkins:2.263.4-lts
USER root
RUN apt-get update && \
apt-get install -y --no-install-recommends subversion
USER jenkins
RUN jenkins-plugin-cli --plugins subversion:2.14.0
Mercurial
以下 Docker 镜像定义将 Jenkins 2.263.4 与 mercurial 插件和操作系统 mercurial
软件包一起使用:
FROM jenkins/jenkins:2.263.4
USER root
RUN apt-get update && \
apt-get install -y --no-install-recommends mercurial
USER jenkins
RUN jenkins-plugin-cli --plugins mercurial:2.12
Bazaar
以下 Docker 镜像定义将 Jenkins 2.263.4 与 bazaar 插件和操作系统 bzr
软件包一起使用:
FROM jenkins/jenkins:2.263.4-lts
USER root
RUN apt-get update && \
apt-get install -y --no-install-recommends bzr
USER jenkins
RUN jenkins-plugin-cli --plugins bazaar:1.22
Python
以下 Docker 镜像定义将 Jenkins 2.263.4 与操作系统 python3
安装包(自 2020 年 1 月 Python 2 支持终止)一起使用:
FROM jenkins/jenkins:2.263.4
USER root
RUN apt-get update && \
apt-get install -y --no-install-recommends python3
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 支持已被删除
经典 Jenkins UI 上的目录浏览器不再支持符号链接。 尽管它们可能仍存在于磁盘上,并且将通过(发布)构建步骤进行归档,但它们将不再出现在 Web UI 上。
如果依赖以前的行为,则可以通过设置 Java 系统属性 hudson.model.DirectoryBrowserSupport.allowSymlinkEscape
为 true
来禁用此安全修复。 强烈建议不要这样做。
旧数据监视器不再包含用户提交的配置数据
旧数据监控器将不再报告用户提交的配置数据(例如来自 POST config.xml
的请求)。
请注意,与无效的配置数据提交有关的错误消息已经记录在记录器 hudson.util.RobustReflectionConverter
中的 ` FINE` 级别,并且您不需要“旧数据监视器”来解决配置提交问题。 请 查看日志。
如果依赖以前的行为,可以使用下述的 Java 系统属性 来禁用部分或全部此项修复:
hudson.util.RobustReflectionConverter.recordFailuresForAllAuthentications
将完全禁用附加保护。 这样做不安全,强烈建议不要这样做。hudson.util.RobustReflectionConverter.recordFailuresForAdmins
将记录具有“全局/管理”权限的用户提交的无效数据。
始终可访问哪些 URL 的新限制
Jenkins 2.275 和 LTS 2.263.2 中的安全修复纠正了一项检查,该检查确定用户是否应在_没有_“全局/读取”权限的情况下访问 Jenkins 中的 URL。
虽然我们不希望这会引起问题,Java 系统属性 jenkins.model.Jenkins.additionalReadablePaths
可用于添加应始终可访问的其他 URL。 例如, 如果 /loginFoo/
和 /loginBar/
URL 存在于你的 Jenkins 实例中,并且在此项修复之前是可以访问的,现在也需要可以被访问,设置 jenkins.model.Jenkins.additionalReadablePaths
为 loginFoo,loginBar
。
引入此类 URL 并期望没有“全局/读取”权限的用户可以访问的所有插件都应进行更改,例如来实现 UnprotectedRootAction 而不是 RootAction 。 |
标记格式化预览的安全修复
Jenkins 2.275 和 LTS 2.263.2 中的安全修复限制了如何访问标记格式化预览 URL,并限制了如何呈现其输出。
如果您在使用标记格式化预览时遇到问题,请确保没有发送 GET
请求,并且不要独立呈现这些页面。
可以通过设置 Java 系统属性 来禁用附加的防护措施:
hudson.markup.MarkupFormatter.previewsAllowGET
设置为true
,这样标记格式化预览 URL 可以通过GET
访问,而不仅限于POST
。hudson.markup.MarkupFormatter.previewsSetCSP
设置为false
在标记格式化预览 URL 的响应上不设置限制性的 Content-Security-Policy 标头。
强烈建议不要这样做,尤其是如果您使用允许输出包含不安全的内容标记格式化程序(例如 JavaScript)。
图形大小限制
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.UNSAFE
为 true
来禁用此项增强。 由于这是一个全局选项,因此不能由插件设置,并且需要注意的是仅在适当的时候进行设置。
标签名称的安全加固
Jenkins 允许使用标签来连接任务及其可以在其上运行的代理。 除非保存其配置,否则仅在内存中创建标签。
从 Jenkins 2.275 和 LTS 2.263.2 开始,无法保存带有不安全名称的标签的配置。 给定标签在磁盘上的存储方式,某些标签名称将允许覆盖不相关的配置文件。
需要“全局/管理”权限去保存标签配置,并且具有该权限的用户可以使用脚本控制台并始终访问 Jenkins 控制器文件系统,这不被视为安全漏洞。
如果有问题,管理员可以通过设置 Java 系统属性 hudson.model.LabelAtom.allowFolderTraversal
为 true
来禁用此项增强。
升级到 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
查看受支持、已启用和已禁用算法的名称。