
Привет! Меня зовут Виктор Пантелеев, я менеджер технических проектов в Яндексе. Компьютер — основной инструмент большинства наших сотрудников. А для того, чтобы этот инструмент работал как надо, его следует настроить — быстро для конечного пользователя, в соответствии с его рабочими нуждами и требованиями безопасности.
Раньше этот процесс был исключительно локальным: настройка, или, как её ещё называют, наливка, осуществлялась только в офисах по локальной сети. Но сегодня мы можем настраивать ноутбуки и удалённо. О том, как и почему мы к этому пришли, а также об эволюции процесса я расскажу в этой статье.
Что у нас было и к чему мы пришли
Давным‑давно настройка ноутбука была прямолинейной, но совсем не гибкой. Мы брали компьютер, вручную устанавливали на него ОС, необходимые драйвера и софт, а потом просто снимали образ системы и раскатывали его на все ноутбуки той же модели. Следовательно, приходилось хранить образы для каждой модели устройства, которое использовали в компании. В общем, долго, тяжеловесно и не слишком эффективно: ведь если что‑то пошло не так, образ нужно делать заново.
Но уже более десяти лет настройка ноутбуков в российских офисах организована через PXE для Windows с использованием MDT и аналогичных инструментов для macOS. Во внутренней системе, которую мы разработали, указываются параметры: операционная система, серийный номер ноутбука, логин сотрудника. Нужный воркфлоу выбирается автоматически. При текущей схеме замена ноутбука, к примеру, в случае поломки занимает 10 минут.
Всё это работает быстро и без сбоев в локальной сети благодаря доступу к корпоративным ресурсам и сервисам. Но в 2021 году Яндекс начал открывать международные офисы, где на начальном этапе не было корпоративной сети и стабильного интернета.
Как быть в такой ситуации? Здесь настройку ноутбуков приходилось выполнять вручную: устанавливать систему с флешки или через средства удалённого подключения — с настройкой временного VPN и подключением устройства к домену. Способ рабочий, но медленный и небезопасный. На это уходили часы, поэтому сотрудник поддержки написал скрипты на PowerShell для Windows и Bash для Mac, чтобы автоматизировать некоторые рутинные действия.

Время шло, Яндекс открывал всё новые офисы, география сотрудников расширялась. Настраивать ноутбуки в таких условиях стало ещё сложнее. Порой наливка одного компьютера могла занимать до пяти часов. А ведь до запуска круглосуточной поддержки проблемой была ещё и разница в часовых поясах, мешающая состыковать рабочие графики поддержки и сотрудника.
В общем, весь ворох проблем вынудил нас задуматься об автоматизации настройки. Нам нужно было найти новое решение на смену ручной наливки. Масштабируемое, быстрое, учитывающее особенности интернет‑соединения в разных странах, отсутствие корпоративной инфраструктуры и разницу в часовых поясах.
Когда мы задумались о необходимости удалённой настройки, перед нами открылись два пути: воспользоваться готовыми решениями (вроде Apple Business Manager и Autopilot) или разработать собственную систему. Первый вариант мы отмели, потому что продукты Apple и Microsoft — облачные, и к тому же они в конечном счёте перестали работать в России. Оказалось, что выход всё же один — делать что‑то своё. Этим мы и занялись. И вот что у нас получилось.
Как выглядит текущая схема для пользователя
Сейчас процесс построен максимально просто и прямолинейно. Новый сотрудник, выходя на работу, получает корпоративный ноутбук, с которого заходит на внутренний портал, используя двухфакторную аутентификацию. Далее, уже на портале, сотрудник выбирает услугу «Настройка ноутбука», вводит серийный номер своего компьютера и получает персонализированный установочный пакет. Его нужно скачать и запустить. Вот как это выглядит:

Схема отражает только верхне��ровневые действия. Все процессы мы постарались сделать максимально простыми, дружелюбными и автоматизированными, что требует минимум действий от сотрудника. Весь процесс занимает каких‑то 15 минут, при этом компьютером можно пользоваться, пока идёт настройка.
Это то, как выглядит настройка со стороны. Но «под капотом» у всего процесса немало интересного.
Как технически организована удалённая настройка
TL;DR: Перед нами стояла задача быстро и при минимальном вовлечении пользователя подготовить компьютер к работе. Для этого мы использовали набор скриптов, запакованный в один самораспаковывающийся архив. Его содержание персонализировано для каждого сотрудника с учётом его рабочих нужд. Пакет доставляется через внутренний портал — пользователю достаточно ввести серийный номер ноутбука, подождать, пока подготовится архив, скачать его и запустить. Настройка пройдёт сама.
Наша задача — удалённо подготовить ноутбук пользователя к работе, предоставить все необходимые доступы и установить всё нужное ПО. Сделать это надо максимально быстро, персонализированно — всё‑таки доступы у всех разные — и так, чтобы от сотрудника требовалось как можно меньше действий.
Было бы здорово, если бы пользователь скачивал всего один файл, а тот сам, без стороннего вмешательства, всё настраивал. Собственно, такую схему мы и реализовали с помощью самораспаковывающегося архива — пакета, содержащего набор скриптов, которые нужны для настройки компьютера под корпоративные стандарты.
Пакет с пакетами со скриптами
Мы разработали на C# собственный «распаковщик», к которому побитово прикрепляется конфигурационный разделитель и зашифрованный zip‑архив для Windows с необходимыми данными. При запуске такой пакет — где есть только один exe‑файл — находит разделитель, отделяет архив, распаковывает его и запускает скрипт настройки. В пакете нет логина и пароля для подключения к домену. Вместо них — специальный BLOB для offline domain join, который устанавливается на целевой машине. Он позволяет привязать машину к домену в офлайн‑режиме.
Пакеты для macOS — впрочем, как и для Windows, — собирает оркестратор, но здесь все необходимые данные упаковываются в zip‑архив, внутри которого находится статичный.pkg (его запускает пользователь), а также конфигурационный файл с параметрами. Примерно так мы прежде распространяли Tunnelblick, так что решение с отправкой данных для настройки уже было апробировано. Подробнее о наливке «Маков» мы рассказывали в другой статье на Хабре.
Пакет у каждого свой, персонализированный. Он собирается с учётом нужд сотрудника и параметров компьютера: логина пользователя, операционной системы, модели устройства и так далее.
Вам пакет
Как мы убедились, сборка пакета — процесс весьма хитрый технически. Но за ним также стоит немало разных проверок и взаимодействия разных инфраструктурных сервисов. Ведь нужно получить данные об оборудовании, необходимые сертификаты, права доступа и так далее. Всё это надо было сделать максимально простым для конечного пользователя, но при этом без рисков для информационной безопасности.

Сотруднику же, повторюсь, достаточно ввести серийный номер корпоративного ноутбука на внутреннем портале, чтобы получить пакет настройки.

Распаковка
Что происходит после запуска пакета на Windows? Скрипты устанавливают OpenVPN, настраивают конфигурации и добавляют службу донастройки в автозапуск. Вот что дальше:
Пользователю предлагается перезагрузить устройство.
После перезагрузки в фоновом режиме автоматически подключается временный VPN. Для этого мы используем механизм автоподключения OpenVPN через службу openvpnserv2, которая появилась в версии 2.6.0. Она нужна только для удобного входа сразу в доменную учётную запись до момента настройки основного VPN пользователя.
Во время загрузки системы запускается служба донастройки, которая:
устанавливает необходимые сертификаты;
загружает менеджер конфигураций; автоматика через WMI‑вызовы (Windows Management Instrumentation — механизм управления настройками Windows) к clientsdk форсирует политики и инициирует установку базового ПО, контролируя ход установки;
включает BitLocker также через WMI‑вызовы;
инициирует установку через менеджер конфигураций необходимого ПО безопасности (например, антивируса).
Разработанная служба отслеживает выполнение всех действий, проверяет коды возврата, обновляет политики Windows и менеджера конфигураций, перезапускает процессы и повторяет действия при ошибках (например, если «уснул» компьютер или отключился VPN).
Все операции продолжаются до полного завершения настройки.
При таком подходе если скорость интернета стабильная, большая часть настроек применяется ещё до входа пользователя в доменную учётную запись, так как управляется службой. А после входа пользователь может начать свою работу, пока в фоне происходит донастройка. Отследить прогресс можно с помощью специального небольшого приложения, которое оказывается в трее. Это приложение взаимодействует со службой через именованные каналы (named pipes, способ взаимодействия процессов в Windows).
При этом настройка завершается независимо от действий пользователя: можно отключить VPN, закрыть крышку ноутбука — да хоть перезагрузить его. При запуске служба автоматически проверит все компоненты и продолжит настройку с того места, где остановилась. Ну а если возникнут какие‑то проблемы, то сотрудник поддержки всегда сможет изучить логи процесса и оперативно помочь.
На macOS запускаемый.pkg устанавливает собственную сборку Tunnelblick и поднимает VPN напрямую через OpenVPN из комплекта. При этом фоновые процессы следят за работой VPN и могут переподключить его в случае разрыва. Следующий важный шаг — установка mdm‑профиля (профиль управления мобильными устройствами, который позволяет применять корпоративные политики на macOS). Её должен подтвердить пользователь. Затем компьютер получает нужные политики, включает шифрование и установку нужного ПО, включая Kerberos SSO Extension.
Где бы ни был сотрудник, очень важно, чтобы он мог быстро получить готовый к работе компьютер. Чтобы этого добиться, мы:
отладили процесс автоматического создания пакетов настройки;
обеспечили подключение к корпоративному VPN на Windows и macOS;
создали сервис, с помощью которого любой сотрудник может получить пакет настройки ноутбука, просто введя его серийный номер.
Хотя поддержка по‑прежнему участвует в процессе (одобряет заявки), нагрузка на неё существенно снизилась. Теперь подготовка ноутбука к работе занимает всего 15 минут. Мы прошли долгий путь от ручной установки образов систем к автоматизированной наливке, удобной для пользователя.
Если у вас остались какие‑то вопросы, пожалуйста, задавайте их в комментариях — я обязательно отвечу. Ну и рассказывайте о своём опыте, если вы тоже занимались удалённой настройкой. Какие решения использовали вы? Будет очень интересно почитать!
