VPN до входа в систему на macOS: разблокировка, окно входа, сеанс
Разблокировка FileVault, окно входа и сеанс пользователя — отдельные этапы. Клиент для рабочего стола, запускаемый при входе, решает только последний из них.
Вот убеждение, которое стоит людям недели: что у Mac есть единственный момент под названием до входа и что клиент VPN либо запускается тогда, либо нет. На самом деле у машины есть как минимум три момента, когда доступ к сети важен, и их разделяет то, кому в этот момент разрешено держать учётные данные. Клиент, запущенный из элемента входа, покрывает ровно один из них, и это последний.
Миф о том, что одна настройка покрывает всю загрузку
Перечитайте страницу продукта и посмотрите, какой этап называет функция. Флажок с надписью запускать при входе означает элемент входа, который работает после появления сеанса пользователя. Флажок с надписью подключаться по требованию означает, что клиент открывает соединение, когда трафик соответствует правилу, а для этого по-прежнему нужны доступные клиент и его учётные данные.
Ни то, ни другое не достигает процесса загрузки. Это не ограничение, которое поставщик забыл убрать; это то, что позволяет операционная система. До разблокировки тома нет работающей системы, из которой можно запустить клиент, а после выхода секреты пользователя уходят вместе с сеансом. Две отдельные стены, и ни одна не уступает другому флажку.
Как только вы разделите этапы, исходный вопрос меняет форму. Вместо того чтобы спрашивать, запускается ли VPN до входа, вы спрашиваете, какой из трёх конкретных моментов должен работать, и затем обнаруживаете, что у каждого свой владелец: стек шифрования, сетевое расширение или сеанс пользователя.
Что на самом деле происходит на каждом этапе
Загрузка начинается с зашифрованного тома, который нужно разблокировать до того, как появится система, пригодная для любой общей работы. Эта разблокировка происходит в ограниченном контексте с ограниченным набором учётных данных, и Apple ясно документирует, что зашифрованные данные остаются недоступными без действительной разблокировки.
Затем появляется окно входа, где система работает, но сеанса пользователя ещё нет. Расширение в контексте пользователя уже завершилось, если пользователь вышел, а глобальное системное расширение может ещё работать, но работать не то же самое, что держать учётные данные, нужные вашему VPN.
Потом наступает сеанс, где обычный клиент может прочитать связку ключей входа, запросить второй фактор и применить переданные маршруты. Большинство функций, которые люди описывают как до входа, на самом деле этот этап, запускаемый в начале сеанса, а не до него.
| Stage | What it can use | What it cannot do |
|---|---|---|
| FileVault unlock | Credentials supplied at the console to unlock the volume | Run an ordinary VPN app or read a user keychain |
| Login window | System context, possibly a joined network | Use a user secret that only exists after login |
| User session | Login keychain, interactive MFA, full client features | Exist before the volume unlocks |
Почему launch daemon не может войти за отсутствующего пользователя
Повышенные привилегии кажутся решением проблемы, но ими не являются. Launch daemon работает как системный процесс без сеанса пользователя за ним, поэтому разблокировать нечего и некому ответить на запрос. Он может открыть сокет и прочитать файл; чего он не может — стать пользователем, которому принадлежат учётные данные. Привилегия не есть идентичность, и именно здесь эти двое путаются.
То, что люди строят в этом промежутке, — скрипт с паролем внутри, а это проблема хуже той, с которой они начали.
Честная версия требования уже. Если машина должна достичь защищённого ресурса, пока никого нет, идентичность, которую принимает этот ресурс, должна быть такой, которую машина может держать без человека: сертификат устройства, учётные данные в системной связке ключей или учётная запись, второй фактор которой не является уведомлением на телефон в чьём-то кармане. Проектируйте эту идентичность осознанно, и вопрос об этапе обычно отвечает сам на себя.
Функция Windows до входа не переносится
В Windows есть документированный механизм доступа до входа для некоторых продуктов удалённого доступа, и название путешествует лучше, чем возможность. Функция, описанная в руководстве по развёртыванию Windows, ничего не говорит о том, реализует ли тот же поставщик эквивалент на macOS.
Запросите заявление, охватывающее оборудование Mac, версию macOS, версию клиента и метод аутентификации, который вы действительно используете. Общего заявления о поддержке недостаточно, потому что разница между работающим и неработающим часто кроется в одном из этих четырёх.
Если поставщик не может ответить, это и есть ответ. Планируйте этап сеанса и проектируйте альтернативу для случая без присутствия, а не обнаруживайте пробел во время развёртывания.
Что просить вместо этого
Напишите требование на языке этапов. Какой ресурс, кому нужен, в каком контексте и с какой приемлемой задержкой, когда соединения ещё нет?
Если ответ — пользователь, который входит и затем нуждается в туннеле, подключения по требованию и элемента запуска достаточно и это недорого. Если ответ — машина, которая перезагружается ночью и должна отчитываться, проекту нужны поддерживаемый путь разблокировки диска, идентичность устройства и процесс восстановления, который работает, когда сеть так и не поднимается. Если ответ — вход в организацию, зависящий от туннеля, то проекты входа, идентичности и VPN нужно строить вместе, а не покупать отдельно.
Документация Apple по FileVault — правильная отправная точка для этапа разблокировки. Всё, что после этого, — вопрос клиента и идентичности, который заявление поставщика должно решить до покупки.