我们在服务器上安装了 Java 11,旨在监视网络接口的流量。
初始安装后(yum install java-11-openjdk-devel.x86_64
) the java
命令对两者都适用root and a 普通用户。
但是,我们的 Java 应用程序不会以 root 身份运行。然后我们跑:
setcap cap_net_raw,cap_net_admin=eip /path/to/java
它设置功能并运行java -version
as root工作正常。
但是运行setcap后,当我尝试跑步时java -version
作为普通用户,我看到:
java: symbol lookup error: java: undefined symbol: JLI_InitArgProcessing
这似乎是一种有意的安全保护,如下所述:Linux 功能 (setcap) 似乎禁用 LD_LIBRARY_PATH https://stackoverflow.com/questions/9843178/linux-capabilities-setcap-seems-to-disable-ld-library-path
但我的问题是:我怎样才能允许java
在普通用户帐户下使用这些功能(网络数据包捕获)?
Note:通过取消设置功能setcap -r /path/to/java
允许普通用户运行java
再次 - 所以问题与功能无关。