Sudo in Java's Runtime.exec & gksu for umount



我正在编写一个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(),我会接受你的解释。

感谢

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

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

  1. 运行程序的用户(在桌面应用程序的情况下)已经拥有运行所需命令的权限。-提示用户输入密码,并使用-s标志通过stdin将其传递给sudo。查看sudo手册页了解更多信息。这很简单,可以确保你的应用程序不会比运行它的用户拥有更大的访问权限

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

最新更新