log4j2本身不直接运行于linux系统,而是作为java应用依赖组件存在;确认风险需检查jvm进程加载的log4j-core版本是否≤2.14.1,常用命令包括ps aux | grep java、lsof -p | grep log4j、find /path -name "log4j-core-.jar"及unzip -p .jar meta-inf/manifest.mf | grep implementation-version。

确认 Log4j2 是否在当前 Linux 系统中运行
Log4j2 是 Java 应用的组件,本身不直接运行于 Linux 内核层,但只要系统上部署了使用 log4j-core 且版本 ≤ 2.14.1 的 Java 应用(如 Solr、Flink、Druid、Spring Boot 服务),就存在风险。不能只看操作系统,而要看 JVM 进程加载的 JAR 包。
常用排查方式:
- 查找正在运行的 Java 进程及其 classpath:
ps aux | grep java,再结合lsof -p <pid> | grep log4j</pid>或find /path/to/app -name "log4j-core-*.jar" - 检查 Maven/Gradle 项目依赖:若你维护该应用,直接查
pom.xml中org.apache.logging.log4j:log4j-core版本是否 - 解压 JAR 检查 MANIFEST.MF:
unzip -p log4j-core-2.14.1.jar META-INF/MANIFEST.MF | grep Implementation-Version
临时缓解:JVM 启动参数禁用 lookup 解析
对无法立即升级的应用,最有效、兼容性最好的临时措施是加 JVM 参数,强制关闭 JNDI 查找解析逻辑。该参数从 Log4j 2.10 开始支持,2.15+ 已默认禁用,但旧版本需手动启用防护。
在启动脚本(如 start.sh、systemd service 文件或 java -jar 命令)中加入:
java -Dlog4j2.formatMsgNoLookups=true -jar myapp.jar
注意:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 该参数仅影响
${...}中的 message 格式化阶段,不影响 logger 配置文件中的变量替换(如${sys:os.name}) - 若应用同时用了
log4j-api和log4j-core,必须确保log4j-core≥ 2.10,否则该参数无效 - 某些旧版 JDK(如 8u181 之前)仍可能绕过此参数,建议同步升级 JDK 至
8u191+、11.0.1+或更高
升级 log4j-core 到安全版本
根本解决方式是替换 log4j-core JAR。2.15.0 起默认禁用 JNDI,2.16.0 彻底移除 JndiLookup 类,2.17.0+ 修复了后续发现的绕过漏洞(如 CVE-2021-45046、CVE-2021-45105)。不要停留在 2.15.0-rc1 或 2.15.0 正式版。
操作要点:
- 下载地址以官方为准:
https://logging.apache.org/log4j/2.x/download.html,优先选log4j-core-2.20.0.jar(截至 2026 年最新稳定版) - 替换时务必删除旧版
log4j-core-*.jar,并确认 classpath 中无多个版本共存(否则可能加载旧版) - 若用 Spring Boot,升级
spring-boot-starter-log4j2即可自动拉取匹配的安全版log4j-core;但需检查mvn dependency:tree | grep log4j确认无传递依赖引入低版本 - 重启应用后,可用如下代码验证是否生效:
logger.error("${jndi:ldap://x}");—— 安全版本应原样输出字符串,不会发起 LDAP 请求
Linux 层面的辅助防护不可少
即便 Java 层已加固,Linux 主机仍需做最小权限与网络隔离,因为 Log4j2 漏洞利用最终会触发出向连接(如 LDAP/RMI/DNS 查询)。这些行为在主机层可观测、可拦截。
推荐配置:
- 限制非必要出向连接:用
iptables或nftables默认 DROP 出向的389(LDAP)、1099(RMI registry)、1389(LDAP over SSL)、636(LDAPS)端口,仅放行业务必需的地址和端口 - 禁用普通用户执行
java:若非运维/开发需求,用chmod a-x $(which java)并设为 root-only,防止攻击者上传恶意 JAR 后本地执行 - 启用 auditd 监控可疑 Java 行为:
-a always,exit -F arch=b64 -S connect -F a0=0x2 -k log4j_outbound(监控 IPv4 outbound socket 连接) - 检查并清理
/tmp、/var/tmp下可疑的 .class 或 .jar 文件,Log4j2 RCE 常将 payload 下载至此执行
真正容易被忽略的是:很多团队只修了应用服务器,却忘了中间件(如 Nginx 后面的 Tomcat、K8s 里的 Java Pod、甚至 Jenkins 的插件后台)——它们同样跑在 Linux 上,且往往日志配置更宽松、升级更滞后。










