【问题标题】:Java "symbol lookup error" for JLI_InitArgProcessing when running with setcap capabilities使用 setcap 功能运行时 JLI_InitArgProcessing 的 Java“符号查找错误”
【发布时间】:2023-03-16 18:52:01
【问题描述】:

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

【问题讨论】:

    标签: java unix permissions packet-capture linux-capabilities


    【解决方案1】:

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

    /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

    【讨论】:

    • 您可以使用sudo ldconfig 来重建缓存,而不是重新启动。如果您在 Eclipse 中调试或运行 Java 应用程序,请运行 ldconfig 命令并重新启动 Eclipse。这似乎对我有用。
    • 如果我有超过 1 个 JVM 是否可以工作,例如8号和11号?看起来好像第一行赢了。
    • @DavidRiccitelli 好问题,我不知道。
    猜你喜欢
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多