我想以编程方式启动一个不受信任的应用程序,所以我想删除该程序访问文件,网络等的能力。本质上,我想限制它,因此它与计算机其余部分的唯一接口是stdin和stdout
我能这样做吗?最好是以跨平台的方式,但我希望每个操作系统都必须采用不同的方式。我正在使用Python,但如果有必要,我愿意用较低级别或更多平台集成语言编写此部分。
我需要这样做的原因是编写分布式计算基础架构。它需要下载程序,执行它,将数据传递给stdin,并将它在stdout上接收的数据返回到中央服务器。但由于它下载的程序不受信任,我想将其限制为仅使用stdin和stdout。
答案 0 :(得分:4)
简短的回答是否定的。
答案很长并不是真的。考虑一个C程序,程序通过抓取下一个可用的文件描述符来打开日志文件。为了阻止这种情况,你的程序需要以某种方式监视它并阻止它。根据不受信任的程序的稳健性,这可能会导致致命的崩溃,或抑制无害的功能。还有很多其他类似问题可以解决你想要做的事情。
我建议您查看已有的sandboxing解决方案。特别是,virtual machine对于测试不受信任的代码非常有用。如果你找不到任何满足你需求的东西,最好的办法是在内核级别处理这个问题,或者用更接近硬件的东西来处理这个问题,比如C。
答案 1 :(得分:2)
是的,你可以这样做。您可以通过ptrace(基本上充当调试器)运行一个较差的进程,并挂钩系统调用并确定是否允许它们。
codepad.org就是这样做的,请参阅:about codepad。它使用geordi主管来执行不受信任的代码。
答案 2 :(得分:0)
您可以在chroot中运行不受信任的应用并阻止他们使用带有iptables规则的网络(例如,所有者 - 用户 - 所有者匹配)
但实际上,虚拟机更可靠,并且对现代硬件性能的影响可以忽略不计。