Настройка двухступенчатой аутентификации (2FA) для SSH на серверах Ubuntu версии 22.04 и 20.04

Данный учебник объяснит, как активировать двухфакторную аутентификацию SSH на сервере Ubuntu с применением популярного приложения Google Authenticator. Это существенно укрепит безопасность SSH-сервиса на вашем сервере Ubuntu.

Двухфакторная аутентификация функционирует следующим образом: она требует от пользователя предоставить два различных подтверждения своей личности, обычно это что-то, что он знает (пароль) и что-то, что у него есть (например, код из SMS или приложение-генератор).

Для удалённого доступа к серверу Ubuntu обычно достаточно ввести пароль или использовать SSH-ключ. Однако двухфакторная аутентификация (2FA) требует предоставления двух компонентов для входа. Это означает, что для доступа к вашему SSH-серверу потребуется также одноразовый пароль, основанный на времени. Такой пароль вычисляется с помощью алгоритма TOTP, который является стандартом IETF. В настоящее время множество сайтов и сервисов, таких как Facebook, Google и Twitter, предлагают 2FA для защиты учётных записей пользователей. Поэтому активация 2FA на вашем SSH-сервере будет весьма разумным шагом.

Этот учебник продемонстрирует, как выполнить настройку:

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

Обратите внимание: в данной статье мы рассмотрим серверное программное обеспечение с открытым исходным кодом, которое называется

libpam-google-authenticator

Программное обеспечение, установленное из стандартного репозитория Ubuntu, не требует участия компании Google в процессе аутентификации. Как серверная часть, так и мобильное приложение функционируют без необходимости сетевого доступа.

Читайте также:  Как эффективно использовать команду du в Linux для анализа использования дискового пространства

Инсталляция и конфигурация Google Authenticator на сервере Ubuntu.

Зайдите на свой сервер Ubuntu и выполните следующую команду, чтобы установить Google Authenticator из официального репозитория.
Двухфакторная аутентификация SSH на Ubuntu

QR-код служит секретным ключом, который известен только вашему SSH-серверу и мобильному приложению TOTP. После того как вы отсканируете QR-код на своем смартфоне, на экране появится шестизначный одноразовый пароль, который обновляется каждые 30 секунд. Этот пароль вам понадобится для доступа к серверу Ubuntu через SSH.

Google Authenticator TOTP (Time-based One-Time Password) представляет собой приложение, которое генерирует временные одноразовые пароли для двухфакторной аутентификации.

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

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

ssh с двухфакторной аутентификацией на Ubuntu

Конфигурация SSH-демона с поддержкой Google Authenticator.

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

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

Если вы не применяете SSH-ключ, выполните следующие рекомендации.

Запустите файл настроек сервера SSH.

sudo nano /etc/ssh/sshd_config

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

UsePAM yes

ChallengeResponseAuthentication yes

Примечание: В Ubuntu 22.04 вместо ChallengeResponseAuthentication следует использовать KbdInteractiveAuthentication.

UsePAM yes

KbdInteractiveAuthentication yes

PAM (модульная система аутентификации) представляет собой гибкую архитектуру для интеграции различных методов аутентификации в Linux. Чтобы активировать Google Authenticator при подключении через SSH, необходимо настроить PAM и включить аутентификацию с использованием Challenge-Response.

Чтобы активировать двухфакторную аутентификацию для пользователя root, необходимо найти параметр PermitRootLogin и задать ему значение yes. Оно не должно быть установлено на PermitRootLogin no или PermitRootLogin prohibit-password.

PermitRootLogin yes

Сохраните файл и закройте его. После этого внесите изменения.
включите двухфакторную аутентификацию (2FA) для SSH на Ubuntu

Сохраните файл и закройте его. После этого перезапустите SSH-демон, чтобы применить внесенные изменения.

sudo systemctl restart ssh

Теперь SSH-демон будет запрашивать у вас пароль пользователя и код подтверждения, который представляет собой одноразовый пароль, созданный с помощью Google Authenticator. На следующем изображении показан процесс входа в SSH с сервера CentOS на сервер Ubuntu 20.04.

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

Если вы применяете SSH-ключ для доступа к SSH-серверу, воспользуйтесь следующими указаниями.

Зайдите в файл конфигурации SSH-сервера.

sudo nano /etc/ssh/sshd_config

Откройте файл и проверьте, чтобы оба указанных параметра были установлены на yes.

UsePAM yes ChallengeResponseAuthentication yes

Обратите внимание: в Ubuntu 22.04 необходимо использовать следующие две строки. Параметр ChallengeResponseAuthentication заменен на KbdInteractiveAuthentication.

UsePAM yes KbdInteractiveAuthentication yes

PAM (модуль подключаемой аутентификации) предлагает удобный способ интеграции различных методов аутентификации в вашу систему Linux. Чтобы активировать Google Authenticator через SSH, необходимо включить PAM и аутентификацию с использованием Challenge-Response.

Чтобы разрешить пользователю root использовать двухфакторную аутентификацию, измените настройку PermitRootLogin на yes. Значения PermitRootLogin no или PermitRootLogin prohibit-password не подойдут.

PermitRootLogin yes

После этого внесите следующую строку в конец файла. Это сообщает SSH-демону, что пользователь должен пройти аутентификацию как с помощью публичного ключа, так и с использованием Challenge-Response.

AuthenticationMethods publickey, keyboard-interactive

Сохраните файл и закройте его. Затем внесите изменения в файл конфигурации PAM для SSH-демона.

sudo nano /etc/pam. d/sshd

В верхней части данного файла вы найдете строку, касающуюся аутентификации по паролю, при условии, что параметр ChallengeResponseAuthentication установлен на yes. Рекомендуется закомментировать эту строку, так как для аутентификации мы будем использовать SSH-ключ вместо пароля.

@include common-auth

Для активации двухфакторной аутентификации в SSH, вставьте следующие две строки.

# двухфакторная аутентификация через Google Authenticator auth required pam_google_authenticator. so

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

Сохраните файл и закройте его. После этого перезапустите SSH-демон, чтобы изменения начали действовать.

sudo systemctl restart ssh

Теперь для доступа потребуется использовать SSH-ключ и код из Google Authenticator.

Заметки

  • Каждому пользователю на вашем сервере Ubuntu необходимо выполнить команду.

    google-authenticator

    Отсканируйте QR-код для активации двухфакторной аутентификации. Если пользователь не завершил настройку, при попытке входа возникнет ошибка с сообщением «Доступ запрещен (keyboard-interactive)».

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

    google-authenticator

    для редактирования файла

    ~/.google_authenticator

    .

  • Одноразовый пароль создается на основе общего секретного ключа и актуального времени, поэтому важно настроить синхронизацию времени NTP на вашем сервере Ubuntu для обеспечения точности. Ранее допускалась разница во времени до 4 минут между сервером и мобильным приложением, однако сервер и приложение TOTP могут находиться в разных часовых поясах.

Как деактивировать двухфакторную аутентификацию для SSH.

Внесите изменения в файл настроек PAM для службы SSH.

sudo nano /etc/pam. d/sshd

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

auth required pam_google_authenticator. so

Сохраните изменения и закройте документ. Если вы внесли следующую строку в файл,

/etc/ssh/sshd_config

,

AuthenticationMethods publickey, keyboard-interactive

исключите способ аутентификации

keyboard-interactive

.

AuthenticationMethods publickey

Сохраните изменения и закройте файл, после чего перезапустите SSH-демон.

sudo systemctl restart ssh

Итоги

Надеюсь, это руководство оказалось полезным для вас в настройке двухфакторной аутентификации SSH на серверах Ubuntu 22.04 и 20.04. Если вам понравился этот материал, не забудьте подписаться на нашу бесплатную рассылку. Также приглашаем вас следить за нами в Twitter или поставить лайк на нашей странице в Facebook.