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

Ich mache eine kleine App, die Protokolldateien löscht. Ich verwende eine NSTask-Instanz, auf der rm und srm (secure rm) ausgeführt werden, um Dateien zu löschen.

Ich möchte Dateien löschen können in:

/ Library / Logs ~ / Library / Logs

Das Problem besteht darin, dass das Benutzerkonto nicht über die Berechtigung verfügt, auf einige Dateien im Systembibliotheksordner zuzugreifen, z. B. auf den Adobe-Protokollunterordner und andere. Beispielsweise hat nur der "System" -Benutzer (Gruppe?) Schreib- / Leseberechtigungen für den Adobe-Protokollordner und dessen 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 können möchte:

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

Ich verwende NSTask, weil es Benachrichtigungen zum Abschließen von Aufgaben, zum Abrufen von Textausgaben von der Aufgabe selbst usw. bietet. Muss ich etwas anderes verwenden? Wenn ja, wie könnte ich die Abschlussbenachrichtigungen von NSTask und die Ausgabedateikennung replizieren, während ich rm und srm mit Administratorrechten ausführe?

Ich bin auf der Suche nach dem sichersten Weg, mit der Situation umzugehen. d. h. ich möchte nicht, dass meine Anwendung zu einer Tür für Eskalationsangriffe wird.

Ich habe im Authorization Services-Programmierhandbuch nachgeschlagen, bin mir jedoch nicht sicher, welcher Fall passt. Zuerst dachte ich, dassAuthorizationExecuteWithPrivileges wäre eine gute Idee, aber nachdem Sie mehr über das Thema gelesen haben, sieht es so aus, als würde diese Methode aus Sicherheitsgründen nicht empfohlen.

Eine ausführliche Antwort wäre sehr willkommen. Ich bin sicher, einige von Ihnen mussten bereits etwas Ähnliches tun und mussten Code und Wissen teilen.

Danke im Voraus

Aktualisieren

Ich bin jetzt in der Lage, das Authentifizierungsdialogfeld zu öffnen und Berechtigungen zu erhalten, wie folgt:

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);

So sieht es aus, als wäre die Methode "Factored Application" am besten geeignet. Die Sache ist, dass für michrm scheint bereits ein externes Hilfstool zu sein. Ich bin 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 das BetterAuthorizationSample angesehen, das als sicherere und aktuellere Alternative zur setuid-Bit-Methode vorgeschlagen wird, das aber für ein einfaches Verhalten schrecklich komplex ist. Irgendwelche Hinweise?

Vielen Dank im Voraus für jede Hilfe!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage