如何:非root qml前端和root权限工作线程

时间:2018-02-18 16:12:11

标签: c++ qt qml

我有一个应用程序,它有一个C ++ / Qt-backend和一个基于QML的前端。除了数据模型,后端还包含一些工作线程(QThread)。工作线程必须具有高权限才能完成其工作(即文件操作)。到目前为止,我使用sudo启动应用程序以获得工作人员的高权限。由于sudo执行,整个应用程序以root身份运行 - 所以QML前端也非常糟糕。所以我的问题是在具有基于QML的低权限前端(用户权限)的应用程序中获得高权限工作线程的最佳方法是什么。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

通常,您不能使用与应用程序其余部分不同的用户运行线程。简单的原因是所有线程共享一个内存空间并写入特权线程的内存,您可以轻松地使它做任何你想做的事情。

现在,如何解决这个问题?首先要探索的是简单地设置资源权限,以便您不需要root。例如,创建一个组并使用纯Unix权限(chownchmod)或ACL(setfacl)来授予该组权限。然后,确保应用程序作为组的一部分用户运行。

如果无法做到这一点,您仍然可以使用sudo启动后端,打开(!)所有必需的资源,然后删除权限。由于它们已经打开,您可以保留对它们的访问权限。如果你需要定期重新打开它们,至少你可以以较少的权限启动前端。