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
我们在服务器上安装了 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