Pregunta

Estoy escribiendo un programa en C que se une a un puerto <1024. Me gustaría que se ejecute en los privilegios que no son raíz a partir de entonces.

Sé que necesito para llamar setuid (), pero con qué argumento? de UID varían de un sistema a otro.

¿Fue útil?

Solución

Puede utilizar getpwnam() para buscar un usuario UID / GID por nombre:

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

Otros consejos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top