当程序本身以root用户身份运行时,将环境变量设置为其他用户

时间:2019-08-16 06:47:26

标签: c++ linux

我想将环境变量设置为用户'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'吗?

0 个答案:

没有答案