Учётная запись администратора Stronghold даёт доступ к политикам, методам аутентификации и секретам, поэтому одного пароля или сессии IdP для неё недостаточно. В этом руководстве для всех администраторов включается обязательная проверка одноразового кода TOTP при входе.
Механизмы MFA в Stronghold
Stronghold проверяет второй фактор на этапе входа (login MFA): после успешной проверки основного метода аутентификации токен выдаётся только после подтверждения второго фактора. Методы MFA и правила их применения настраиваются в подсистеме Identity по путям identity/mfa/method/* и identity/mfa/login-enforcement/*.
В документации описаны два метода MFA:
| Метод | Как подтверждается вход | Когда выбирать |
|---|---|---|
| TOTP | Одноразовый код из приложения-аутентификатора | Не нужен внешний сервис, подходит для закрытого контура |
| Multifactor | Push-уведомление, Telegram или звонок через сервис Multifactor | В организации уже используется Multifactor |
Правило login enforcement может применяться к сущностям (identity_entity_ids), группам Identity (identity_group_ids), конкретным подключениям методов аутентификации (auth_method_accessors) или ко всем подключениям метода определённого типа (auth_method_types).
В базовом Stronghold доступна только MFA при входе. Проверка MFA при обращении к отдельным путям (sys/mfa/method/* и mfa_methods в политиках) доступна только в Stronghold EE.
Цель
После настройки:
- Все администраторы Stronghold при входе вводят код TOTP.
- Проверка применяется к группе Identity
ad-stronghold-admins, поэтому новые администраторы получают её автоматически. - Задокументирована процедура восстановления, если администратор потерял устройство с аутентификатором.
- Операции с настройками MFA видны в журнале аудита.

Предварительные требования
Перед началом подготовьте:
- Токен Stronghold с правами на настройку Identity и политик.
- Группа Identity
ad-stronghold-admins, в которую входят сущности администраторов. Для каталогов и IdP используйте внешнюю группу с псевдонимом группы каталога, как в руководстве «Интеграция с Active Directory». - Приложение-аутентификатор с поддержкой TOTP у каждого администратора.
- Подготовленный аварийный доступ, на который правило MFA не распространяется.
- Утилита
jqна рабочей станции администратора. - Для контроля по журналу аудита — включённое устройство аудита.
Шаг 1. Создайте метод TOTP
Создайте метод MFA TOTP и сохраните его идентификатор:
TOTP_METHOD_ID=$(d8 stronghold write -format=json identity/mfa/method/totp method_name=admin-totp issuer=Stronghold period=30 algorithm=SHA256 digits=6 max_validation_attempts=5 | jq -r '.data.method_id')
echo $TOTP_METHOD_IDОсновные параметры метода:
| Параметр | Описание |
|---|---|
method_name | Уникальное имя метода MFA |
issuer | Название, которое приложение-аутентификатор показывает рядом с кодом |
period | Период смены кода в секундах. По умолчанию — 30 |
algorithm | Алгоритм хеширования: SHA1 (по умолчанию), SHA256 или SHA512 |
digits | Количество цифр в коде: 6 или 8 |
skew | Допустимое отклонение в периодах при проверке кода: 0 или 1. По умолчанию — 1 |
max_validation_attempts | Максимальное количество попыток проверки кода |
Полный список параметров приведён в справочнике API Identity.
Не все приложения-аутентификаторы поддерживают SHA256 и 8-значные коды. Если у администраторов разные приложения, используйте algorithm=SHA1 и digits=6.
Шаг 2. Зарегистрируйте аутентификаторы администраторов
Зарегистрируйте TOTP у всех администраторов до включения обязательной проверки. Если у сущности нет секрета, проверка второго фактора завершается ошибкой MFA secret … not present in entity, и вход не удаётся.
Сущность администратора создаётся при первом входе в Stronghold. Чтобы узнать идентификатор своей сущности, администратор выполняет команду:
d8 stronghold token lookup -format=json | jq -r '.data.entity_id'Выберите один из способов регистрации.
Выпуск QR-кода администратором безопасности
Администратор безопасности выпускает QR-код для сущности администратора.
Получите идентификатор сущности по имени:
ENTITY_ID=$(d8 stronghold read -field=id identity/entity/name/<ENTITY_NAME>)<ENTITY_NAME>— имя сущности администратора.Сгенерируйте TOTP-секрет и QR-код:
d8 stronghold write -field=barcode identity/mfa/method/totp/admin-generate method_id=$TOTP_METHOD_ID entity_id=$ENTITY_ID | base64 -d > /tmp/qr-code.pngПередайте QR-код администратору по защищённому каналу, дождитесь, пока он отсканирует его в приложении-аутентификаторе, и удалите файл:
shred -u /tmp/qr-code.png
Повторный вызов admin-generate для сущности, у которой уже есть секрет этого метода, новый секрет не создаёт: Stronghold возвращает предупреждение Entity already has a secret for MFA method. Чтобы перерегистрировать TOTP, сначала удалите секрет через admin-destroy (подробнее — в разделе «Восстановление при утере устройства»).
Самостоятельная регистрация
Администратор выпускает QR-код для своей сущности.
Добавьте в политику администраторов право на выпуск собственного секрета:
path "identity/mfa/method/totp/generate" { capabilities = ["update"] }Администратор получает QR-код для своей сущности в веб-интерфейсе Stronghold или через CLI:
d8 stronghold write -field=barcode identity/mfa/method/totp/generate method_id=$TOTP_METHOD_ID | base64 -d > /tmp/qr-code.png
Если секрет метода у сущности уже есть, generate его не перезаписывает, а возвращает предупреждение, поэтому украденная сессия не позволяет перерегистрировать TOTP; для сброса нужен admin-destroy.
Шаг 3. Включите обязательную проверку
Создайте правило login enforcement для группы администраторов.
Получите идентификатор группы администраторов:
ADMINS_GROUP_ID=$(d8 stronghold read -field=id identity/group/name/ad-stronghold-admins)Создайте правило login enforcement:
d8 stronghold write identity/mfa/login-enforcement/admin-totp mfa_method_ids="$TOTP_METHOD_ID" identity_group_ids="$ADMINS_GROUP_ID"
Если администраторы входят через отдельное подключение метода аутентификации, например userpass по пути admin/, создайте ещё одно правило, привязанное к этому подключению. Дайте ему другое имя, admin-totp-mount, чтобы оно не перезаписало правило admin-totp. Stronghold проверяет все правила, подходящие под вход, поэтому условия обоих правил складываются:
ADMIN_ACCESSOR=$(d8 stronghold auth list -format=json -detailed | jq -r '."admin/".accessor')
d8 stronghold write identity/mfa/login-enforcement/admin-totp-mount mfa_method_ids="$TOTP_METHOD_ID" auth_method_accessors="$ADMIN_ACCESSOR"Не включайте в правило аварийную учётную запись и её подключение метода аутентификации (например, breakglass/). Иначе при потере аутентификаторов войти в Stronghold не сможет никто.
Вход с MFA
CLI
После проверки основного фактора CLI запрашивает код TOTP:
d8 stronghold login -method=oidcПример вывода:
Initiating Interactive MFA Validation...
Enter the passphrase for methodID "22c35aa4-bf37-cf31-4187-c5a676c19aca" of type "totp":
Введите текущий код из приложения-аутентификатора. После успешной проверки CLI сохранит токен.
При входе через API ответ метода аутентификации содержит mfa_request_id. Передайте его вместе с кодом в sys/mfa/validate:
d8 stronghold write -format=json sys/mfa/validate - <<EOF
{
"mfa_request_id": "<MFA_REQUEST_ID>",
"mfa_payload": {
"$TOTP_METHOD_ID": ["<TOTP_CODE>"]
}
}
EOFПлейсхолдеры:
<MFA_REQUEST_ID>— значение поляauth.mfa_requirement.mfa_request_idиз ответа метода аутентификации;<TOTP_CODE>— текущий код из приложения-аутентификатора.
Чтобы CLI не запрашивал код интерактивно и только вывел mfa_request_id, добавьте флаг -non-interactive к d8 stronghold login.
Веб-интерфейс
Чтобы войти через веб-интерфейс, выполните следующие шаги:
- Откройте веб-интерфейс Stronghold и выполните вход выбранным методом.
- После проверки основного фактора введите код TOTP из приложения-аутентификатора.
Восстановление при утере устройства
Если администратор потерял устройство с аутентификатором или оно могло быть скомпрометировано:
Подтвердите личность администратора по независимому каналу, например лично или через руководителя. Зафиксируйте обращение в журнале инцидентов.
Войдите учётной записью администратора безопасности с правами на
admin-destroyиadmin-generate. Пример политики:path "identity/entity/name/*" { capabilities = ["read"] } path "identity/mfa/method/totp/admin-destroy" { capabilities = ["update"] } path "identity/mfa/method/totp/admin-generate" { capabilities = ["update"] }Удалите TOTP-секрет сущности администратора:
ENTITY_ID=$(d8 stronghold read -field=id identity/entity/name/<ENTITY_NAME>) d8 stronghold write identity/mfa/method/totp/admin-destroy method_id=$TOTP_METHOD_ID entity_id=$ENTITY_ID<ENTITY_NAME>— имя сущности администратора.Выпустите новый QR-код, как в шаге 2, и передайте его администратору по защищённому каналу.
Если устройство могло попасть к посторонним вместе с паролем, смените пароль или учётные данные основного метода входа.
Если восстановить нужно доступ единственного администратора, а других учётных записей с правами на admin-destroy нет, воспользуйтесь аварийным доступом.
Контроль по журналу аудита
Изменения настроек MFA и проверки второго фактора записываются в журнал аудита.
Убедитесь, что устройство аудита включено:
d8 stronghold audit listНастройте в SIEM оповещения об изменении настроек MFA. Признаки в журнале аудита:
request.pathравенidentity/mfa/method/totp/admin-destroyилиidentity/mfa/method/totp/admin-generate;request.pathначинается сidentity/mfa/login-enforcement/илиidentity/mfa/method/, аrequest.operationравенupdateилиdelete.
Пример поиска по файловому журналу:
jq -c 'select(.type == "request" and (.request.path | startswith("identity/mfa/"))) | {time, path: .request.path, op: .request.operation, entity: .auth.entity_id}' /var/log/stronghold_audit.logОтслеживайте проверки второго фактора — запросы к
sys/mfa/validate. Большое количество неуспешных проверок для одной сущности может означать попытку подбора кода. Как однофазный вход (заголовок MFA в запросе входа), так и двухфазный (отдельный запрос кsys/mfa/validate) проходят через обычную обработку запросов и записываются в устройства аудита, включая неуспешные проверки; CLI и веб-интерфейс используют тот же API.
Проверка
Проверьте результат:
Убедитесь, что правило создано:
d8 stronghold read identity/mfa/login-enforcement/admin-totpВойдите учётной записью администратора и убедитесь, что Stronghold запрашивает код TOTP.
Введите неверный код и убедитесь, что токен не выдан.
Войдите аварийной учётной записью и убедитесь, что код TOTP не запрашивается.
Очистка
Удалите объекты, созданные в этом руководстве.
Удалите правило login enforcement. Если вы создали правило
admin-totp-mount, удалите его так же:d8 stronghold delete identity/mfa/login-enforcement/admin-totpУдалите метод TOTP:
d8 stronghold delete identity/mfa/method/totp/$TOTP_METHOD_ID