Schon wieder NSTask mit sudo

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Schon wieder NSTask mit sudo

    Hallo zusammen!

    Ich bin ziemlicher Anfänger was das Programmieren mit Cocoa und richtiger Objekt-Orientierter Programmierung angeht und hänge jetzt schon Tage an einem Problem. Ich versuche ein Programm zu schreiben, dass im Grunde nur shell Befehle ausführt. Darunter einen, für den ich root Rechte brauche.
    Ich habe mir sowohl diesen als auch diesen Thread durchgelesen, aber der Beispielcode, genau wie die Apple Seiten sind mir einfach zu komplex. Ich steige da nicht durch. :(
    Ich habe auch versucht das Programm sudo aufzurufen und pmset als parameter zu übergeben. Das funktioniert aber leider nicht.
    Könnte mir jemand vielleicht ein einfach Beispiel geben wie ich den Befehl "sudo pmset -a hibernatemode 3" über NSTask ausführe, so dass ich einfach nach dem admin-Kennwort gefragt werde wie bei jedem Installer?

    Vielen Dank schonmal im Vorraus

    Grüße aus der ältesten Stadt deutschlands!
  • Das Problem mit sudo ist dass es das Password nicht von stdin sondern der kontrollierenden Konsole abfragt. Und die kann man per NSTask nicht setzen.

    Also musst Du einen suid-Prozess starten der die Korrekten Zugriffsrechte hat. Glücklicherweise erlaubt Apple aber keine suid-Scripts (sonst gäbe es schon lange Mac-Viren). Deshalb muss das von NSTask gestartete Programm ein Binary sein. Das darf dann natürlich einen system("irgendwas") machen.

    1. Du musst einen Wrapper schreiben der das alles absichert
    2. Den kann man per NSTask aufrufen

    Oder man nimmt die System Authentication (Security/SFAuthorization) - aber die sind schon recht schwierig (habe sie selber auch noch nie benutzt weil es immer auch anders ging).

    -- hns
  • RE: Schon wieder NSTask mit sudo

    Ich hatte diese Aufgabe mit einem CommandLineTool gelöst, das ich installiere und mit erweiterten Rechten versehe.

    AuthorizationFlags flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagExtendRights und AuthorizationCreate;

    Ist aber recht aufwändig.
  • Tutorial und Authentication

    Erstmal danke für eure Antworten.

    @kay
    genau dieses NSTask Tutorial habe ich mir durchgelesen bevor ich meinen NSTask zusammengebaut habe. Mein Problem besteht auch nicht in dem NSTask an sich, der funktioniert ja schon. Aber mit dem Security Kapitel von Apple kann ich in der Tat nicht allzu viel anfangen...

    @hns
    Das mit dem stdin klingt absolut einleuchtend für mich. Ich war da durch Applescript zu verwöhnt denke ich. Habe gehofft das es hier eine so einfache Lösung gibt wie in Applescript. Für mein kleines Progrämmchen werde ich dann wohl auch dabei bleiben.
  • RE: Schon wieder NSTask mit sudo

    Original von ManInMac
    Ich hatte diese Aufgabe mit einem CommandLineTool gelöst, das ich installiere und mit erweiterten Rechten versehe.

    AuthorizationFlags flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagExtendRights und AuthorizationCreate;

    Ist aber recht aufwändig.


    kannst du dazu evtl ein genaueres besipiel geben wei du das gelöst hast ?
    NSTask ohne sudo klappt hänge aber fest wie sudo zu realisieren ist und könnte dein lösungs-besipiel gut gebrauchen, um voran zu kommen.
  • Ich habe es so gelöst:
    Shellscripts kann man auch per AppleScript ausführen, und AppleScripts kann man per Cocoa ausführen (NSAppleScript). Im AppleScript kann man einfach irgendein Pasaswort setzen, von dem es unwahrscheinlich ist, dass es jemand verwendet (ich habe einfach 'password' genommen). so muss der NSString mit dem Script aussehen:

    Quellcode

    1. @"do shell script \"sudo doSomething" password \"%@\" with administrator privileges", @"password"


    Sofern password nicht als Passwort gesetzt ist, wird mit dem Standart Dialog nach dem Passwort gefragt.
    Skeiron
    Der Mac heiligt die Mittel.