Рейтинг:0

Как уменьшить риски, связанные с намеренным предоставлением пользователям возможности запускать код на сервере с эффективным использованием ресурсов?

флаг us

Обобщить:

Я хочу запустить несколько серверов на хосте для разных групп пользователей и позволить им добавлять и изменять функциональность серверов во время выполнения с помощью некоторой формы сценариев. Это на 100% необходимая функция для того, что я хочу сделать, но, очевидно, существует большой потенциал того, что это может пойти не так; какие действия/подходы я могу предпринять, чтобы снизить связанные с этим риски?

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

Чтобы уточнить:

Пользователи будут подключаться к главному серверу, который будет обрабатывать аутентификацию и облегчать доступ к выбранным ими серверам с поддержкой сценариев. Я ожидаю, что пользователи установят соединение с сервером, поддерживающим сценарии, а затем напрямую свяжутся с ним для сеанса; это кажется логичным с точки зрения разработчика приложений, я не уверен, что это плохая практика безопасности?

Все серверы будут работать под управлением Linux и будут работать на хосте Linux.

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

Серверам с поддержкой сценариев также потребуются некоторые данные, связанные с пользователями, но в основном они будут содержать контент, созданный пользователями; каждый скриптовый сервер будет хранить эти данные в базе данных SQLite.

Пользователи не должны иметь возможности запускать какой-либо код на главном сервере.

Я предполагаю, что серверы с поддержкой сценариев будут использовать язык вроде Tcl или Lua, которые можно встраивать и позволять предоставлять пользователям только часть их функций. Tcl делает это через «безопасный интерпретатор»; Lua, по-видимому, имеет некоторые возможности песочницы.

Я не ожидаю, что эти языковые функции полностью защитят мои серверы от компрометации.

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

Следующая часть, где я особенно не уверен, что делать:

Запуск каждого сервера на собственной виртуальной машине с VirtualBox или чем-то подобным обеспечил бы, как мне кажется, очень хорошую изоляцию, однако это также потребовало бы много ресурсов; Мне нужно избегать этого, или же найти дистрибутив Linux, который потребляет всего около 5-20 МБ ОЗУ, что мне кажется маловероятным, и все же, вероятно, будет намного больше ресурсов, чем будут использовать сами серверы, что было бы очень непривлекательно.

Есть ли хороший ответ или альтернатива этому?

В конечном счете, хотя я надеюсь избежать компрометации какой-либо системы, я ожидаю, что это произойдет в тот или иной момент; если кто-то захочет это сделать, они разберутся.

Я ищу ресурсосберегающий способ сделать так, чтобы один скомпрометированный сервер не приводил к компрометации других; еще лучше было бы, если бы я мог предотвратить использование скомпрометированного сервера для создания хаоса в Интернете. Я также хотел бы иметь хороший способ оправиться от этого; Я намерен делать резервные копии и отправлять их в другое место, но мне были бы интересны любые другие предложения - однако я вижу, что это еще один вопрос.

Ответить или комментировать

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