Konsolenbefehl mit root-Rechten unter Linux

  • Themenstarter Themenstarter Schalli1987
  • Beginndatum Beginndatum
S

Schalli1987

Hi,

ich versuche grade per Java einige Linux-shell befehle auszuführen.
Ohne besondere Berechtigung klappt das auch wunderbar, nur sobald das root-passwort verlangt wird steigt das Programma aus :(

Hier mal der Code:
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Test {

	public static void main(String[] args) {
		ArrayList<String> al = new ArrayList<String>();
		al.add("/bin/sh");
		al.add("-c");
		al.add("sudo ls");

		process(al);
	}

	public static void process(ArrayList<String> cmd) {
		ProcessBuilder pb = new ProcessBuilder(cmd);

		try {
			Process p = pb.start();

			String s;

			if (p.waitFor() != 0) {
				BufferedReader err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
				while ((s = err.readLine()) != null)
					System.out.println("err: " + s);
			} else {
				BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
				while ((s = in.readLine()) != null)
					System.out.println("in: " + s);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}


Der Fehler den ich bekomme
Code:
sudo: no tty present and no askpass program specified
sagt eigentlich nur aus, dass es keine Möglichkeit gibt nach dem Passwort zu fragen.
Aber wie schaffe ich diese Möglichkeit bzw geht es irgendwie das Passwort direkt mit zu übergeben?


Achja, die Möglichkeit die Passwortabfrage für dieses Programm zu deaktiviren finde ich eine nur sehr unschöne Lösung!


Über Vorschläge und Anregungen bin ich immer dankbar!
Schalli
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

eventuell könnten die hier die Programme "gksu" und "gksudo" weiterhelfen.
Diese führen einen bestimmten Befehl mit erhöhten Rechten aus, die Passworteingabe erfolgt über einen extra Dialog.

Gruß
BK
 
Es geht mir ja genau darum diese Dialoge abzufangen.
Das mit den root-Rechten war jetzt auch nur ein Beispiel, es geht um alle möglichen Dialoge die von der Shell eine weitere Eingabe erwarten, wie z.B. auch das ändern des eigenen Userpassworts.
 
Hallo,

dann kann ich dir auch nicht weiterhelfen. Es gibt nur wenige Programme (dazu gehört passwd Gott sei Dank nicht) die Passwörter als Parameter erlauben. Es stellt sicherheitstechnisch einfach eine sehr schlechte Lösung dar, Passwörter ungeschützt an ein Programm zu übergeben.

Was mir hier noch einfällt ist Methode "getOutputStream()" der Klasse "Process" von Java. (Hier die Doku: klick). Diese bietet eine Möglichkeit, Daten an die Standardeingabe des Programms zu schreiben. Damit könntest eventuell das Passwort an das Programm senden. Ich hab diese Methode noch nicht probiert, kann also nichts versprechen.

Es gibt eine andere Möglichkeit die mir spontan einfällt, doch ich rate sehr stark davon ab!
Mit Hilfe des "sudo" Befehls kann man Programme mit erhöhten Rechten ausstatten. Hierzu gibt es die Datei "/etc/sudoers" welche festlegt, welche Benutzer das Programm verwenden dürfen. Da kannst du auch eintragen, dass bei dem sudo nicht nach dem Passwort gefragt wird. (Direktive NOPASSWD, siehe manpage)

Da die obige Maßnahme den angegebenen Benutzer quasi mit root-Rechten ohne Passworteingabe ausstattet, rate ich davon ab.

Gruß
BK
 
Hallo,

ohne über den Sinn und Unsinn zu Streiten poste ich mal die Lösung:
Code:
gksu --su-mode -u root deinbefehlsname
Diesen Befehl musst du absetzten und das Programm deinbefehlsname wird nach Passworteingabe mit root Rechten ausgeführt.

Gruß
Erik
 
Guten Morgn,

Ähm Eric, siehe Post 2 und 3, genau das will er ja nicht haben... Es soll kein Dialog aufpoppen mit dem man das Passwort eingeben kann.

Gruß
BK
 
Zurück