簡體   English   中英

Java的Runtime.exec和gksu中的Sudo用於umount

[英]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 -agksu umount -a在終端中不起作用,因此在Java程序中不起作用。 sudo umount -a可以在終端中運行,但不能在應用程序中運行。 同時,我通過將設備逐1卸載來使其正常工作,但是如果我可以讓umount -a以某種方式工作,它將更加干凈。

如果您了解為什么gksu不適用於umount或sudo不能與Runtime.exec()一起使用,我將為您解釋。

謝謝

我覺得問題是sudo不像gksu那樣要求我輸入密碼。 但是我不知道如何給它輸入密碼。

很有可能是這種情況。 這里有兩種可能的情況,我認為每種情況都有其自己的解決方案:

  1. 運行該程序的用戶(對於桌面應用程序)已經具有運行所需命令的權限。 -提示用戶輸入密碼,並使用-s標志通過stdin將其傳遞給sudo。 有關更多信息,請查看sudo手冊頁 這很簡單,可以確保您的應用程序沒有比運行它的用戶更大的訪問權限。

  2. 如果您的應用程序需要以與用戶不同的特權運行,或者該應用程序正在服務器上運行,則應以其自己的系統用戶身份運行該應用程序。 然后,您可以使用visudo使該系統用戶僅需運行所需命令的能力,而無需輸入密碼。 在編輯sudoers文件時要非常小心。 我建議將其添加為單獨的文件,並僅在實際的sudoers中鏈接到它,以便以后撤消時更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM