使用setuid降低到较低权限级别的正确方法是什么?

时间:2009-11-08 07:36:17

标签: c unix bind root setuid

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

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

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分: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;
}
相关问题