我最近一直在研究实现受保护/安全执行环境的最佳方法,该环境允许我将一些代码“上传”到该环境中并阻止任何类型的输出(来自代码执行)到操作系统 - 这样,如果代码存在会危害系统的错误,则任何东西都不会受到“损坏”。到目前为止,我发现最常见的解决方案是:
- 沙盒
- 虚拟机
- 文件版本控制系统(例如分区)
然而,上述所有方法分别具有以下缺点:
- 功能有限
- 不支持复制或提交
- 没有机制来检查不同进程所做的更改
因此,通过阅读一些文章,我发现实现此目的的最佳方法是使用虚拟文件系统 (VFS) 和 FUSE。我的说法是否正确,或者还有更好的解决方案吗?
关于 VFS 和 FUSE:最好的(受支持的)Python 实现是什么?保险丝?
答案1
创建“受保护的执行环境”的最简单方法是以非特权用户身份执行。然后,该过程只能对用户有权更改的内容进行更改,如果您专门为安全测试创建用户,则基本上什么都没有。添加和删除用户是一个命令。
此方法不可行的唯一原因是该进程需要超级用户权限。在这种情况下,您必须使用某种特殊的沙箱或虚拟机。一般来说,“沙箱”并不一定意味着超级用户权限是可行的,但它们可能 (qv man chroot
)。
通过阅读一些文章,我发现实现此目的的最佳方法是使用虚拟文件系统 (VFS) 和 FUSE。
我不知道你为什么这么想。虚拟文件系统仍然只是一个文件系统,因此它不为其中的可执行文件提供任何类型的安全性。这与安装 USB 记忆棒(包含文件系统)然后运行存储在其中的可执行文件一样“安全”。只是因为可执行文件(或者,对于 python,脚本/字节码)存储在可移动设备(或 VFS)上根本无法保护您免受任何伤害。
同样,出于完全相同的原因,我不明白“文件版本控制系统(例如分区)”如何为主机系统提供任何类型的安全性。顺便说一句,这不是他们的目的。
WRT 正在寻找能够克服您列出的缺点的东西:
“不支持复制或提交”如果“不支持”意味着不可能,那当然是可能的。您可以使用您通常使用的任何方法。如果“不支持”是指虚拟机不包含某种读心术软件,那么这是正确的。读心术需要额外的硬件;)
“没有机制来检查不同进程所做的更改”最后一点也是如此。如果您需要观察进程正在做什么,您可以按照通常的方式进行——
strace
分析,等等。可能有专门的沙箱可以做到这一点,但我认为它们将沿着特定的路线专门化。
在这方面,我不是 python 用户,但快速谷歌导致沙盒Python。我不知道是否有任何工具可以为您进行跟踪,但如果您要测试的代码是 python,那似乎是一个很好的起点。