2016-04-08 17 views
2

Ich habe diese C Datei:das setuid Bit unter Linux verwenden

#include <stdio.h> 
#include <unistd.h> 

int main(void) 
{ 
    printf("%s\n", getlogin()); 
    printf("%i\n", getuid()); 
} 

ich kompilieren, die UID und GID beide auf root und das Setuid-Bit gesetzt, so dass es wie folgt aussieht:

-rwsrwsr-x 1 root root 8735 Apr 8 19:51 a.out 

Allerdings, wenn ich $ ./a.out rufe ich immer noch:

user 
1000 

Was soll ich tun falsch?

Antwort

4

Die reale Benutzer-ID ist immer noch der Benutzer, der das Programm aufgerufen, aber die effektive Benutzer-ID ist root. In einem setuid-Programm sind sie nicht identisch.

Um den effektiven Benutzer-ID, Anruf geteuid() zu erhalten. Sie können auch cuserid() verwenden, um den Namen zu erhalten, der der effektiven Benutzer-ID zugeordnet ist.

+0

Wie kann ich den Namen des EUID bekommen? – hgiesel

+0

@hgiesel Versuchen 'man getpwuid' –

+0

@hgiesel meine bearbeiten zu sehen. – dbush

1

Ihr Programm hat nur die Berechtigung, um die uid zu ändern. Um tatsächlich zu root zu wechseln, müssen Sie setuid(0) darin aufrufen. Weitere Informationen finden sie here