2009-10-04 15 views
20

Ich entwerfe ein wenig Software in Java. Ich kenne den Begriff/Definition nicht, was ich mache, aber ich fordere Befehle von Java zum Terminal. Etwas wie folgt aus:Gibt es ein grafisches "Sudo" für Mac OS X?

Process process = Runtime.getRuntime().exec("command"); 

Ich habe dies vor in Linux getan, und ich gksudo für Befehle, die das Root-Passwort erforderlich.

Gibt es eine gksudo in OS X? Irgendein graphisches Popup, das nach dem root-Passwort fragt?

+1

wenn ich MAMP öffnen, fragte ich bin um mein Passwort zu geben. Oder wenn ich einen pkg installiere .. was ist das pop-up-box in os x aufgerufen? – Johannes

Antwort

-3

Wenn Sie einen Terminal verwenden, dann benutzen Sie einfach „sudo“ statt, die für das Kennwort des Benutzers in dem Terminal aufgefordert wird sich (im Gegensatz zu gksudo denen ich glaube, eine grafische Popup verwendet). Sudo funktioniert sowohl unter Linux als auch unter OS X.

+1

soll es grafisch sein ... =) – Johannes

+1

Welcher Clown hat das abgelehnt? Als ich die Frage beantwortete, erschien das Wort "graphisch" nirgends in der Frage. Und es ist immer noch eine gültige Antwort, auch wenn es nicht * genau * ist, was das ursprüngliche Poster fragte –

+0

Die Frage fragt eindeutig nach einer grafischen Version von sudo (Wort Nummer 4). –

2

gksudo ist die GTK + -Version von sudo.

Sie this clone dafür verwenden können, vor allem für OS X.

9

Das sieht auch vielversprechend: cocoasudo

enter image description here

Es nutzt die OSX native API Authorization Service:

Für Mac OS X Cocoa-basierte Anwendungen, es gibt analoge Sudo-Möglichkeiten, die über die Authorization Services-API bereitgestellt werden. Mithilfe der API können Sie den Benutzer zur Eingabe seines Benutzernamens und Kennworts auffordern, um Berechtigungen zu eskalieren.

...

Für diesen Fall habe ich ein kleines Programm geschrieben, dass ich cocoasudo genannt habe. Verwenden Sie Cocoasudo auf die gleiche Weise wie Sie Sudo verwenden würden. Anstatt jedoch in einem Terminalfenster zur Eingabe ihres Passworts aufgefordert zu werden, erhalten sie eine Dialogeingabe über die Authorization Services-API.

+0

Irgendwie funktioniert das für mich nicht: Ich habe './cocoasudo systemsetup' versucht und bekam die grafische Eingabeaufforderung, aber nach der Eingabe Mein Passwort, 'systemsetup', denkt immer noch, dass ich nicht' sudo' bin, da es sich beschwert: 'Sie benötigen Administratorzugriff, um dieses Tool auszuführen ... Beenden!' –

18

Sie können mehr Erz weniger verwalten Sie Ihre eigenen mit Applescript schreiben:

#!/bin/sh 
osascript -e "do shell script \"$*\" with administrator privileges" 

cocoasudo ästhetisch ansprechender aussieht, aber dieser Einsatz bereits.

+2

Gibt es eine Möglichkeit, das eingegebene Passwort zwischen den Anrufen zu speichern? Ich muss mehrere Aufrufe eines solchen Skripts nacheinander ausführen und möchte nicht, dass der Benutzer sein Kennwort mehrmals eingeben muss. –

+0

Dies funktioniert nicht mehr. Überprüfen Sie meine Antwort auf Updates oder mehr Optionen. Fühlen Sie sich frei, Ihr zu aktualisieren, @ ZJR! ; P – cregox

4

Ich fand das Cocoasudo funktioniert nicht, wenn Sie ein Shell-Skript ausführen, das andere Befehle aufruft. Sie müssten cocoasudo auch in allen Unterbefehlen verwenden, die für jeden Anruf eine Eingabeaufforderung anzeigen würden.

Die osascript-Lösung scheint besser zu funktionieren, aber ich musste sie optimieren, um mit Befehlen zu arbeiten, die Pfade enthalten, die Leerzeichen enthalten.

#!/bin/sh 
export bar="" 
for i in "[email protected]"; do export bar="$bar '${i}'";done 
osascript -e "do shell script \"$bar\" with administrator privileges" 
+1

Ehrfürchtig. Der einzige Nachteil ist, dass der Dialog "osascript möchte Änderungen vornehmen" anzeigt, was den Benutzer verwirren könnte, da sie möglicherweise nicht weiß, was osaskript ist. – gregschlom

3

machen die folgt, in diesem Beispiel erstelle ich gehen einen Ordner/var/lock und legen Sie die Berechtigungen auf 777:

String[] command = { 
     "osascript", 
     "-e", 
     "do shell script \"mkdir -p /var/lock && chmod 777 /var/lock\" with administrator privileges" }; 
Runtime runtime = Runtime.getRuntime(); 
try { 
    Process process = runtime.exec(command); 
    BufferedReader bufferedReader = new BufferedReader(
       new InputStreamReader(process.getInputStream())); 
    String line; 
    while ((line = bufferedReader.readLine()) != null) 
      System.out.println(line); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

auf Linux vielleicht können Sie dies mit gksudo machen, aber ich nicht testen es geht, nachdem ich die Ergebnisse getestet habe und hier gepostet habe.

+0

Dies ist genau das, was ich suche, verbrachte nur Stunden auf dieses Problem ... Danke, Mann. – antonio081014

+0

Danke für Ihre Lösung, ist es möglich, das "osascript" von der Nachricht "osascript möchte Änderungen vornehmen" zu ersetzen? – Arash

+0

Gibt es auch eine Möglichkeit, wie eine Sitzung für diese Root-Anmeldeinformationen zu erstellen, so dass es nicht jedes Mal nach Benutzername und Passwort fragt? – Arash

0

Es scheint eine Menge falscher Informationen in diesen Antworten zu sein. Um andere Leute etwas Zeit zu sparen, poste ich meine eigenen Ergebnisse:

Vor allem, wie das Poster der Frage, habe ich auch die Situation, dass ich Berechtigungen innerhalb einer Java Anwendung zu erhöhen, benötigen .

Ich habe dies in zwei Skripte aufgeteilt. Das erste Skript wird von Java mit einigen Befehlszeilenparametern ausgeführt. Das zweite Skript führt alle Schritte aus, die Root-Berechtigungen benötigen. Die Idee ist natürlich, cocoasudo im ersten Skript zu verwenden, um das zweite Skript mit root-Rechten auszuführen.

Ich habe über die umfangreiche Protokollierung in separate Dateien bestätigt, dass der Skripte in der Tat tun, was ich wollte. Und sie funktionieren gut, wenn sie von der Kommandozeile aus manuell gestartet werden (natürlich mit normalen Benutzerrechten).

Wenn aus der Java-Anwendung gestartet, muss ich die cocoasudo Prompt bekommen, aber nichts passiert. Nicht einmal die erste Protokollausgabe des zweiten Skripts wird angezeigt.

Als ich das erste Skript ändern wieder zu verwenden osascript, mit der Bestätigung, dass alles so weit richtig ist, wie das Skript geht, ich habe nicht einmal eine Aufforderung, wenn es aus Java läuft.

Dies ist alles auf OS X Mountain Lion. Als würde Apple ein paar Sicherheitsmechanismen einbauen, die verhindern, dass Skripte mit root-Rechten aus Java ausgeführt werden.

Da Cocoasudo selbst tatsächlich läuft, bin ich geneigt zu denken, die Lösung ist etwas ähnlich wie Cocoasudo zu programmieren, aber die Durchführung aller übrigen erforderlichen Aktionen mit Cocoa API-Aufrufe. Dies kann dann auch mit Code signiert werden.

1

Nach ZJR's answer, ich habe dies in Automator gemacht, so können Sie es als Service nutzen oder was auch immer:

on run {input, parameters} 
    do shell script "sudo open \"" & (POSIX path of input as string) & "\"" with administrator privileges 

    return input 
end run 

Oder vielleicht Sie denken, nur seine Antwort ist veraltet und will noch ein Applescript, nur diese einzelne Zeile in Skript-Editor schreiben:

do shell script "[[your command]]" with administrator privileges 

die Sie dann make into an app und es als Dienst oder was auch immer verwenden.