我有一个特权 C 程序,它由标准用户(例如stduser)执行并在执行时切换到系统用户(例如sysuser),如下所示。基本上,我正在尝试做一些类似于sudo -u sysuser env会做的事情。
环境测试.c:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h>
#include<errno.h>
#include<shadow.h>
#include<pwd.h>
int main(void){
struct passwd*pw;
uid_t sysuid;
gid_t sysgid;
char err_module_name[256] = "";
pw = getpwnam ("ayauser");
endpwent();
if (!pw){ //user doesn't really exist
perror("getpwnam()");
return errno;
}
sysuid = pw->pw_uid;
sysgid = pw->pw_gid;
(strcpy(err_module_name, "setregid()") == NULL || setregid(sysgid, sysgid) == 0) &&
(strcpy(err_module_name, "setreuid()") == NULL || setreuid(sysuid, sysuid) == 0) &&
(strcpy(err_module_name, "execl()") == NULL || execl("/usr/bin/env", …Run Code Online (Sandbox Code Playgroud)