c++ - 如何: non-root qml frontend and root-privileged worker threads

标签 c++ qt qml

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

提前感谢您的帮助。

最佳答案

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

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

如果那不可能,您仍然可以使用 sudo 启动后端,打开(!)所有需要的资源,然后放弃权限。由于它们已经打开,您可以保留对它们的访问权限。如果您需要定期重新打开它们,至少您可以以降低的权限启动前端。

关于c++ - 如何: non-root qml frontend and root-privileged worker threads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48853759/

相关文章:

c++ - 如何在C++中动态分配数组

javascript - 是否可以像读取txt文件一样读取cpp文件?

C++在linux平台运行时加载共享库和提取类实现

c++ - 如何将枚举类传递给 QML?

c++ - 连续错误 21 : "library routine called out of sequence"

C++ size_t 或 ptrdiff_t

c++ - Qt 移动应用程序的多个 UI 文件

c++ - 使用 QODBC/QODBC3 Qt 驱动程序连接到 Excel 文件

Qt 5.7 QML 为什么我的 CheckBox 属性绑定(bind)消失了?

qt - 如何防止 QML 按钮在短时间内多次点击?