Apache Log4j 2 是一款开源的日志记录东西,被广泛应用于各类框架中。近期,Apache Log4j 2 被爆出存在缝隙,缝隙现已公开,本文为 KubeSphere 用户供给主张的修正计划。

此次缝隙是因为 Log4j 2 供给的 lookup 功用造成的,该功用允许开发者通过一些协议去读取相应环境中的装备。但在实现的过程中,并未对输入进行严格的判别,然后造成缝隙的产生。因为大量的软件都使用了 Log4j 2 插件,所以大量的 Java 类产品均被波及,包括但不限于 Apache Solr、srping-boot-strater-log4j2、Apache Struts2、ElasticSearch、Dubbo、Redis、Logstash、Kafka…更多组件能够参阅 Log4j 2 相关文档。

受影响的 Log4j 版别为 Apache Log4j 2.x < 2.15.0-rc2。现在官方发布了 Apache 2.15.0-rc2 版别对该缝隙进行了修正,但是该版别并非正式发行版,故存在不稳定的要素,如要晋级主张对相关数据进行备份。

同时,也供给了三种办法对缝隙进行弥补,为

  • 将体系环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为 true
  • 修正装备 log4j2.formatMsgNoLookups=True
  • 修正 JVM 参数 -Dlog4j2.formatMsgNoLookups=true

以下三种解决办法,您能够任选其间一种进行参阅。

办法一:修正体系环境变量

因为 KubeSphere 默认使用了 ElasticSearch 搜集日志,所以也应该在 KubeSphere 修正相应的装备来对缝隙进行修正。以下说明如何在 KubeSphere 中进行相应的操刁难 ElasticSearch 进行修正。

将体系环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为 True,为此,咱们需求修正 ElasticSearch 的 Yaml 文件,因为它是一个 StatefulSet 文件,所以需求进行如下修正:

kubectl edit  statefulset  elasticsearch-logging-data -n kubesphere-logging-system
kubectl edit  statefulset  elasticsearch-logging-discovery  -n kubesphere-logging-system

在这两个 Yaml 文件中插入环境变量设置:

env:
- name: FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS
  value: "true"

办法二:修正 Log4j 2 装备

另外,您也能够修正装备 log4j2.formatMsgNoLookups=True,您能够执行如下指令:

kubectl edit configmaps elasticsearch-logging  -n kubesphere-logging-system

然后插入上面所说到的装备:

log4j2.properties: |-
    status=error
    appender.console.type=Console
    appender.console.name=console
    appender.console.layout.type=PatternLayout
    appender.console.layout.pattern=[%d{ISO8601}][%-5p][%-25c{1.}] %marker%m%n
    rootLogger.level=info
    rootLogger.appenderRef.console.ref=console
    logger.searchguard.name=com.floragunn
    logger.searchguard.level=info
    # 插入此行
    log4j2.formatMsgNoLookups=true

留意:

  1. 修正后请留意相关装备是否挂载进去,假如没有挂载进去,请重启 Pod。
  2. 假如您将 KubeSphere Logging 组件重新安装,ks-installer 可能会导致该 ConfigMap 的装备被重置,需求再参阅办法二手动装备一遍,或者采纳办法一,设置体系环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 为 true

办法三:修正 ElasticSearch 的 JVM 参数

除了上述两种办法,您还能够挑选在 KubeSphere 集群中的 ElasticSearch 增加装备文件,单独装备 JVM 参数,详见 ElasticSearch 公告声明。

相关参阅

  • 关于 Apache Log4j 2 远程代码执行最新缝隙的危险提示: itsc.nju.edu.cn/7a/42/c4194…
  • Artifacts using Apache Log4j Core:mvnrepository.com/artifact/or…

本文由博客一文多发渠道 OpenWrite 发布!