Erhalte Administratorrechte zum Löschen von Dateien mit rm aus einer Cocoa-App

8

Ich mache eine kleine App, die Log-Dateien löscht. Ich verwende eine NSTask-Instanz, die rm und srm (secure rm) ausführt, um Dateien zu löschen.

Ich möchte Dateien löschen in:

  • / Bibliothek / Protokolle
  • ~ / Bibliothek / Protokolle

Das Problem besteht darin, dass das Benutzerkonto nicht berechtigt ist, auf einige Dateien im Systembibliotheksordner zuzugreifen, z. B. den Unterordner "Adobe-Protokolle" und andere. Zum Beispiel hat nur der Benutzer "system" (Gruppe?) R / w-Berechtigungen für den Ordner "Adobe logs" und seinen Inhalt, und der aktuelle Benutzer hat nicht einmal einen Eintrag in den Berechtigungen, die im Fenster "Informationen" für den Ordner angezeigt werden .

Was ich genau machen will:

  1. Erhalten Sie Administratorrechte.
  2. Speichern Sie das Passwort im Schlüsselbund, damit die App den Benutzer nicht jedes Mal auffordern muss (Ist das Speichern des Passworts eine schlechte Idee? Ist das möglich?)
  3. Löschen Sie eine Datei unabhängig von den Dateiberechtigungen.

Ich benutze NSTask, weil es Benachrichtigungen für die Aufgabenvervollständigung bietet, um Textausgaben von der Aufgabe selbst zu bekommen, usw. Würde ich etwas anderes brauchen? Wenn ja, wie könnte ich die Abschlussbenachrichtigungen von NSTask replizieren und die Dateikennung ausgeben, während rm und srm mit Administratorrechten ausgeführt werden?

Ich suche nach dem sichersten Weg, mit der Situation umzugehen. d. h. ich möchte nicht, dass meine Anwendung zu einer Tür für Privilege Escalation-Angriffe wird.

Ich habe mir den Authorization Services Programming Guide angeschaut, bin mir aber nicht sicher, welcher Fall passt. Zuerst dachte ich, dass AuthorizationExecuteWithPrivileges eine gute Idee wäre, aber nachdem ich mehr über das Thema gelesen habe, sieht es so aus, als ob diese Methode aus Sicherheitsgründen nicht empfohlen wird.

Eine ausführliche Antwort wäre sehr zu begrüßen. Ich bin mir sicher, dass einige von euch bereits etwas Ähnliches machen mussten und etwas Code und Wissen zum Teilen hatten.

Vielen Dank im Voraus!

Aktualisierung:

Ich bin nun in der Lage, den Authentifizierungsdialog aufzurufen und Berechtigungen wie folgt zu erhalten:

%Vor%

Es sieht so aus, als ob die Methode "Abgeleitete Anwendung" am geeignetsten erscheint. Die Sache ist, dass rm für mich schon wie ein externes Helferwerkzeug aussieht . Ich bin mir nicht sicher, ob ich die in der Dokumentation vorgeschlagene setuid-Alternative bekomme. Könnte ich das setuid-Bit auf rm setzen und es mit der bereits implementierten NSTask-Methode ausführen? Dies würde bedeuten, dass ich kein eigenes Hilfsprogramm erstellen müsste. Könnte jemand auf dieses Thema eingehen?

Ich habe mir auch die BetterAuthorizationSample angesehen, die als eine sicherere und aktuellere Alternative zur setuid-Bit-Methode vorgeschlagen wird, die aber für ein einfaches Verhalten sehr komplex ist. Irgendwelche Hinweise?

Vielen Dank im Voraus für jede Hilfe!

    
Form 27.08.2010, 23:34
quelle

2 Antworten

4

Ich hatte diese Kopfschmerzen vor ein paar Monaten. Ich habe versucht, ein Shell-Skript mit Administratorrechten zu erhalten, die meinen Computer zu einer bestimmten Zeit herunterfahren. Ich fühle deinen Schmerz.

Ich habe die BetterAuthorizationSample benutzt, was ein absoluter Albtraum war, durchzuwaten. Aber ich habe den pragmatischsten Weg gewählt - ich habe nicht versucht, alles zu verstehen, was vor sich ging, ich habe mir einfach den Mut zum Code genommen.

Es dauerte nicht lange, bis ich das tat, was ich wollte. Ich kann mich nicht mehr genau erinnern, was ich geändert habe, aber du kannst gerne meinen Code sehen:

Ссылка

Ich hoffe, dies hilft bei Ihrer Suche nach einer sicheren Anwendung!

    
John Gallagher 31.08.2010, 17:46
quelle
8

Vielleicht ein bisschen spät, aber das könnte nützlich sein für zukünftige Referenzen für andere Leute. Der meiste Code stammt von dieser Person .

Grundsätzlich hat es viel mit Autorisierung auf dem Mac zu tun. Sie können mehr darüber lesen hier und hier .

Der Code, der das RM-Tool verwendet:

%Vor%     
Andrei 07.06.2011 18:29
quelle