我有一个服务器正在处理不同用户的请求。连接到客户端后,我分叉了一个子进程并用于setuid()
切换到客户端用户。看起来它还设置了父级的 uid。
如何仅为子进程设置 uid?
[编辑]我把所有东西放在一个小例子中,它工作正常。感谢您的提示fork()
;
#include <stdio.h>
#include <unistd.h>
int main() {
int uid[] = { 11942, 11943 };
char *file[] = { "user1", "user2" };
int i = 0;
for (i = 0; i < 2; i++) {
printf("parent, i = %i\n", i);
pid_t child = fork();
if (child == 0) {
printf("child, uid = %d\n", uid[i]);
if (setuid(uid[i]) == -1) {
perror("setuid(11942)\n");
}
FILE *f = fopen(file[i], "w");
fclose(f);
return 0;
}
}
return 0;
}