我想让用户在我的Web服务器上运行自定义程序,而不会影响安全性。 我已经尝试在Debian Etch(使用Dreamhost虚拟主机)上安装plash几天到amd64服务器,但在从源代码编译时很多情况下失败。
任何其他build议的沙盒程序?
例如:
shobj/rtld-libc.a(rtld-bsd-_setjmp.os): In function `_setjmp': ../sysdeps/x86_64/bsd-_setjmp.S:35: undefined reference to `__GI___sigsetjmp' /usr/bin/ld: shobj/rtld-libc.a(rtld-bsd-_setjmp.os): relocation R_X86_64_PC32 against `__GI___sigsetjmp' can not be used when making a shared object; recompile with -fPIC
通常的沙箱解决scheme涉及chroot()或某种types的(para)虚拟化,如VMWare或User Mode Linux 。 但是,这两个选项都需要root权限( 编辑: UML可能在没有root权限的情况下运行)。
不过,这可能是最简单的方法(成熟的软件,广泛部署,许多文档),所以我会同意womble的build议,试图获得一些托pipe,让你的根访问。
如果root访问不可行,则唯一的select可能是限制应用程序级别的用户。
许多运行时环境(Java,PHP,Apache)允许对运行的程序施加某种限制,例如限制进程可能使用的内存或最大持续时间。 你可以试试 有什么可能取决于你想要允许什么types的程序。 它比chroot /虚拟化安全性要差,但是根据您的安全需求可能已经足够了。
顺便说一句:你如何给用户的安全访问? 作为非根,我假设你不能创build用户帐户?
Plash将不起作用:“Plash通过将沙盒进程置于最小的chroot()jail中来有效地禁用这些系统调用” – chroot需要root权限。 没有root访问权限,我敢肯定你不能这样做,因为任何你可以做你想要的沙盒的过程可以撤消(LD_PRELOAD黑客等)。 我会得到一个便宜的VPS你有根访问和运行在那里。 如果花费20美元/月(或者更less),很难不去certificate这一点 – 尤其是当你花了几天的时间 , 你的时间值多less钱?
那么使用chroot来设置它们呢? 这将允许你改变他们的根(也许到用户目录)的定义,然后他们可以在那里工作。