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 -version以root身份运行可以正常工作。
但是在运行 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再次运行- 因此问题与功能无关。
我能够通过添加这个文件来解决这个问题:
/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
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |