Java "symbol lookup error" for JLI_InitArgProcessing when 运行 setcap 功能

Java "symbol lookup error" for JLI_InitArgProcessing when running with setcap capabilities

我们在服务器上安装了 Java 11,用于监控网络接口的流量。

在初始安装 (yum install java-11-openjdk-devel.x86_64) 之后,java 命令对 root 普通用户都能正常工作。

但是,我们的 Java 应用程序不会 运行 以 root 身份运行。然后我们 运行:

setcap cap_net_raw,cap_net_admin=eip /path/to/java

设置功能,运行ning java -version as root 工作正常。

但是在 运行ning setcap 之后,当我尝试 运行 java -version 作为普通用户时,我看到:

java: symbol lookup error: java: undefined symbol: JLI_InitArgProcessing

这似乎是此处讨论的预期安全保护:Linux capabilities (setcap) seems to disable LD_LIBRARY_PATH

但我的问题是:如何允许java在普通用户帐户下使用这些功能(网络数据包捕获)?

注意: 通过 setcap -r /path/to/java 取消设置功能允许普通用户再次 运行 java - 因此问题与功能无关.

我可以通过添加这个文件来解决这个问题:

/etc/ld.so.conf.d/java.conf

单行内容:

/usr/lib/jvm/java-11-openjdk-11.0.1.13-3.0.1.el7_6.x86_64/lib/jli

并重新启动服务器。

显然,该目录路径应指向您的特定 JDK