我知道这个问题可能看起来有点含糊,但我会尽量解释清楚。
在 C++ 中,有一种方法可以将代码动态链接到您已经运行的程序。我正在考虑创建自己的插件系统(用于学习/研究目的),但出于安全目的,我想将插件限制为特定系统访问权限。
我想给插件有限的访问权限,例如磁盘写入,这样它只能调用我从我的应用程序传递的 API 中的函数(并通过我的预定义接口(interface)写入)有没有办法从应用端?
如果没有:是否有其他语言支持安全的动态链接模块?
最佳答案
您应该考虑编写一个插件容器(或沙箱),然后通过容器协调所有内容,并确保在运行插件之前删除容器进程中不需要的权限。在进程中运行意味着,您也可以作为唯一用户而不是启动进程的用户运行容器,之后您可以限制用户并自动限制进程。为一个进程设置一个专门的用户是最常见和最简单的方式,也是唯一的跨平台限制进程的方式,即使在Windows上你也可以使用这种方式来限制进程。
限制对操作系统提供的共享资源(如磁盘或 RAM 或 CPU)的访问在很大程度上取决于操作系统,并且您没有指定是什么操作系统。虽然它在大多数操作系统上都可行,但 Linux 是首选,因为它在编写时考虑了多用户和服务器用例。例如在 Linux 中你可以使用 cgroups here为每个进程轻松限制 CPU 或 RAM,那么您只需要将它应用于您的插件容器进程。有 blkio
来控制磁盘访问,但您仍然可以使用传统的 quote Linux 中限制每个进程或每个用户共享磁盘空间的机制。
支持插件是一个复杂的过程,最好的开始方式是阅读执行其中一部分的代码,Chromium sand-boxing是我能推荐的最好的地方,它写得非常干净,并且有很好的文档。幸运的是code不是很大。
如果您更喜欢较少参与实际的 cgroup,可以使用更简单的资源限制机制,docker是相当新的,但抽象出低级操作系统构造以轻松包含应用程序,而无需在虚拟机中运行它们。
关于c++ - 动态链接 ~ 限制 DLL 的系统访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28349908/