我想将环境变量设置为用户'abc',并且我的程序以root用户身份运行。我已经尝试过使用“ seteuid”,但它会影响以root用户身份运行的整个应用程序的线程。当我提供su abc -c ' env ENV1=value1 pwd
时,它将在“ ps”命令中公开环境变量,这会泄漏安全性。以下是示例代码,该示例代码正在以用户“ abc”的身份运行,但无法以用户“ abc”设置环境变量。
std::wstring ExecuteCommand(const std::wstring &command, int &error_code)
{
std::wstring res;
std::string s_cmd(command.begin(), command.end());
FILE *fPtr = popen((const char *)s_cmd.c_str(), "r");
if (fPtr)
{
char buffer[1024];
int cnt;
while ((cnt = fread(buffer, 1, 1024, fPtr)) > 0)
{
buffer[cnt] = 0;
std::string s_val = std::string(buffer);
std::wstring wsTmp(s_val.begin(), s_val.end());
res += wsTmp;
}
error_code = pclose(fPtr);
return res;
}
return L"";
}
int main()
{
std::wstring command = L"su abc -c 'ls -ltr /home/abc'";
int error_code = -1;
ExecuteCommand(command, error_code);
return 0;
}
我尝试过使用setenv和seteoid,但似乎也会影响其他线程,因此,您能建议当应用程序以root身份运行时如何将环境变量设置为用户'abc'吗?