Какую среду песочницы можно использовать на виртуальном хостинге (без корневого доступа)?
Я хочу позволить пользователям запускать пользовательские программы на моем веб-сервере без ущерба для безопасности. Я пытался установить plash в течение нескольких дней на сервер amd64 в Debian Etch (с помощью веб-хостинга 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
3 ответа
Обычные решения для песочницы включают либо chroot()
или некоторый тип (пара-) виртуализации, такой как VMWare или User Mode Linux. Однако оба варианта требуют root-доступа (Edit: UML может работать без root-доступа).
Тем не менее, это, вероятно, самый простой способ (зрелое программное обеспечение, широко развернутое, много документов), поэтому я согласен с предложением womble попытаться получить хостинг, который дает вам root-доступ.
Если root-доступ невозможен, возможно, единственным вариантом является ограничение пользователей на уровне приложения.
Многие среды выполнения (Java, PHP, Apache) позволяют накладывать какие-то ограничения на программы, которые они запускают, например, позволяют ограничить объем памяти, которую может использовать процесс, или его максимальную продолжительность. Вы можете попробовать это; то, что возможно, будет зависеть от того, какие программы вы хотите разрешить. Это менее безопасно, чем chroot / virtualization, но может быть достаточно в зависимости от ваших потребностей безопасности.
Кстати: как вы предоставляете безопасный доступ пользователям? Как не-root, я полагаю, вы не можете создавать учетные записи пользователей?
Plash не будет работать: "Plash эффективно отключает эти системные вызовы, помещая изолированную среду в минимальную тюрьму chroot()" - для chroot требуются права доступа root. Без корневого доступа я почти уверен, что вы не сможете сделать это, потому что все, что вы можете сделать, процесс, который вы пытаетесь поместить в песочницу, может быть отменен (взлом LD_PRELOAD и т.д.). Я бы получил дешевый VPS, на котором у вас есть root-доступ, и запустил бы их там. За 20 долларов в месяц (или меньше) трудно не оправдать это, особенно если вы потратили несколько дней на неудачу с plash. Сколько стоит ваше время?
Как насчет их настройки с помощью chroot? Это позволит вам изменить их определение root (возможно, на каталог пользователя), и тогда они смогут работать там.