我有一个应用程序,它有一个 C++/Qt 后端和一个基于 QML 的前端。除了数据模型之外,后端还包含一些工作线程 (QThread)。工作线程必须具有高特权才能完成其工作(即文件操作)。到目前为止,我使用 sudo 启动应用程序以获得 worker 的高特权。由于 sudo 的执行,整个应用程序以 root 身份运行——QML 前端也是如此,这真的很糟糕。所以我的问题是,在具有基于 QML 的低权限(用户权限)前端的应用程序中,获得高权限工作线程的最佳方法是什么。
提前感谢您的帮助。
最佳答案
通常,您不能使用与应用程序其余部分不同的用户运行线程。原因很简单,所有线程共享一个内存空间,写入特权线程的内存,你可以很容易地让它做任何你想做的事。
现在,如何解决这个问题?首先要探索的是简单地设置资源权限,这样就不需要 root 了。例如,创建一个组并使用纯 Unix 权限(chown
、chmod
)或 ACL(setfacl
)向组授予权限。然后,确保应用程序以属于该组的用户身份运行。
如果那不可能,您仍然可以使用 sudo
启动后端,打开(!)所有需要的资源,然后放弃权限。由于它们已经打开,您可以保留对它们的访问权限。如果您需要定期重新打开它们,至少您可以以降低的权限启动前端。
关于c++ - 如何: non-root qml frontend and root-privileged worker threads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48853759/