【发布时间】:2014-02-04 02:57:15
【问题描述】:
我在 linux 上有一个古老的遗留 perl 程序,它是在过去为一组受信任的本地用户编写的。编写时没有考虑到安全性。
我们希望将其复活,以通过网络将输入和输出作为服务提供。它需要读入 cgi,将其传递给这个旧的遗留程序,并将答案返回给客户端浏览器。唉,我们没有人力来审计旧的 perl 程序。 (Perl 有一些沙盒功能可以包裹在 eval 周围,但这似乎很脆弱。)
这里有什么好的选择?
运行一个虚拟机,该虚拟机运行一个设计为在 root 上只读的分发版,并且仅在 /var/ 上保持所有内容非常独立。 (哪个?ubuntu 的味道?)
运行我们定期擦除的虚拟机。
这一切都在 linux 上---我知道如何为我的 windows 虚拟机运行 vmware,但这似乎不是最好的工具。我在 2 年前尝试过 kvm,但那时它的学习曲线很陡峭。看来我几乎想跑了
$ make-iso / > my.iso
$ exec.vm my.iso --mount '/var = my.vdisk' --run '/var/my.program'
- 我们的遗留程序可能会被更改为尽早读取其所有必要的输入文件,然后只能在 stdin/stdout 上运行。如果一个操作系统有一个内核调用,我们可以调用它来断开所有后续进程和子进程对所有磁盘文件系统的访问,那么这个遗留程序将变得安全,即使有人最初在某个地方后期插入了恶意代码或者调用了系统执行程序。我认为这在 linux、bsd 或其他一些像 OS 的 unix 中是不可能的。 (PS:不存在这样一种简单的保护程序的方法真是太遗憾了。:-( .)
这可能是一个常见问题。有什么好的处理方法?
/iaw
【问题讨论】:
-
Perl has some sandboxing features that can be wrapped around eval's, but this seems fragile你有什么想法? -
您的旧脚本是否需要以提升的权限运行?
-
这实际上更像是一个 ServerFault 问题而不是 StackOverflow
-
我不认为 eval 会起作用,因为程序可能会在两者之间读取或写入临时文件。不需要提升的权限。 (我猜想问服务器故障为时已晚。)