Админ заблокирован на сайте после удаления ключей двухфакторной аутентификации из настроек

Шаги для воспроизведения

  1. Являйтесь администратором на актуальном сайте Discourse, на котором включены один или несколько ключей двухфакторной аутентификации, например, ключи безопасности или приложение-аутентификатор.
  2. Убедитесь, что вход и выход с использованием этих ключей двухфакторной аутентификации выполняются успешно.
  3. Убедитесь, что настройка сайта, требующая двухфакторного входа, установлена в значение «нет».
  4. Удалите все элементы двухфакторной аутентификации из своей учетной записи администратора, используя стандартные инструменты интерфейса на вкладке «Безопасность» в настройках профиля пользователя администратора.
  5. Выйдите из системы.

Ожидаемое поведение

  1. Вход на сайт с использованием имени пользователя или пароля; доступ предоставлен; или
  2. Вход на сайт с использованием опции «Отправить мне ссылку на электронную почту»; доступ предоставлен.

Фактическое поведение

Оба «ожидаемых» сценария завершаются ошибкой, и вход в систему невозможен:

Выбранный метод двухфакторной аутентификации не включен для вашей учетной записи.

Дальнейший вход в систему с учетной записи администратора невозможен.


Стоит отметить, что я на самом деле не оказался заблокированным на рассматриваемом сайте; у меня оставалась активная сессия на другом компьютере, и я смог перейти к этой сессии, чтобы снова добавить аутентификатор на основе токена и получить доступ. Однако, если бы у меня не было другой активной сессии, я бы оказался «полностью» заблокированным.

10 лайков

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

4 лайка

Полагаю, это и есть ошибка? Мы не должны позволять это, если настройка вашего сайта требует, чтобы у всех администраторов была включена двухфакторная аутентификация.

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

Я не совсем уверен, что это правильная логика? У меня не было включена принудительная вторая факторная аутентификация ни на чём, кроме значения по умолчанию «нет», и действительно небезопасно предполагать, что каждая установка имеет более одной учётной записи администратора. Похоже, что после удаления ключей 2FA из профиля где-то не удаляется какой-то другой флаг…

Я думаю, что вы не полностью заблокированы, вы можете использовать консоль для восстановления прямо сейчас

Предполагаю, это допустимое экстренное обходное решение, хотя оно может быть за пределами навыков администратора, который не управляет своим сервером, и ему, возможно, придётся искать системного администратора.

4 лайка

Мне интересно, остались ли коды восстановления без изменений. Не могли бы вы попробовать ввести один из них?

1 лайк

@Osama пока вы в коде, возможно:

  • ЕСЛИ пользователю не будет разрешен повторный вход после удаления этого 2FA (это их последний 2FA, и для учетной записи требуется 2FA в соответствии с настройками уровня доверия или настройками администратора)

  • ТО не разрешайте им удалять последний 2FA и отображайте ошибку.

1 лайк

Кажется, я столкнулся с той же ошибкой (версия Discourse 2.7.10, обновлена сегодня).

Мне были предоставлены права администратора, и я включил двухфакторную аутентификацию (2FA). Позже я создал для себя второго пользователя с другого адреса электронной почты, чтобы использовать его исключительно для администрирования, и также предоставил этому пользователю права администратора.
Затем я убрал права администратора у своего оригинального пользователя и удалил все методы 2FA. Теперь мой оригинальный пользователь получает ошибку, описанную автором оригинального поста (OP).
У меня нет доступа к консоли этого сервера. На сайте не принудительно требуется 2FA для администраторов.

Не могли бы вы подробно описать, что именно нужно выполнить в консоли, чтобы решить эту проблему?

Кстати, причина моих действий в том, что я хочу подчиняться обычным правам доступа и получать (или не получать) уведомления для приватных групп на сайте через своего обычного пользователя, возможно, с активированным режимом рассылки. Как обычному пользователю мне не требуется лишнее неудобство в виде 2FA.

Конечно, администратор может видеть всё, поэтому здесь действует принцип доверия: он не будет без необходимости подглядывать. Этот пользователь может отключить все уведомления и не включать режим рассылки.

1 лайк

Думаю, у вас не будет возможности использовать коды восстановления, так как их можно применить только в процессе входа с двухфакторной аутентификацией?

@sam Вы интригующе упоминаете, что эту проблему можно решить через консоль, но не уточняете, что именно нужно сделать. Я был бы очень признателен за подсказку, как исправить именно эту проблему.

Это хоть какая-то помощь?

2 лайка

Я подозреваю, что это не так, поскольку в аккаунте уже отключена двухфакторная аутентификация, или, точнее, все методы 2FA были удалены из аккаунта (в профиле 2FA отображается как «нет»), однако вход всё ещё пытается использовать двухфакторную аутентификацию.
Эта инструкция предназначена для пользователя, у которого 2FA включена, но он потерял или забыл средство генерации действительного токена.

РЕШЕНИЕ: Войдите под учетной записью администратора, перейдите на страницу сведений заблокированного пользователя, прокрутите страницу до самого низа и нажмите красную кнопку Имитация входа. Затем в настройках пользователя добавьте метод двухфакторной аутентификации (для этого потребуется пароль пользователя). Секретный ключ 2FA необходимо передать заблокированному пользователю. В данном случае я являюсь обоими пользователями, поэтому это несложная задача :wink:

1 лайк

Отлично. :+1::slightly_smiling_face:

Позволило ли это вам затем успешно отключить двухфакторную аутентификацию для пользователя?

Нет. Удаление метода двухфакторной аутентификации снова заблокировало пользователя.

Ведёт ли отключение 2FA через кнопку «Отключить всё» иначе, чем удаление последнего метода 2FA? То есть, не блокирует ли нажатие этой кнопки доступ к аккаунту?

Мне удалось воспроизвести проблему и найти решение с помощью консоли.

Воспроизведение немного отличается от описанного в первом посте. Шаг 2 является ключевым, шаги 3 и 4 менее важны.

  1. Будьте администратором пользователем на актуальном сайте Discourse с включенными ключами двухфакторной аутентификации (например, ключи безопасности или приложение-аутентификатор).
  2. Включите резервные коды.
  3. Убедитесь, что вход и выход с использованием этих ключей двухфакторной аутентификации проходят успешно.
  4. Убедитесь, что настройка сайта, требующая двухфакторного входа, установлена в значение «нет».
  5. Удалите все элементы двухфакторной аутентификации (аутентификаторы и ключи безопасности) из вашей учетной записи администратора с помощью стандартных инструментов интерфейса на вкладке «Безопасность» в настройках профиля пользователя.
  6. Выйдите из системы.

Суть проблемы: если все элементы двухфакторной аутентификации удалены, резервные коды всё ещё остаются в базе данных, и при входе система не считает двухфакторную аутентификацию отключенной.

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

После удаления всех аутентификаторов и ключей резервные коды невозможно удалить даже через раздел «Профиль — Безопасность».

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

Обходное решение: удалите все записи UserSecondFactor для этого пользователя из базы данных.

UserSecondFactor.where(user_id: 1).delete_all

12 лайков

Возможно, в более новой версии Discourse будет реализовано исправление для этого? У меня сегодня произошло точно такое же, и восстановить доступ к аккаунту было очень сложно.

1 лайк

У меня та же проблема: пользователь жалуется, что не может войти в систему. У этого пользователя ранее была включена двухфакторная аутентификация (2FA), но позже он её отключил. При попытке входа он получает сообщение об ошибке:

Выбранный метод двухфакторной аутентификации не включён для вашей учётной записи.

  • В админ-меню я вижу, что в профиле пользователя указано: «Двухфакторная аутентификация» — «Нет».

  • У меня нет пароля пользователя, чтобы воспользоваться этим обходным решением: Admin locked out of site after deleting two-factor keys from prefs - #13 by ewblen. Даже если бы он у меня был, у меня самого нет методов 2FA, которые можно было бы там добавить.

  • Поскольку просить пользователя предоставить пароль — дурной тон, я попытался изменить его адрес электронной почты или добавить дополнительный адрес, которым я управляю. Однако после нажатия кнопки «Подтвердить» по ссылке из письма с подтверждением я получаю следующую ошибку:

Выбранный метод двухфакторной аутентификации недействителен.

… и адрес электронной почты не изменяется/не добавляется.

  • У меня нет доступа к консоли или базе данных этой установки Discord, так как она находится под управлением.

Есть ли что-то ещё, что я могу попробовать? Или пользователь навсегда заблокирован в своей учётной записи?

Это ужасно.

У меня нет доступа к консоли Discourse, так как это «хостинговая» версия Discourse.

Администраторы должны иметь возможность сбрасывать настройки двухфакторной аутентификации (2FA) через интерфейс администратора. Крайне непрофессионально требовать от наших пользователей предоставить пароли.

Это явно критическая ошибка, которую необходимо исправить. Как мы можем официально сообщить об этой проблеме и отслеживать прогресс её исправления?

Как проект с открытым исходным кодом, использующий хостинговую версию Discourse, я не имею доступа к консоли или базе данных; у меня есть только интерфейс администратора.

На самом деле я не согласен. Когда 2FA отключена, резервные коды 2FA должны полностью игнорироваться и вообще не иметь значения.

Исправляя проблему в неправильном месте (когда удаляется последний метод 2FA, удалять резервные коды), мы всё равно оставим пользователей, которые не могут войти в систему и просто сдаются, не сообщая об этом.

Исправляя саму ошибку (учитывая резервные коды, когда 2FA отключена), мы решим проблему для 100% затронутых пользователей немедленно, вместо того чтобы просто убедиться, что это не будет постоянно происходить с новыми пользователями.

У меня сработало, пользователь предоставил мне пароль.

Вы не должны напрямую отключать 2FA. Сначала необходимо:

  • удалить все резервные коды 2FA
  • трижды проверить, что все резервные коды 2FA удалены
  • и только после этого отключить 2FA

Используя этот метод, вы действительно сможете отключить 2FA. Это верно как для администраторов, имитирующих вход от имени пользователей для решения проблемы, так и для обычных пользователей, которые просто хотят отключить 2FA.