有什么方法可以通过JNA调用需要root权限的动态库吗?
Is there any available method for me to call a dynamic library that requires root permission through JNA?
正如标题所述,动态库中的函数需要root权限才能执行一些系统调用。如果我使用JNA,我不知道如何实现这个要求。
或者这是一个不好的要求?
也许我没有提供更详细的代码,但我确信这对我来说是一个有价值的问题...
Is there any available method for me to call a dynamic library that requires root permission through JNA?
不,没有。在 UNIX / Linux 中,唯一可以提升应用程序权限的地方是使用 exec
执行新进程并且可执行文件在其文件权限中设置了“set uid”位。
这给 Java 带来了特殊的问题。将 java
可执行文件设为“set uid root”程序是完全不安全的。标准 java
可执行文件设计为 运行 any Java class 通过命令参数提供。您不能将其限制为仅 运行 某些已知对 运行 作为 root 安全的 classes。
简而言之,如果您的 Java 应用程序需要 root 访问权限来执行某些操作(在 Java 代码或本机代码库中),那么它需要由 root
用户.
Or is it a bad requirement?
这是一个无法实现的要求。
JNA 不会为您的 Java 应用程序提供它尚不具备的权限。如果您需要更高的权限来执行库函数,您需要将这些权限授予您的 Java 程序,通常是 运行 它作为特权用户。
正如标题所述,动态库中的函数需要root权限才能执行一些系统调用。如果我使用JNA,我不知道如何实现这个要求。 或者这是一个不好的要求? 也许我没有提供更详细的代码,但我确信这对我来说是一个有价值的问题...
Is there any available method for me to call a dynamic library that requires root permission through JNA?
不,没有。在 UNIX / Linux 中,唯一可以提升应用程序权限的地方是使用 exec
执行新进程并且可执行文件在其文件权限中设置了“set uid”位。
这给 Java 带来了特殊的问题。将 java
可执行文件设为“set uid root”程序是完全不安全的。标准 java
可执行文件设计为 运行 any Java class 通过命令参数提供。您不能将其限制为仅 运行 某些已知对 运行 作为 root 安全的 classes。
简而言之,如果您的 Java 应用程序需要 root 访问权限来执行某些操作(在 Java 代码或本机代码库中),那么它需要由 root
用户.
Or is it a bad requirement?
这是一个无法实现的要求。
JNA 不会为您的 Java 应用程序提供它尚不具备的权限。如果您需要更高的权限来执行库函数,您需要将这些权限授予您的 Java 程序,通常是 运行 它作为特权用户。