在Linux上运行可执行文件最安全的方法是什么?

时间:2010-10-04 22:44:39

标签: linux language-agnostic gcc sandbox

我正在尝试运行从未知来源的C代码编译的程序。我想确保程序不会损害我的系统。例如,程序可能在源代码中有system("rm -rf /")这样的东西,这是不可检测的,除非彻底检查代码。

我想到了以下两种方式

  1. 在类似VMWare的VM中运行
  2. 在linux上构建一个windows exe并运行wine
  3. 两者都不是非常优雅的解决方案,我无法自动化它们。而且,如果是1,它可能会伤害VM。

    任何帮助都将不胜感激。

    我想在我们称之为“沙盒”的程序中运行该程序。

9 个答案:

答案 0 :(得分:6)

结帐seccomp。它是为这个用例而设计的。

答案 1 :(得分:4)

Geordi使用chroot和拦截系统调用的组合来编译然后沙箱任意代码。

答案 2 :(得分:4)

我在这里写了overview of sandboxing methods on Linux (archived)。在我看来,你最好使用Linux容器(lxc)或selinux。您可以使用虚拟化解决方案并自动化它,但需要付出更多努力。

lxc将隔离您的进程,文件系统和网络,您可以在容器上设置资源限制。仍存在内核攻击的风险,但它们大大减少了。

答案 3 :(得分:2)

你可以使用类似schroot之类的东西并对程序进行chroot,但任何有足够肮脏的东西都会破坏。

最好的选择可能是虚拟机(vmware或virtualbox),并在编译和运行程序之前拍摄快照。这样,如果出现严重错误,你可以回滚。

答案 4 :(得分:1)

创建仅对非关键目录具有写访问权限的用户。以该用户身份运行该程序。如果您对隐私也感兴趣,请考虑限制其阅读权。

答案 5 :(得分:1)

chroot的维基百科页面可能是一个好的开始。它描述了chroot,并提供了一些更彻底的替代方案的链接。

答案 6 :(得分:1)

chroot是一种可能性,如果你想将它与其他所有东西隔离,但仍然有一个可以运行它的环境。

http://en.wikipedia.org/wiki/chroot

https://help.ubuntu.com/community/BasicChroot

答案 7 :(得分:0)

在非联网计算机上运行它,一旦完成,您将重新映像。没有安全的方法在机器上运行它并继续信任该机器。

答案 8 :(得分:0)

除了其他答案之外,使用straceltrace可以帮助您了解该计划正在做什么。