8 berichten aan het bekijken - 1 tot 8 (van in totaal 8)
  • Q:
    Bijdrager
    vortexfive

    werken met root privileges

    Hallo,
    Ik heb een klein programmaatje geschreven dat in de Dock de mogelijkheid toevoegt om ze bovenin te plaatsen, maar daarvoor moet het programma een bestand wijzigen in dat eigendom is van het systeem.
    ???
    Hoe doe ik dat?
    Uit het voorbeeld van de developper site om een programma met root privileges te draaien, raak ik niet wijs.

    Bijdrager
    tuke

    je kan eens zoeken naar set UID, dit is een mogelijkheid om een commando uit te voeren als een andere user dan diegene die het commando opstart.

    Bijdrager
    dj bazzie wazzie

    Kan je niet van het bestand even de privileges verwijderen?

    Zit nu niet achter een apple:o maar met applescript kun je het volgende doen.

    De Code kan afwijken van hoe het moet in het woordenboek van de Finder staat wel hoe je owner priveleges moet schrijven in de code

    tell application “finder”
    set currentOwner to owner priveleges of file yourFile
    set owner priveleges of file yourFile to “system”
    doe hier wat je moet doen
    set owner priveleges of file yourFile to currentOwner
    end tell

    Bijdrager
    dj bazzie wazzie

    Wat je ook kan doen is een command line tool maken… Ik weet niet in welke programmeer taal jij werkt maar goed…. en deze uit laten voeren in UNIX als root… Als je dit met Applescript aanspreekt moet je wel je wachtwoord intypen

    Bijdrager
    vortexfive

    tell application “finder”
    set currentOwner to owner privileges of file yourFile
    set owner privileges of file yourFile to “system”
    doe hier wat je moet doen
    set owner privileges of file yourFile to currentOwner
    end tell

    werkt niet, “onvoldoende toegangsbevoegdheden” :(

    een executable uitvoeren met sudo … in terminal?
    wat bedoel je met : als je dit door Applescript laat aanroepen moet je wel je paswoord intypen ?

    Bijdrager
    dj bazzie wazzie

    Klopt. ik zit nu achter een mac en het moet zijn
    tell application “Finder”
    set currentOwner to owner of file yourFile
    set owner of file yourFile to “root”
    –doe hier wat je moet doen
    set owner of file yourFile to currentOwner
    end tell

    Bijdrager
    Sad

    Werk je met Cocoa? Dan moet je gebruik maken van AuthorizationCreate en AuthorizationExecuteWithPrivileges:

    [code:1:3b10f95191]
    // Je houdt een array bij met de rechten en vlaggen
    // waarvoor je autorisatie wil

    AuthorizationRef authorizationRef = NULL;
    AuthorizationRights rights;
    AuthorizationFlags flags;

    // Je wilt een standaard autorisatie omgeving van de
    // user hebben:

    rights.count=0;
    rights.items = NULL;
    flags = kAuthorizationFlagDefaults;

    OSStatus err = 0;
    err = AuthorizationCreate(&rights, kAuthorizationEmptyEnvironment, flags, &authorizationRef);

    // In de AuthorizationItem array moet je 1 item hebben per
    // recht dat je wilt krijgen. De gegevens + lengte van valueLength
    // is afhankelijk van het recht dat je wilt krijgen

    // Om iets uit te voeren als root, kAuthorizationRightExecute,
    // moet je een pointer hebben naar een C-string die het pad bevat
    // van het commando dat je wilt uitvoeren, en de lengte van het
    // pad in de C-string.

    // Voor elke tool die je wilt uitvoeren moet er 1 item in de array zijn.

    AuthorizationItem item[1];

    // we gaan hier /bin/rm uitvoeren

    char toolPath[] = "/bin/rm";
    item[0].name = kAuthorizationRightExecute;
    item[0].value = toolPath;
    item[0].valueLength = strlen(toolPath);
    item[0].flags = 0;

    rights.count = 1;
    rights.items = item;

    flags = kAuthorizationFlagInteractionAllowed
    | kAuthorizationFlagExtendRights;

    // Aangezien we kiezen voor kAuthorizationFlagExtendRights
    // en ook kAuthorizationFlagInteractionAllowed, hebben opgegeven,
    // moet de user zijn admin wachtwoord opgeven om iets als root te
    // kunnen uitvoeren. (kAuthorizationRightExecute).

    // De "err" return waarde geeft aan of het wachtwoord juist was of niet.

    err = AuthorizationCopyRights(authorizationRef,&rights,
    kAuthorizationEmptyEnvironment,
    flags, NULL);

    BOOL authorized = (errAuthorizationSuccess==err);

    if (authorized) { // indien de autorisatie gelukt is
    char* args[3];
    err = 0;
    FILE* iopipe;

    // De argumenten voor AuthorizationExecuteWithPrivileges is
    // een array met C-strings, agfesloten met een NULL .
    // we gaan /bin/rm -f /Desktop uitvoeren, dus de argumenten
    // zijn "-f" en "/Desktop". Het laatste argument moet altijd NULL zijn.

    args[0]="-f";
    args[1]="/Desktop";
    args[2]=NULL;

    // nu gaan we het command uitvoeren.
    err = AuthorizationExecuteWithPrivileges(authorizationRef, toolPath, 0, args, &iopipe);
    }

    // Nu geven we de rechten weer vrij, of het command nou uitgevoerd is of niet.
    AuthorizationFree(authorizationRef,kAuthorizationFlagDestroyRights);
    [/code:1:3b10f95191]

    Bijdrager
    BIT

    En kan je in C++ ook het admin wachtwoord laten checken ?

8 berichten aan het bekijken - 1 tot 8 (van in totaal 8)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.