Каковы причины отказа от размещения компилятора на рабочем сервере?

Там, где я сейчас работаю, у нас были небольшие дебаты о развертывании нашего кода Python на рабочих серверах. Я проголосовал за создание бинарных зависимостей (например, драйверов python mysql) на самом сервере, просто используя pip install -r requirements.txt. На это было быстро наложено вето без лучшего объяснения, что «мы не ставим компиляторы на живые серверы». В результате наш процесс развертывания становится запутанным и слишком сложным просто для того, чтобы избежать этого шага компиляции.

Мой вопрос таков: по какой причине в наши дни следует избегать компилятора на живых серверах?


person Phil Jackson    schedule 30.04.2012    source источник
comment
Разве вам не нужно будет устанавливать эти зависимости для работы в продакшене?   -  person DeaconDesperado    schedule 01.05.2012
comment
@DeaconDesperado, да, но их не нужно строить на коробке, в которой они в конечном итоге будут находиться.   -  person Phil Jackson    schedule 01.05.2012
comment
Я знаю, что PIP создает их после загрузки пакетов, но я никогда не слышал, чтобы это сразу отвергалось как «нарушение условий сделки» для сред развертывания, тем более что это нужно сделать только один раз. Заморозка пипсов в сочетании с тканью и виртуализацией — практически единственная методология развертывания, с которой я когда-либо был знаком. Я с вами, Фил, для меня это звучит как излишнее усложнение, по крайней мере, в случае PIP и python.   -  person DeaconDesperado    schedule 01.05.2012


Ответы (3)


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

  • Сведите к минимуму использование ресурсов. GCC может занимать немного дополнительного места на диске, но, вероятно, недостаточно, чтобы иметь значение — и он не будет работать большую часть времени, поэтому использование ЦП/памяти невелико. беспокойство.
  • Свести к минимуму сложность. Сборка на вашем сервере может добавить еще несколько режимов сбоя в ваш процесс сборки (если вы строите в другом месте, то, по крайней мере, вы заметите что-то не так прежде, чем начнете возиться со своим рабочим сервером), но в противном случае это не будет мешать.
  • Сведите к минимуму поверхность атаки. Как отмечали другие, к тому времени, когда злоумышленник сможет использовать компилятор, вы, вероятно, уже облажались.

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

Особенно параноики из нас заметят, что pip (и easy_install) с радостью установят пакеты из PYPI без какой-либо формы аутентификации (без SSL, без подписей пакетов, ...). Кроме того, многие из них на самом деле не размещены на PYPI; pip и easy_install следуют перенаправлениям. Итак, здесь есть две проблемы:

  • Если pypi или любой другой сайт, на котором размещены ваши зависимости, выйдет из строя, процесс сборки завершится ошибкой.
  • Если злоумышленнику каким-то образом удастся выполнить атаку «человек посередине» на ваш сервер, когда он пытается загрузить пакет зависимостей, он сможет вставить вредоносный код в загрузку.

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

person akgood    schedule 01.05.2012

Я бы посоветовал обратиться к этому сообщению о сбое сервера.

Имеет смысл избегать удаленной компиляции эксплойтов

Для меня также имеет смысл, что с точки зрения безопасности это только усложнит задачу угонщику без компилятора, но это не идеально.

person Zeugma    schedule 30.04.2012
comment
Если у кого-то есть доступ для запуска произвольных команд в вашей системе, вы уже облажались. (как говорится в связанном посте) - person Michael Mior; 01.05.2012

Это сильно нагрузит сервер?

person 1321941    schedule 30.04.2012
comment
Иногда компиляция нескольких вещей не должна вызывать большой нагрузки. - person Michael Mior; 01.05.2012
comment
Хороший момент для системы с интенсивным использованием ЦП, но это простые серверы приложений, и в этом случае накладные расходы незначительны. - person Phil Jackson; 01.05.2012
comment
@MrD Верно, но я не встречал пакетов Python, требующих огромных усилий при компиляции. - person Michael Mior; 01.05.2012