使用 setcap 功能运行时 JLI_InitArgProcessing 的 Java“符号查找错误”

Cra*_*tis 2 java unix permissions packet-capture linux-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
Run Code Online (Sandbox Code Playgroud)

它设置了功能,并且java -versionroot身份运行可以正常工作。

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

java: symbol lookup error: java: undefined symbol: JLI_InitArgProcessing
Run Code Online (Sandbox Code Playgroud)

这似乎是此处讨论的预期安全保护:Linux 功能 (setcap) 似乎禁用 LD_LIBRARY_PATH

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

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

Cra*_*tis 5

我能够通过添加这个文件来解决这个问题:

/etc/ld.so.conf.d/java.conf
Run Code Online (Sandbox Code Playgroud)

使用单行内容:

/usr/lib/jvm/java-11-openjdk-11.0.1.13-3.0.1.el7_6.x86_64/lib/jli
Run Code Online (Sandbox Code Playgroud)

并重新启动服务器。

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