java - Sudo Java 调用 C 应用程序和权限

标签 java c++ c linux jakarta-ee

我正在从我的 Java 应用程序调用 C 应用程序(仅限控制台)。 我用它来调用它: Process proc = rt.exec("./Debug/CPP_CL --device 0"); CPP_CL 需要访问 clinfo() 硬件 .. 因此 GPU 硬件作为其在 GPU 上的处理。因此,在这种情况下需要以 sudo/root 身份运行。

目前一切正常,但前提是我以 sudo 运行 Java JAR。当前仅用于测试 CPG 是 chmod 777(我知道不好)。

我想知道最好的方法是什么?如果由 SUDO java 调用,CPP 会作为 SUDO 运行吗?还是需要 chmod'ed ?如果是这样,最好的 chmod 值是多少?

谢谢。

最佳答案

如您所说,使用 root 运行 Java 是一种可能性,但并不完全好。

通常的 chmod 标志 (rwx) 也帮不了你。

只需用 sudo 调用它不会解决任何问题。通常,需要密码,如果 java 程序可以输入密码(即它知道 root 密码)……好吧,那么它又和上面一样了。

如评论中所述,您可以为 sudo 添加异常(exception),但有一些问题:
只能指定一个程序/脚本文件,没有参数限制。您将需要一个调用 ./Debug/CPP_CL --device 0 的脚本文件(最好使用完整路径)并将批处理文件添加为异常(exception)。
此外,您必须确保脚本文件不能被用户修改(文件的 chmod)并且不能被删除(包含目录的 chmod)。文件修改将意味着修改用户可以将任何内容放入其中并以 root 身份运行它,而删除将让用户在那里放置另一个具有此名称 = 相同效果的文件。鉴于此,您可以使用 sudo 调用 with 。

如果你不想在没有 sudo 的情况下调用它,请制作另一个脚本文件,它只使用 sudo 调用文件 1。

另一种可能性是程序本身的特殊 chmod 标志 SUID(如果它在您的发行版中启用/支持)。但在这里,你不能限制参数。

关于数据文件:由 root 程序创建的文件将归 root 所有。 chmod/chown 作为 root 可以改变它。如果你只需要读取文件,默认的 umasks 将允许在许多系统上这样做(如果文件不在像/root 这样的根目录中)

关于java - Sudo Java 调用 C 应用程序和权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26380923/

相关文章:

java - 无法使用 JETTY 运行我的程序

java - 运行 Hadoop 示例

c++ - 类按钮需要函数指针

c++ - DirectX 中的 Alpha 蒙版

java - DynamoDB 慢扫描查询

java - 如何在 Android Studio 中创建自定义图像按钮?

c++ - Qt 删除 QVBoxLayout 上的小部件之间的空白区域

c - 是否有 GCC 编译器/链接器选项来更改 main 的名称?

c - gcc: 无法从目标文件创建 .so

C 编程整数