Was ist der richtige Weg, um mit setuid zu einer niedrigeren Berechtigungsstufe fallen?
Frage
Ich bin ein Programm in C schreiben, die an einen Port bindet <1024. Ich kann es bei nicht-root-Privilegien danach laufen möchte.
Ich weiß, ich brauche setuid () aufzurufen, sondern mit dem, was Argument? UID variiert von System zu System.
Lösung
Sie können mit getpwnam()
ein Benutzer uid / gid durch nachzuschlagen Name:
#include <sys/types.h>
#include <unistd.h>
#include <pwd.h>
int changepriv(const char *user) {
struct passwd *pw;
int rv;
pw = getpwnam(user);
if (!pw)
return -1;
rv = setgid(pw->pw_gid);
if (rv == -1)
return -2;
rv = setuid(pw->pw_uid);
if (rv == -1)
return -3;
return 0;
}
Andere Tipps
Mehr als Sie wollen wissen, http: // www.eecs.berkeley.edu/~daw/papers/setuid-usenix02.pdf
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow