【问题标题】:How to sandbox a go program如何对 Go 程序进行沙箱化
【发布时间】:2013-02-07 20:26:56
【问题描述】:

问:有没有办法对 Go 程序进行沙箱处理?
答:是的。见GAE w/ Goplay.golang.org

这是怎么做到的?

在我的特殊情况下,我希望允许用 Go 编写不受信任的扩展。我想 Go Playground 正是我所需要的。它是开源的吗?或者至少有一些关于如何构建类似服务的文档?

注意:

code.google.com/p/go-playground 是 Go Playground 编辑器的来源。但是沙盒隐藏在http://golang.org/compile?output=json 的 POST 后面。

【问题讨论】:

  • 这不是一个真正的问题。也许stackoverflow.com/questions/4249063/… 会有所帮助?
  • 我认为有一个 Go 特定的答案。特别是 Go 设计受到在 GAE 上沙箱化的需求的影响。但我找不到它是如何完成的描述。
  • Go 运行时被设计为沙盒的想法你有没有引用?
  • @JonathanFeinberg,我一直在寻找,但似乎找不到任何东西。我将 Go 的安全代码设计(例如数组边界检查、无指针算法)与 Go Playground 和 GAE 的沙盒混为一谈。

标签: go sandbox


【解决方案1】:

游乐场沙盒技术,AFAIK,不是开源的。我认为其中一个原因是,公开披露实施细节将使任何攻击尝试变得更加容易。

如果滚动您自己的沙箱,我建议提供 {unsafe,runtime,net,os,syscall} 包的假/空/受限版本,并禁止 GOMAXPROCS 高于 1。但设计必须针对非常符合您对沙盒的定义。文件访问是/否/限制?网络是/否/受限?等等...最后但同样重要的是,应该禁用 CGO、汇编代码甚至构建标签。

认为上面的列表是不完整的。

【讨论】:

  • 看来你是对的。 Russ Cox 在 Google 工作,并写了这篇关于 sanboxing Go 的文章。
  • 除了上述操作之外,我还将把每个应用程序放在它自己的基于 linux cgroup/namespace 的容器中,或者不太理想的 chroot 中。
【解决方案2】:

根据http://blog.golang.org/playground,go playground 中的沙箱使用 NaCl 来限制 CPU 和 RAM 的使用。它的代码已合并到 go 版本 1.3。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多