2016-03-19 3 views
0

Ich entwickle eine Mac Cocoa App, die eine zweite Anwendung ausführen muss. Das Folgende ist die relevante Form der zweiten Anwendung, die iIst es möglich, als root ausgeführt, die Benutzer-ID mit getuid() eingeloggt haben?

int main(int argc, const char * argv[]) { 
    uid_t   gRealUserID = getuid(); 
    printf("User id:%d\n",gRealUserID); 
    return 0; 
} 

Das Problem ausgeführt werden müssen, ist, dass der zweite Anschluss app root ausgeführt werden soll und ‚getuid()‘ auch in user.My ersten app angemeldet Strom erhalten läuft mit root-Rechten.

so kurz, wenn ich den obigen Code bauen in Terminal

$ ./test 
User id:501 

ausführbaren Namen "Test" und laufen, wenn wir

$ sudo ./test 
User id:0 

laufen möchte ich wissen, ist es eine Möglichkeit, von denen, wenn ich befehle wie

$ sudo ./test 

druckt

User id:501 

Interessante Beobachtung: Wenn ich root-Privilegien von einem nicht root Anwendung autorisieren SFAuthorization Verwendung als expected..But funktioniert leider kann ich das jetzt nicht tun, tun, um einige Client-Anforderung ändert

Antwort

1

sudo läuft ein Programm, als ob es von root gestartet wurde, daher getuid gibt 0 zurück. Was ich denke, dass Sie suchen, ist ein set Benutzer ID Programm - das ist eine Datei-Modus-Einstellung, die die effektive UID eines Programms zu das des Eigentümers der ausführbaren Datei, also ein ex ecutable im Besitz von root wird mit einer effektiven ID von root ausgeführt, aber eine echte ID des Benutzers, der das Programm startet.

Siehe die manuellen Einträge für chmod(2), geteuid(2), getuid(2) usw. für Details.

HTH

+0

danke @CRD Ich werde versuchen .. aber warum bei Verwendung von SFAuthorization Authorization funktioniert? –

+0

Die Autorisierung funktioniert in beiden Fällen, wie die echten und effektiven IDs eingerichtet werden. Wenn Sie davon lesen, werden Sie feststellen, wie ein gesetztes UID-Programm das Setup 'sudo' erzeugen kann - in der Tat ein' ls -l/usr/bin/sudo' und Sie werden sehen, dass es sich um ein gesetztes UID-Programm handelt. – CRD

+0

Dank @CRD 'setuid()' Form erste Anwendung hat den Trick –

Verwandte Themen