Каковы причины не размещения компилятора на живом сервере?
Где я сейчас работаю, у нас были небольшие дебаты о развертывании нашего кода Python на производственных серверах. Я проголосовал за создание бинарных зависимостей (таких как драйверы Python MySQL) на самом сервере, просто используя pip install -r requirements.txt
, Это было быстро наложено вето без лучшего объяснения, что "мы не размещаем компиляторы на живых серверах". В результате наш процесс развертывания становится запутанным и чрезмерно сложным, чтобы избежать этого этапа компиляции.
Мой вопрос заключается в следующем: какова причина того, чтобы в наши дни не использовать компилятор на живых серверах?
3 ответа
В целом, при установке серверов преобладает мнение, что они должны быть максимально урезаны. Есть несколько причин для этого, но они не применяют все это непосредственно к вашему вопросу о компиляторе:
- Минимизируйте использование ресурсов. GCC может занять немного дополнительного дискового пространства, но, вероятно, этого недостаточно, и он не будет работать большую часть времени, поэтому использование ЦП / памяти не представляет большой проблемы.
- Минимизировать сложность. Сборка на вашем сервере может добавить еще несколько режимов сбоя в ваш процесс сборки (если вы собираете в другом месте, то, по крайней мере, вы заметите что-то не так, прежде чем связываться с вашим рабочим сервером), но в противном случае это не помешает.,
- Минимизируйте поверхность атаки. Как уже отмечали другие, к тому времени, когда злоумышленник сможет использовать компилятор, вы, вероятно, уже облажались..
В моей компании нам, как правило, не слишком важно, установлены ли на наших серверах компиляторы, но мы также никогда не запускаем pip
на наших серверах, по совсем другой причине. Мы не так обеспокоены тем, где создаются пакеты, но когда и как они загружаются.
Особенно параноик среди нас заметит, что pip (и easy_install) с радостью установят пакеты из PYPI без какой-либо формы аутентификации (без SSL, без подписей пакетов, ...). Кроме того, многие из них на самом деле не размещены на PYPI; pip и easy_install следуют перенаправлениям. Итак, здесь есть две проблемы:
- Если pypi - или любой из других сайтов, на которых размещены ваши зависимости - выйдет из строя, то ваш процесс сборки не удастся
- Если злоумышленнику каким-то образом удастся выполнить атаку "человек посередине" на ваш сервер при попытке загрузить пакет зависимостей, он сможет вставить вредоносный код в загрузку.
Таким образом, мы загружаем пакеты при первом добавлении зависимости, делаем все возможное, чтобы убедиться, что источник является подлинным (это не является надежным), и добавляем их в нашу собственную систему контроля версий. На самом деле мы собираем наши пакеты на отдельном сервере сборки, но это менее важно; мы просто считаем полезным иметь двоичный пакет, который мы можем быстро развернуть в нескольких экземплярах.
Я бы предложил обратиться к этому сообщению о неисправности сервера.
Имеет смысл избегать удаленной компиляции эксплойтов
Для меня также имеет смысл то, что с точки зрения безопасности это только усложнит задачу для угонщика без компилятора, но это не идеально.