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

13

我正在尝试运行一个从未知来源编译的C代码程序。我想确保该程序不会以任何方式损害我的系统。例如,源代码中可能包含像 system("rm -rf /")这样的内容,除非彻底检查代码,否则是无法检测到的。

我考虑了以下两种方式:

  1. 在VMWare之类的虚拟机中运行它
  2. 在Linux上构建Windows可执行文件并在Wine上运行

这两种方法都不是非常优雅的解决方案,而且我不能自动化它们。此外,在第一种情况下,它可能会损坏虚拟机。

希望能得到任何帮助。

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


1
我考虑过chroot,但它不能阻止fork炸弹和其他系统调用问题。谢谢。 - arbithero
在Linux或Unix中,关于沙盒化/监禁进程的类似问题:
  • http://unix.stackexchange.com/q/6433/4319
  • https://dev59.com/tVLTa4cB1Zd3GeqPbpAO
  • https://dev59.com/o2855IYBdhLWcg3wm1m3
  • https://dev59.com/OnNA5IYBdhLWcg3wS70m
- imz -- Ivan Zakharyaschev
1
Wine在包含可执行文件方面绝对没有任何价值。以root身份运行Wine可执行文件,可能会清除您的系统。 - sehe
9个回答

6

了解一下seccomp。它是为这种使用情况而设计的。


5
我在这里写了一篇有关Linux沙箱方法的概述(已归档)。在我看来,最好使用Linux容器(lxc)或selinux。您可以使用虚拟化解决方案并自动化它,但这需要更多的努力。 lxc将隔离您的进程、文件系统和网络,并且您可以在容器上设置资源限制。仍然存在内核攻击的风险,但它们大大降低了。

4

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


1
Geordi的源代码有很多我可以使用的想法。谢谢! - arbithero

2
你可以使用类似schroot的东西并chroot程序,但是任何足够恶劣的东西都会破坏它。
你最好的选择可能是使用虚拟机(vmware或virtualbox),在编译和运行程序之前拍摄快照。这样,如果出现严重问题,您可以回滚到以前的状态。

实际上,无论如何在测试后你都应该回滚它,因为你可能没有注意到出了什么严重的问题。 - caf
如果 @caf 是不受信任的,那么它就是不受信任的。不要瞎搞,还是回滚吧。 - Dave
虚拟机也并不是一个安全的环境,如果正在执行的程序知道它在其中。 - Jonathan

1
创建一个用户,该用户只有对非关键目录的写访问权限。以该用户身份运行程序。如果您还关心隐私问题,考虑限制其读取权限。

1

chroot的维基百科页面可能是一个不错的起点。它描述了chroot,同时还提供了一些更为详尽的替代方案链接。


1

0

在一个非联网的计算机上运行它,完成后重新映像该计算机。在一台计算机上运行它并继续信任该计算机是没有安全保障的。


0
除了其他答案外,使用straceltrace可能有助于您理解程序正在做什么。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接