Sudo in Java的Runtime.exec& gksu for umount

时间:2014-04-29 15:37:30

标签: java sudo runtime.exec umount gksudo

我正在编写一个Java应用程序,其中(以及其他内容)我将安装外部设备,进行一些复制,然后卸载它。

//I am mounting several devices in created dirs named sdb, sdc... according to the partitions
String[] command = {"gksu", "mount", "/dev/sd" + letter + "1", "mounter/sd" + letter};
Runtime.getRuntime().exec(command);

这在终端和我的程序中都可以正常工作。

为了更快地卸载,我考虑使用umount -a,但gksu umount -a在终端中不起作用,因此不在Java程序中。 sudo umount -a在终端中有效,但在应用程序中无效。与此同时,我通过逐个卸载设备来实现它,但如果我能够让umount -a工作,那将会更清晰。

如果你理解为什么gksu无法使用umount或sudo与Runtime.exec(),我会采取你的解释。

由于

1 个答案:

答案 0 :(得分:1)

  

我觉得问题是sudo没有问我密码,就像gksu那样。但我不知道如何给它一个密码。

很可能是这种情况。 这里有几种不同的可能情况,我认为每种情况都有自己的解决方案:

  1. 运行程序的用户(如果是桌面应用程序)已具有运行所需命令的权限。 - 提示用户输入密码并使用-s标志通过stdin将其传递给sudo。 Check out the sudo man page for more。这很简单,可确保您的应用程序的访问权限不超过运行它的用户。

  2. 如果您的应用程序需要使用不同于用户的权限运行,或者如果它在服务器上运行,那么应用程序应该以其自己的系统用户身份运行。然后,您可以使用visudo为该系统用户提供仅运行所需命令的功能,而无需密码。编辑sudoers文件时要非常谨慎。我建议将其作为单独的文件添加,并在实际的sudoers中链接到它,以便以后更容易撤消。

相关问题