[Перевод] Печальное состояние сисадмина в эпоху контейнеров
Системное администрирование сейчас в печальном состоянии. Оно в хаосе.Я не говорю про олдскульных админов, они знают как управлять системами и контролировать обновления.
Проблема в контейнерах, готовых виртуальных машинах (prebuilt VMs), а также в невероятном хаосе, который они создают, потому что в их концепции нехватает «доверия» и «обновлений».
Давайте взглянем на Hadoop. Судя по всему, никто не знает как собирать Hadoop с нуля; это просто огромная куча из зависимостей, необходимых версий и утилит сборки.
Ни одна из «замечательных» утилит не собирается традиционной коммандой make. Каждая утилита поставляется со своим собственным не переносимым и не совместимым c чем-либо «методом дня» для сборки.
И так как никто не умеет собирать вещи с нуля, то все просто скачивают бинарники со случайных веб-сайтов, часто даже без проверки цифровой подписи.Рай для вирусов и АНБ. Больше не нужно эксплуатировать уязвимости в безопасности; достаточно просто сделать «приложение», «виртуальную машину» или «образ для Docker» и позволить людям скачать этот инфицированный код к себе в сеть.
Типичным примером будет викистраница в дебиане, посвящённая Hadoop. По существу, люди отказались от своих попыток собирать Hadoop с нуля для дебиана и предлагать качественные пакеты ещё в 2010 году.
Чтобы собрать Apache Bigtop, по-видимому, требуется сначала установить puppet3. Позвольте ему выкачать магические данные из интернета и попытаться запустить sudo puppet, чтобы включить бакдоры от АНБ (например он скачает и установит устаревший JDK, потому что он считает вас слишком тупым, чтобы установить джаву). Ну, а потом надейтесь, что gradle не выплюнет 200 строчек бесполезных ошибок.
Я не шучу, он попытается запустить такие команды как:
/bin/bash -c «wget http://www.scala-lang.org/files/archive/scala-2.10.3.deb; dpkg -x ./scala-2.10.3.deb /» Заметьте, он даже не устанавливает пакет правильным образом, а лишь распаковывает его в ваш корневой каталог. Во время загрузки не проверяется никаких подписей и даже SSL-сертификатов (источник: Bigtop puppet manifests)Даже если сборка пройдёт нормально, то всё равно она будет использовать неподписанные бинарники, скаченные из Maven’а.
Сегодня, вместо чистой модульной архитектуры везде огромная куча заблокированных зависимостей (interlocked dependencies). В последний раз, когда я видел classpath Hadoop’а, он уже состоял из более 100 jar-файлов. Готов поспорить, что сейчас там их 150, даже без использования HBaseGiraphFlumeCrunchPigHiveMahoutSolrSparkElasticsearch или ему подобных из Apache.
Stack — это новый термин, означающий «я понятия не имею, что я на самом деле использую».
Maven, ivy и sbt — это утилиты для скачивания неподписанного кода и запуска его на вашем компьютере.
С контейнерами этот хаос ещё хуже.
Когда-нибудь пробовали сделать обновление безопасности для контейнера?
По существу, подход Docker’а состоит в скачивании неподписанных бинарников, запуске их, и надежды, что они не содержат бакдоров для сети вашей компании.
Мне это напоминает shareware для винды из девяностых.
Когда появится первый Docker-образ, содержащий тулбар от Ask? Первый интернет-червь, распространяющийся через Docker?
Все эти годы дистрибутивы Linux пытались предоставлять вам надёжные операционные системы, с подписанными пакетами, собранными из сети доверия (web of trust). Некоторые даже работают над воспроизводимыми сборками.А потом, всё стало виндофициривано. «Приложения» стали безумием, которое вы скачиваете и запускаете даже не задумываясь о безопасности или способах обновления. Потому что «мы живём лишь один раз».
Update: меня поправили, что это началось ещё до Docker’а: «Docker — это новый 'curl | sudo bash'». Это так, но сейчас стало особенно популярно скачивать и запускать недоверенное ПО в своём «датацентре». И это очень плохо.Раньше, админы прилагали все усилия, чтобы предотвратить уязвимости в безопасности;, а теперь они называют себя «devops» и вводят эти дыры в свою сеть самостоятельно!