在共享主机(无根访问权限)中可以使用什么沙盒环境?

在共享主机(无根访问权限)中可以使用什么沙盒环境?

我想让用户在我的 Web 服务器中运行自定义程序,而不会影响安全性。我尝试安装飞溅在 Debian Etch 上将这个软件包复制到 amd64 服务器(使用 Dreamhost 网络托管)上,但从源代码编译时多次失败。

还有其他建议的沙盒程序吗?

例如:

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

答案1

通常的沙盒解决方案涉及chroot()某种类型的(半)虚拟化,例如 VMWare 或用户模式Linux。但是,这两个选项都需要 root 访问权限(编辑:UML 可能无需 root 权限即可运行。

不过,这可能是最简单的方法(成熟的软件,广泛部署,许多文档),所以我同意 womble 的建议,尝试获取一些可以授予您 root 访问权限的托管。

如果无法获得 root 访问权限,那么您唯一的选择可能是在应用程序级别限制用户。

许多运行时环境(Java、PHP、Apache)允许对其运行的程序施加某种限制,例如,让您限制进程可以使用的内存或最大持续时间。您可以尝试这样做;可能的情况取决于您想要允许哪些类型的程序。它不如 chroot/虚拟化安全,但根据您的安全需求可能已经足够。

顺便问一下:您如何为用户提供安全访问权限?作为非 root 用户,我认为您无法创建用户帐户?

答案2

Plash 无法工作:“Plash 通过将沙盒进程放入最小的 chroot() 监狱来有效地禁用这些系统调用”——chroot 需要 root 权限。如果没有 root 访问权限,我敢肯定您无法做到这一点,因为您可以对试图沙盒的进程执行的任何操作都可以撤消(LD_PRELOAD 黑客攻击等)。我会买一个便宜的 VPS拥有 root 权限并在那里运行它们。每月只需 20 美元(或更少),很难不值得这么做——尤其是当你已经花了好几个使用 flash 失败。你的时间值多少钱?

答案3

如何使用 chroot 来设置它们?这将允许您更改它们的 root 定义(可能更改为用户目录),然后它们就可以在那里工作。

相关内容