我正在用 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;
}