有谁知道如何使用 QProcess 作为不同的 Linux 用户运行?

问题描述

我正在创建一个最终将由不同用户运行的程序,但在我的程序中,我必须调用必须以特定用户身份运行的第三方程序(而不是像 root 这样的提升权限)。

我的代码不在连接到 Internet 的计算机上,因此我已尽力在下面重新创建它正在执行的操作。

Foo.h

   #include <QProcess>

   class Foo : public QProcess
   {
      Q_OBJECT

      ....

   slots:
      void readStandardOutput();

   protected:
      void setupChildProcess() override;

   private:
      QProcess *process;
   }

Foo.cpp

void Foo::setupChildProcess ()
{
#if defined Q_OS_UNIX
   setgroups (0,0);
   setgid (337);
   setuid (337);
   umask (0);
#endif
}

void Foo::RunFoo ()
{
   QString commandScriptToRun (thirdPartyBashScript);
   QString workingDirectory (thirdPartyDirectory);

   QString command (commandScriptToRun);
   QStringList args;
   args.append (arg1);
   args.append (arg2);

   process = new QProcess();
   process->setProgram (command);
   process->setArguments (args);
   process->setWorkingDirectory (workingDirectory);

   connect (process,&QProcess::readyReadStandardOutput,this,&Foo::readStandardOutput);

   process->start();

   process->waitForFinished (-1);
}

  

当我调试并在调用 setgroups() 时设置断点时,它不会停止。从我从 QProcess::setupChildProcess 的 QT 文档中可以看出,它在 fork() 之后和 execve() 之前被调用,所以我原以为它会在我的重写函数中停止,但它没有。

我也试过以特权用户身份运行我的程序,但是环境变量存在很多问题,这些问题不仅很麻烦,而且没有解决我的问题。

是否可以做我想做的事情,或者我需要寻找其他地方?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)