2

我正在用 C 语言编写一个绑定到端口 < 1024 的程序。我希望它之后以非 root 权限运行。

我知道我需要调用 setuid(),但是用什么参数呢?UID 因系统而异。

4

2 回答 2

3

比你想知道的更多http://www.eecs.berkeley.edu/~daw/papers/setuid-usenix02.pdf

于 2009-11-08T07:44:50.753 回答
1

您可以使用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;
}
于 2009-11-08T07:46:09.987 回答