我正在尝试运行从未知来源的C代码编译的程序。我想确保程序不会损害我的系统。例如,程序可能在源代码中有system("rm -rf /")
这样的东西,这是不可检测的,除非彻底检查代码。
我想到了以下两种方式
两者都不是非常优雅的解决方案,我无法自动化它们。而且,如果是1,它可能会伤害VM。
任何帮助都将不胜感激。
我想在我们称之为“沙盒”的程序中运行该程序。
答案 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
是一种可能性,如果你想将它与其他所有东西隔离,但仍然有一个可以运行它的环境。
答案 7 :(得分:0)
在非联网计算机上运行它,一旦完成,您将重新映像。没有安全的方法在机器上运行它并继续信任该机器。
答案 8 :(得分:0)
除了其他答案之外,使用strace
或ltrace
可以帮助您了解该计划正在做什么。