Безопасный способ запуска кода других пользователей (песочница) на моем сервере?

17

Я хочу создать веб-службу, которая запускает код других людей локально ... Естественно, я хочу ограничить доступ к их коду определенному каталогу «песочницы» и что они не смогут подключаться к другим частям моего сервера (DB, main webserver и т. Д.).

Каков наилучший способ сделать это?

Запустить VMware / Virtualbox:

(+) Я предполагаю, что он настолько же безопасен, как и он, даже если кому-то удастся «взломать» .. они только взламывают гостевую машину

(+) может ограничивать cpu & amp; памяти, процесс использует

(+) легко настроить .. просто создайте VM

(-) сложнее «подключить» папку песочницы от хоста к гостевому

(-) тратит лишнюю память и процессор для управления VM

Запустить недопустимый пользователь:

(+) не тратит лишних ресурсов

(+) песочница - это просто обычный каталог

(?) не может ограничивать cpu и память?

(?) не знает, достаточно ли он защищен ...

Любой другой способ?

Сервер, на котором работает Fedora Core 8, «другие» коды, написанные на Java & amp; C ++

    
задан amitkaz 27.04.2009 в 11:09
источник
  • Подробнее о теме: security.stackexchange.com/questions/32375/... –  Ciro Santilli 新疆改造中心 六四事件 法轮功 05.08.2014 в 23:36

9 ответов

2
  1. Работа под непривилегированным пользователем по-прежнему позволяет локальному злоумышленнику использовать уязвимости для повышения привилегий .
  2. Разрешение на выполнение кода в виртуальной машине также может быть небезопасным; злоумышленник может получить доступ к хост-системе, как недавний отчет об уязвимости VMWare .

На мой взгляд, разрешение запуска собственного кода в вашей системе в первую очередь не является хорошей идеей с точки зрения безопасности. Возможно, вам стоит пересмотреть возможность запускать native код, это, безусловно, снизит риск.

    
ответ дан Alex B 27.04.2009 в 11:43
  • хорошо .. Конечно, это не очень хорошая идея с точки зрения безопасности, но мне нужно это сделать, поэтому я должен идти на компромисс. Я знаю, что есть 100% -ная защита, если я позволяю другим людям запускать код (там нет защиты на 100% в любом месте). Это не сайт банка, где люди имеют огромную мотивацию «взломать» .., я просто хочу получить столько же «Стоимость «Прибыль», как я могу. –  amitkaz 27.04.2009 в 16:42
  • Используйте некоторую форму песочницы, но считайте, что запретить запуск собственного кода. Это возможно? –  Alex B 28.04.2009 в 05:12
  • Мы могли бы распространить этот аргумент на «наличие уязвимостей на веб-серверах, поэтому вы не должны запускать веб-сайт». Фактически, «в веб-браузерах есть уязвимости, поэтому вы не должны просматривать Интернет!» –  BlueRaja - Danny Pflughoeft 11.06.2010 в 20:55
  • @BlueRaja, не говоря уже о том, что вы не можете разрешать пользователям вообще запускать код (например, Google App Engine позволяет запускать Java-байтовый код), но у родного кода есть плохая репутация, не приводящая к локальным ошибкам root в уязвимости удаленного корня. –  Alex B 12.06.2010 в 01:54
  • Является ли использование уязвимостей для повышения привилегий, которые все еще актуальны в 2014 году? –  Hello World 19.05.2014 в 13:15
14

Чтобы ограничить процессор и память, вы хотите установить лимиты для групп процессов (ограничения ресурсов POSIX применяются только к отдельным процессам). Вы можете сделать это с помощью групп.

Например, чтобы ограничить запуск памяти, установив файловую систему групп памяти:

# mount cgroup -t cgroup -o memory /cgroups/memory

Затем создайте новый подкаталог для каждой группы, например.

# mkdir /cgroups/memory/my-users

Поместите процессы, которые вы хотите ограничить (процесс с PID «1234» здесь) в эту группу:

# cd /cgroups/memory/my-users
# echo 1234 >> tasks

Установите общий предел памяти для группы:

# echo 1000000 > memory.limit_in_bytes

Если процессы в дочерних процессах группы fork также будут в группе.

Вышеуказанная группа устанавливает предел резидентной памяти (т. е. принудительные процессы начнут заменять, а не использовать больше памяти). Другие группы позволяют сдерживать другие вещи, такие как время процессора.

Вы можете либо поместить свой серверный процесс в группу (чтобы вся система со всеми ее пользователями попала под ограничения), либо заставила сервер помещать каждый новый сеанс в новую группу.

    
ответ дан Thomas Leonard 10.05.2009 в 20:40
8

Чтение страницы codepad.org/about может дать вам несколько интересных идей.

Ссылка

    
ответ дан Alix Axel 28.04.2009 в 05:19
5

chroot , jail , контейнер , VServer / OpenVZ / и т. д., как правило, более безопасны, чем запуск как непривилегированный пользователь, но более легкий, чем полная виртуализация ОС.

Кроме того, для Java вы можете доверять встроенной песочнице JVM и компиляции C ++, заявки NaCl для того, чтобы иметь возможность использовать код xbox в виде песочницы.

Но, как говорится в ответе Checkers, было доказано, что в прошлом было возможно нанести вредоносный ущерб практически из любой «песочницы», и я ожидал, что в будущем будут обнаружены новые дыры (и, надеюсь, исправлены). Действительно ли действительно запускает ненадежный код?

    
ответ дан ephemient 27.04.2009 в 16:48
2

попробуйте использовать lxc в качестве контейнера для вашего сервера apache.

    
ответ дан amin 15.01.2011 в 07:45
1

Отъезд ulimit и друзей для способов ограничения способности непривилегированного пользователя к DOS машине.

    
ответ дан Douglas Leeder 27.04.2009 в 11:25
1

Попробуйте немного узнать о настройке политик для SELinux. Если вы используете окно Red Hat, вам хорошо идти, поскольку они упаковывают его в дистрибутив по умолчанию.

Это будет полезно, если вы знаете, к каким кодам не должен иметь доступ. Или вы можете сделать обратное, и только предоставить доступ к определенным вещам.

Однако эти политики сложны и могут потребовать больше инвестиций вовремя, чем вы можете пожелать.

    
ответ дан supercheetah 10.05.2009 в 21:17
1

Используйте Ideone API - самый простой способ.

    
ответ дан kuszi 11.08.2010 в 12:34
  • Ideone API ограничивает количество запросов до 1000 в месяц. Это одна из причин, по которой я хочу создать своего собственного онлайн-судьи. –  SinnerShanky 14.07.2013 в 23:07
  • @SinnerShanky Если вам нужна услуга онлайн-судьи, тогда есть много готовых услуг. Например. DOMjudge - это тот, который вы можете установить на свой собственный сервер. Вы также можете использовать SPOJ, который позволяет устанавливать настраиваемый конкурс (и использует тот же движок, что и ideone). BTW: Ideone позволяет больше представлений в заряженном варианте. –  kuszi 16.07.2013 в 21:02
0

Не уверен, сколько усилий вы хотите внести в эту вещь, но можете ли вы запустить Xen, как веб-хосты VPS?

Ссылка

Это позволит обеспечить полный доступ root на их маленьком фрагменте сервера без ущерба для других пользователей или базовой системы.

    
ответ дан Travis 10.05.2009 в 20:51