Как правильно перейти на более низкий уровень привилегий с помощью setuid?

StackOverflow https://stackoverflow.com/questions/1695677

  •  18-09-2019
  •  | 
  •  

Вопрос

Я пишу программу на 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top