c++ - 动态链接 ~ 限制 DLL 的系统访问

标签 c++ dll plugins dynamic-linking

我知道这个问题可能看起来有点含糊,但我会尽量解释清楚。

在 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/

相关文章:

jquery - slider 在某些框架上一直向下移动页面

c++ - 由于从 float 自动转换为 double,nan-boxing 的 std::num_put 问题

从非托管 C 调用托管代码

c# - Unity3D - 如何删除包含位置权限请求的插件?

c - Windows 上带有 DLL 的动态模块

c# - 尝试在 C# 中创建基本编译器,获取访问冲突错误

javascript - 改变 Node.js 中动态加载模块的全局范围

c++ - 内存模块是否映射到进程的虚拟空间?

c++ - MFC CDialog 不显示

c++ - 当实现二进制搜索时,当控件到达非空函数的末尾时发出警告