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

我试图运行一个程序从一个未知来源的C代码编译。 我想确保程序不会伤害我的系统。 例如,程序可能有类似system("rm -rf /")的源代码,除非代码被彻底检查,否则这是不可检测的。

我想到了以下两种方法

  1. 在像VMWare这样的虚拟机内运行它
  2. 在linux上构build一个Windows EXE文件,然后在wine上运行

两者都不是非常优雅的解决scheme,我不能自动化他们。 而且在1的情况下,可能会损害虚拟机。

任何帮助,将不胜感激。

我想用我们可以称之为“沙箱”的方式运行程序。

Solutions Collecting From Web of "在Linux上运行可执行文件最安全的方法是什么?"

Geordi使用chroot和syscalls拦截的组合来编译,然后沙盒中的任意代码。

检查seccomp 。 它是为这个用例而设计的。

我在这里写了一个关于Linux (归档)的沙盒方法的概述 。 在我看来,您最好使用Linux容器(lxc)或selinux。 您可以使用虚拟化解决方案并将其自动化,但这需要付出更多努力。

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

你可以使用诸如schroot和chroot这样的程序,但是任何足够的肮脏的东西都会被破坏掉。

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

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

chroot的维基百科页面可能是一个好的开始。 它描述了chroot,并提供了几个更彻底的选择的链接。

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

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

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

在非联网的计算机上运行,​​一旦完成,您将重新映像。 没有安全的方法在机器上运行它,然后继续相信这台机器。

除了其他答案外,使用straceltrace可以帮助你理解程序在做什么。