Qual è il modo corretto di scendere a un livello di privilegi più basso con setuid?
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.
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
Più che vorrete sapere http: // www.eecs.berkeley.edu/~daw/papers/setuid-usenix02.pdf
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow