2FA логон в Windows Server

by, Yevgeniy Goncharov, 20-Apr-2020
  • otp
  • windows
  • user
  • logon
  • 2fa

Использование одноразового (OTP) пароля в момент входа пользователя в систему т.е. на экране входа появляется дополнительное поле в которое вводится шестизначный код из Google / Microsoft Authenticator, пример такого окна:

2FA OTP

Установка необходимого софта

Список ниже:

Credential Provider

На сегодня можно использовать одну из нескольких версий:

  1. Более старая, но без лишних "наворотов" версия - https://github.com/LastSquirrelIT/MultiOneTimePassword-CredentialProvider
  2. Свежая версия которая может работать с multiotp web-сервером - https://download.multiotp.net/credential-provider/

Далее:

  1. Установить Visual C++ Redistributable
  2. Распаковать загруженный архив multiotp_x.x.x.x
  3. Скопировать из него папку windows например в корень диска c:\ (на самом деле неважно куда будет скопирован данный каталог)
  4. Переименовать в что-то более понятное, например MultiOTP

2fa logon MultiOTP

Предварительная настройка

Предварительная настройка производится в командной строке запущенной от имени администратора, первым делом можно указать провайдера (будет отображаться в аутентификаторе)

multiotp.exe -debug -config issuer="Sys-Adm.in"

Далее можно включить дебаг-лог пол умолчанию и отключить префикс для пин-кода (будет использоваться просто шесть цифр из GA):

multiotp.exe -debug -config default-request-prefix-pin=0 display-log=1

Обязательно нужно убедиться, что на машине корректно настроен и работает NTP, обычно в свежих релизах ОС Windows уже w32tm настроен на синхронизацию, проверить можно в командной строке выполнив команду:

w32tm /query /status

Работа с учетными записями

Здесь нужно уяснить несколько важных моментов:

  • Учетные записи создаваемые в multiotp должны совпадать с теми, что есть в системе
  • OTP будет работать для всех пользователей системы, не важно создавался OTP для пользователя ранее или нет

Далее на примере создания учетной записи рассмотрим сценарий настройки пользователя, например создадим учетную запись admin:

net user /add admin P@ssw0rd!

Если необходимо - добавим новую учетную запись в группу администраторов:

net localgroup Administrators admin /add

Далее необходимо сгенерировать hex ключ длиной в 20 символов, например здесь:

2fa otp windows server logon

Если есть под рукой Linux система можно использовать готовый генератор, после чего создать пользователя уже в multiotp:

multiotp.exe -debug -create admin TOTP hex-key 6

2fa windows logon

Сгенерировать QR код:

multiotp -qrcode admin > c:\MultiOTP\users\admin.png

Это изображение уже можно сканировать Google Authenticator'ом для дальнейшего использования. Для удобства его тут-же можно открыть встроенным mspaint:

mspaint c:\MultiOTP\users\admin.png

2fa otp windows logon QR

Использование web-сервера

Для тех, кто не хочет возиться с командной строкой, можно использовать web-сервер, который можно установить из MultiOTP каталогоа при помощи bat скрипта webservice\_install.bat:

2fa install multiotp bat sxript

После его запуска запуститься браузер в котором можно управлять учетными записями:

2fa install multiotp bat sxript

По нажатию на кнопку "print" откроется страница в том числе с QR кодом

Установка Credential провайдера

Далее устанавливается Credential провайдер (из пункта 1), на одном из этапов нужно будет указать каталог с нашим MultiOTP и включить параметр Default Provider:

2fa credential provider

Тестирование

Теперь можно тестировать корректную работоспособность OTP в командной строке:

multiotp.exe -display-log admin GAUTH-PIN

В итоге в выводе должно отобразиться сообщение об успешной операции:

2fa credential provider

Использования генератора пользователей в Linux

Генератор создает все, что необходимо - ключи, команды для создания пользователей и тп, для генерации скрипту необходимо указать имя пользователя в результате будет весь набор необходимых команд:

2fa credential provider

Для корректной работы необходимо, что бы была установлены пакеты bc, vim-common, в CentOS например устанавливается штатным способом:

dnf install bc vim-common

Траблшутинг

  • Всю необходимую информацию можно найти на оф. wiki проекта
  • Если "все сломалось" - необходимо загружаться в безопасный режим и там решать проблемы (в этом режиме OTP не работает)

Установка Credential провайдера (вариант 2)

Можно установить свежий релиз, который может работать с web-сервером, для этого нужно сначала указать multiotp секрет для подключения:

multiotp -config server-secret=secret

В момент установки указать требуемые параметры:

2fa credential provider

Не забудьте обязательно протестировать при помощи установщика работоспособность провайдера. Этот вариант тестировался и он работоспособен, к нему есть ряд комментариев:

  • web-сервер лишний (в моем случае точно)
  • нужно докручивать принудительный ввод пина

Доп. ссылки