我们在用于监视网络接口流量的服务器上安装了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
-因此,问题只与功能无关。
答案 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