假设我必须在我的机器上运行一个java、c++或python3.8程序,但我不希望这些程序访问我的系统信息、运行os命令或执行任何恶意活动。对于上述每种语言,有没有一种方法可以做到这一点?
Java理论上有一个解决方案:"SecurityManager"。您可以在您的java代码中设置一个(您可以告诉系统:这是一些代码;请以管理员的身份加载它(。
在某些事情发生之前,安全管理员会被调用,并且可以拒绝操作。它主要是任何感觉安全敏感的东西:
- 退出虚拟机
- 打开任何文件
- 打开任何网络连接
- 设置安全管理器
- 访问剪贴板
- 打印东西
- 可能影响螺纹负载的某些方面
您会告诉java运行您编写的某个类文件,该类文件设置一个安全管理器,然后运行您想要限制的应用程序。
请注意,使用SecurityManager并不能真正限制它使用的内存和/或CPU数量,这本身就可能是一个很大的问题。
问题是,该机制的主要用例是运行小程序,而小程序是长死的。因此,这是java生态系统中目前很少有人使用的功能,而且很少使用的黑名单式机制通常漏洞百出。
我强烈建议您为此设置一个虚拟机。基于虚拟机监控程序的限制也存在漏洞,但"在虚拟机中托管东西并确保它不能对底层机器执行操作"更为常见。