Как правильно перейти на более низкий уровень привилегий с помощью setuid?
Вопрос
Я пишу программу на C, которая привязывается к порту <1024.Я бы хотел, чтобы после этого он запускался с привилегиями без полномочий root.
Я знаю, что мне нужно вызвать setuid(), но с каким аргументом?UID варьируются от системы к системе.
Решение
Вы можете использовать getpwnam()
чтобы найти uid/gid пользователя по имени:
#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;
}
Другие советы
Больше, чем вы захотите знать http://www.eecs.berkeley.edu/~daw/papers/setuid-usenix02.pdf
Не связан с StackOverflow