¿Cuál es la forma correcta de caer a un nivel inferior con privilegios setuid?
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.
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
Más de lo que quiere saber http: // www.eecs.berkeley.edu/~daw/papers/setuid-usenix02.pdf
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow