【问题标题】:Java execute Linux commands that require su?Java执行需要su的Linux命令?
【发布时间】:2012-06-21 16:55:23
【问题描述】:

在 Java 中运行需要“su”的 Linux 命令的最佳方式是什么?我希望它非常可靠,至于安全性,我不太在意系统不是生产服务器。除了我自己,没有人连接到这台机器。我考虑过以 root 身份登录,这样我就不必处理 su 命令,并且默认情况下它是禁用的。我正在使用 Debian 6。

唯一的一点是我的要求之一是程序应该在普通用户登录后启动,无需任何进一步的用户输入。我会为普通用户设置自动登录,当计算机打开时,在普通用户登录后,我希望 Java 程序在没有任何用户输入的情况下以 sudo、su 运行。这可能吗?

请告诉我一个简单可靠的解决方案。

问候

【问题讨论】:

  • 我认为您应该进一步改进这个问题:您希望通过这样做实现什么?您是否尝试使用 su (实际上只是切换用户)以非 root 用户身份运行?您是否尝试以 root 身份运行命令,以及您试图通过使用 root 来达到什么目标?如果您回答了这些问题,就可以更轻松地向您展示该怎么做。
  • 只是把它扔在那里思考:我想知道你是否可以在以某种方式执行命令时在应用程序中使用你的密码 - 因为你说它是供你自己使用的
  • 我会以不同的方式来做。在运行程序之前,请确保运行程序的人是 root(我认为这可能是通常的方式,不确定)。即,在启动时,进行系统调用,如果用户不是 root,则退出。
  • @J-16 SDiZ 我认为有正确的答案。当您执行一个特定命令时,您不需要执行 sudo su - root 来执行该命令,您只需使用 sudo。使用 visudo 在 sudoers 文件中设置命令列表,将它们设置为运行 java 程序的用户无需密码即可运行,然后 java 程序将能够运行这些命令。
  • @VanDarg 你可以通过 sudo 限制可以使用的东西,这并不是什么大问题,因为你可以限制它的作用。使用 gksudo 以 root 身份运行整个 java 程序可能比在没有密码的情况下以 root 身份运行一些命令要糟糕得多,因为 JVM 中的任何漏洞或程序所做的任何事情都会自动成为 root 的一种方式机器,而如果它只能在系统上运行有限的命令子集,则情况并非如此。您并不总是希望最终用户拥有该用户帐户的密码才能输入密码,就像在图书馆信息亭一样。

标签: java linux debian sudo su


【解决方案1】:

请改用sudo。 它可以配置为允许在不输入密码的情况下运行特定的命令。

【讨论】:

    【解决方案2】:

    对于需要 root 访问权限的运行程序,它们应该使用sudo 运行。将要求用户输入密码。如上一个答案所述,sudo 可用于配置命令以 root 身份运行,无需输入密码。尝试查看 sudo 的手册页以获取更多相关信息。

    如果你想在系统启动时运行程序,你可以编写一个bash脚本在用户登录时运行命令gksudo java -jar path。这将通过一个对话框提示用户输入密码。

    我还建议在程序开始时进行系统调用以确保 root 访问权限。

    【讨论】:

      最近更新 更多