【问题标题】:Sudo Java calling C app and PermissionsSudo Java 调用 C 应用程序和权限
【发布时间】:2014-10-15 11:02:27
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • 您可以在 /etc/sudoers 中为用户添加一个条目,以允许他以 root 权限运行 ./Debug/CPP_CL --device 0
  • 你还是在它前面调用 sudo 还是默认假设呢?
  • 是的,仅适用于您使用 rt.exec("sudo .../Debug/CPP_CL ...") 调用的进程。因此 Java 应用程序以用户权限运行。
  • Java 程序需要读入由 CPP_CL 生成的文件,然后该文件将由 root 拥有,不是吗?
  • 如果 CPP_CL 使用默认的 umask (0022) 创建文件,则该文件是世界可读的。所以你的 Java 应用程序读取它应该没有问题。

标签: java c++ c linux jakarta-ee


【解决方案1】:

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

通常的 chmod 标志 (rwx) 也无济于事。

只需使用sudo 调用它不会解决任何问题。通常,需要密码,如果java程序可以输入密码(即它知道root密码)......好吧,那么它再次与上面相同。

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

如果您想在不使用 sudo 的情况下调用它,请创建另一个脚本文件,该文件仅使用 sudo 调用文件 1。

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

关于数据文件:由根程序创建的文件将归根用户所有。 chmod/chown 作为 root 可以改变这一点。如果您只需要读取文件,默认 umasks 将允许在许多系统上读取(如果文件位于 /root 等非唯一根目录中)

【讨论】:

    【解决方案2】:

    答案:

    https://unix.stackexchange.com/questions/18830/how-to-run-a-specific-program-as-root-without-a-password-prompt

    这行得通..我能够从 Java 中进行 sudo,并且上述应用程序不需要 PWD。​​p>

    【讨论】:

    • 您还阅读了这里的其余部分吗?我敢肯定你现在有一个很好的安全漏洞。
    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多