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

时间:2018-12-07 19:12:45

标签: 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

它设置功能,并以 root 身份运行java -version正常。

但是在运行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-因此,问题只与功能无关。

1 个答案:

答案 0 :(得分:0)

我可以通过添加以下文件来解决此问题:

/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