Erlangung von Administrator-Privilegien, um Dateien zu löschen mit rm aus einer Cocoa-app

Ich mache eine kleine app, löscht den log-Dateien. Ich bin mit einem NSTask Instanz die läuft rm und srm (secure rm) Dateien zu löschen.

Ich möchte in der Lage sein, Dateien zu löschen in:

  • /Library/Logs
  • ~/Library/Logs

Das Problem ist, dass das Benutzerkonto verfügt nicht über Berechtigungen für den Zugriff auf einige Dateien im system-library-Ordner, wie den Adobe-logs Unterordner und andere. Zum Beispiel, nur die "system" - Benutzer (- Gruppe?) hat r/w-Berechtigungen für die Adobe Protokolle, Ordner und seinen Inhalt, und der aktuelle Benutzer hat nicht einmal einen Eintrag in den Berechtigungen angezeigt, in der "Get Info" - Fenster für den Ordner.

Was ich will in der Lage sein, genau das zu tun:

  1. Erhalten admin-Rechte.
  2. Speichern Sie das Kennwort in den Schlüsselbund, damit die app nicht zu meckern die user jedes mal (Ist die Speicherung des Kennworts eine schlechte Idee? Ist es möglich?)
  3. Eine Datei löschen, was die Datei-Berechtigungen werden können.

Ich bin mit NSTask denn es bietet Benachrichtigungen für die Aufgabe, die Fertigstellung, der erste text ausgegeben, aus der Aufgabe selbst, etc. Müsste ich etwas anderes verwenden? Wenn ja, wie könnte ich replizieren NSTask Fertigstellung Meldungen-und output-handle der Datei während der Ausführung rm und srm mit admin-rechten?

Ich bin auf der Suche nach dem sichersten Weg, um mit der situation umzugehen. d.h. ich will nicht, dass meine Anwendung zu einer Türöffnung für privilege escalation-Angriffe.

Ich schaute auf die Authorization Services Programming Guide, aber ich bin nicht sicher, welche Tasche passt. Zuerst dachte ich, dass AuthorizationExecuteWithPrivileges wäre eine gute Idee, aber nach der Lektüre mehr über das Thema wie es aussieht, ist diese Methode aus Sicherheitsgründen nicht empfohlen.

Eine ausführliche Antwort wäre sehr willkommen. Ich bin sicher, dass einige von Euch schon etwas ähnliches machen und habe einige code und wissen zu teilen.

Vielen Dank im Voraus!

Update:

Ich bin jetzt in der Lage, um die Authentifizierung Dialogfeld pop-up und erhalten Privilegien, etwa so:

OSStatus status;
AuthorizationRef authRef;
    status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authRef);

AuthorizationRights authRights;
AuthorizationItem authItems[1];

authItems[0].name = kAuthorizationRightExecute;

authRights.count = sizeof(authItems) / sizeof(authItems[0]);
authRights.items = authItems;

AuthorizationFlags authFlags = kAuthorizationFlagDefaults | kAuthorizationFlagExtendRights | kAuthorizationFlagInteractionAllowed;

status = AuthorizationCopyRights(authRef, &authRights, kAuthorizationEmptyEnvironment, authFlags, NULL);

Von den blicken von ihm, es scheint, dass die "Einkalkuliert Anwendung" Methode scheint am besten geeignet. Die Sache ist für mich rm scheint schon wie eine externe helper-tool. Ich bin mir nicht sicher, ich bekomme das setuid-alternative vorgeschlagen, die in der Dokumentation. Könnte ich das setuid-bit auf rm und führen Sie es über die NSTask Methode, die ich bereits umgesetzt? Dies würde bedeuten, dass ich würde nicht brauchen, um meine eigene helper-tool. Könnte jemand näher auf dieses Thema?

Ich schaute auf die BetterAuthorizationSample, die vorgeschlagen wird, da ein sicherer und aktuelle alternative zu den setuid-bit-Methode, aber ich fand es schrecklich für komplexe wie einfache Verhalten. Irgendwelche Tipps?

Vielen Dank im Voraus für jede Hilfe!!!

  • Ich bin auch sehr an dieser Frage interessiert. Wie löschen Sie die Datei ~/Library/Logs & ~/Library/Caches. Haben Sie eine richtige Antwort oder Lösung?
InformationsquelleAutor Form | 2010-08-27
Schreibe einen Kommentar