Heim >Java >javaLernprogramm >Wie führe ich Bash-Befehle mit Sudo-Berechtigungen in Java trotz ProcessBuilder-Einschränkungen aus?

Wie führe ich Bash-Befehle mit Sudo-Berechtigungen in Java trotz ProcessBuilder-Einschränkungen aus?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-24 11:36:29896Durchsuche

How to Execute Bash Commands with Sudo Privileges in Java Despite ProcessBuilder Limitations?

Ausführen von Bash-Befehlen mit Sudo-Berechtigungen in Java

ProcessBuilder bietet eine praktische Methode zum Ausführen von Bash-Befehlen. Wenn Sie jedoch versuchen, Befehle auszuführen, die Superuser-Rechte erfordern, reicht dies möglicherweise nicht aus. In diesem Artikel wird erläutert, wie Sie mithilfe von Java effektiv ein Superuser-Passwort an Bash-Befehle übergeben.

Im bereitgestellten Code-Snippet besteht die Absicht darin, den Befehl „gedit“ mit sudo-Berechtigungen auszuführen. Obwohl der Ansatz mit „gksudo“ aufgrund seiner veralteten Funktion möglicherweise nicht durchführbar ist, wird eine alternative Lösung vorgestellt.

Vorstellung des vorgeschlagenen Ansatzes

Hinweis: Dieser Ansatz ist nicht möglich Aus Sicherheitsgründen für den Produktionseinsatz empfohlen.

Die vorgeschlagene Lösung beinhaltet die Ausführung einer Reihe von Befehlen mit Runtime.getRuntime().exec():

  1. Die Bash-Shell wird aufgerufen mit die Option „-c“, um einen nachfolgenden Befehl auszuführen.
  2. Dem gewünschten Befehl, in diesem Fall „ls“, wird ein Pipe „|“ vorangestellt.
  3. Innerhalb der Pipe die Zeichenfolge „password“ wird als Eingabe an den „echo“-Befehl übergeben.
  4. Die Ausgabe des „echo“-Befehls wird an den „sudo -S“-Befehl weitergeleitet, der das bereitgestellte Passwort verwendet, um den „ls“-Befehl auszuführen. Befehl mit erhöhten Rechten.

Beispielcode

<code class="java">public static void main(String[] args) throws IOException {

    String[] cmd = {"/bin/bash","-c","echo password| sudo -S ls"};
    Process pb = Runtime.getRuntime().exec(cmd);

    String line;
    BufferedReader input = new BufferedReader(new InputStreamReader(pb.getInputStream()));
    while ((line = input.readLine()) != null) {
        System.out.println(line);
    }
    input.close();
}</code>

Verwendung und Vorsichtshinweise

Dieser Ansatz geht davon aus Das angegebene „Passwort“ ist das korrekte Sudo-Passwort. Aufgrund möglicher Sicherheitsrisiken ist bei der Verwendung dieser Technik unbedingt Vorsicht geboten. Vermeiden Sie das Speichern von Passwörtern im Klartext und ziehen Sie alternative Lösungen für sensible Vorgänge in Betracht.

Das obige ist der detaillierte Inhalt vonWie führe ich Bash-Befehle mit Sudo-Berechtigungen in Java trotz ProcessBuilder-Einschränkungen aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn