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.

War es hilfreich?

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top