Domanda

Sto scrivendo un programma in C che si lega a una porta <1024. Mi piacerebbe che per l'esecuzione a privilegi non root in seguito.

Lo so che ho bisogno di chiamare setuid (), ma con quale argomento? di UID variano da sistema a sistema.

È stato utile?

Soluzione

È possibile utilizzare getpwnam() per cercare un utente del uid / gid da nome:

#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;
}

Altri suggerimenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top