October 18, 2022

Аутентификация SSH - Google Authenticator на сервере Debian

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

Как работает двухфакторная аутентификация

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

Этот одноразовый пароль вычисляется с использованием алгоритма TOTP, который является стандартом IETF.

В наши дни многие веб-сайты и сервисы (Facebook, Google, Twitter и т. д.) предлагают пользователям двухфакторную аутентификацию для защиты своих учетных записей, и рекомендуется также включить двухфакторную аутентификацию на вашем SSH-сервере.

Этот урок покажет вам, как настроить:

  1. Аутентификация по паролю с 2FA
  2. Аутентификация с открытым ключом с 2FA

Примечание. Серверное программное обеспечение с открытым исходным кодом, которое мы будем использовать в этой статье, называется libpam-google-authenticator и устанавливается из репозитория Debian по умолчанию. Компания Google ни в какой форме не участвует в процессе аутентификации. Серверному ПО и мобильному приложению не требуется доступ к сети.

Шаг 1: Установите и настройте Google Authenticator на сервере Debian

Войдите на свой сервер Debian и выполните следующую команду, чтобы установить Google Authenticator из репозитория пакетов Debian по умолчанию.

sudo apt install -y libpam-google-authenticator

Затем запустите команду google-authenticator, чтобы создать новый секретный ключ в вашем домашнем каталоге.

google-authenticator

На вопрос: “Do you want authentication tokens to be time-based?”

«Хотите ли вы, чтобы токены аутентификации были основаны на времени?» Ответить Да.

Затем вы увидите QR-код, который вы можете отсканировать с помощью приложения TOTP на своем телефоне.

Я рекомендую два приложения:

  1. Google Authenticator — самое известное мобильное приложение TOTP. Вы можете установить его через Google Play или магазин приложений Apple на свой мобильный телефон. Мобильное приложение Google Authenticator не имеет открытого исходного кода.
  2. Если вы не доверяете Google, вы можете использовать FreeOTP, мобильное приложение TOTP с открытым исходным кодом, разработанное Red Hat.

Отсканируйте QR-код с помощью Google Authenticator или FreeOTP на своем мобильном телефоне. Обратите внимание, что вам нужно увеличить окно терминала, чтобы отсканировать полный QR-код.

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

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

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

Затем вы можете ввести подтверждение [ y ], чтобы ответить на все оставшиеся вопросы.

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

Шаг 2. Настройте демон SSH для использования Google Authenticator

  1. Аутентификация по паролю с 2FA;
  2. Аутентификация с открытым ключом с 2FA;

Аутентификация по паролю с 2FA

Если вы не используете ключ SSH, следуйте инструкциям ниже. Откройте файл конфигурации сервера SSH.

sudo nano /etc/ssh/sshd_config

Найдите следующие два параметра в файле и убедитесь, что для них обоих задано значение yes.

UsePAM yes

ChallengeResponseAuthentication yes

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

Если вы хотите разрешить пользователю root использовать 2FA, то найдите параметр PermitRootLogin и установите для него значение yes. Это не может быть PermitRootLogin no или PermitRootLogin prohibit-password

PermitRootLogin yes

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

sudo nano /etc/pam.d/sshd

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

@include common-auth

Чтобы включить 2FA в SSH, добавьте следующие две строки.

# two-factor authentication via Google Authenticator
auth   required   pam_google_authenticator.so

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

sudo systemctl restart ssh

С этого момента демон SSH потребует от вас ввести пароль пользователя и код подтверждения (одноразовый пароль, сгенерированный Google Authenticator). Пожалуйста, не завершайте текущий сеанс SSH. Вы должны открыть другое окно терминала, чтобы протестировать двухфакторную аутентификацию. Если что-то пойдет не так, вы можете использовать первую сессию SSH для исправления ошибок.

На следующем снимке экрана показан сеанс входа по SSH с настольного компьютера Ubuntu на сервер Debian.

Аутентификация с открытым ключом с помощью 2FA

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

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

sudo nano /etc/ssh/sshd_config

Найдите следующие два параметра в файле и убедитесь, что для них обоих задано значение yes.

UsePAM yes

ChallengeResponseAuthentication yes

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

Если вы хотите разрешить пользователю root использовать 2FA, то найдите параметр PermitRootLogin и установите для него значение yes. Это не может быть PermitRootLogin no или PermitRootLogin prohibit-password.

PermitRootLogin yes

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

AuthenticationMethods publickey,keyboard-interactive

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

sudo nano /etc/pam.d/sshd

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

@include common-auth

Чтобы включить 2FA в SSH, добавьте следующие две строки.

# two-factor authentication via Google Authenticator
auth   required   pam_google_authenticator.so

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

sudo systemctl restart ssh

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

Важно - примечание!

Каждый пользователь на вашем сервере Debian должен запустить команду google-authenticator и отсканировать QR-код, чтобы использовать двухфакторную аутентификацию. Если пользователь не настроил и пытается войти в систему, будет отображаться сообщение об ошибке “Permission denied (keyboard-interactive)”.

Аварийный скретч-код — это ваш резервный код. Если вы потеряете свой телефон, вы можете ввести один из пяти экстренных скретч-кодов вместо одноразового пароля, чтобы завершить двухэтапную проверку. Эти коды предназначены только для одноразового использования.

Если вы хотите изменить секретный ключ, просто войдите на свой сервер и снова запустите команду google-authenticator, чтобы обновить файл ~/.google_authenticator.

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

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

Отредактируйте файл правил PAM для демона SSH.

sudo nano /etc/pam.d/sshd

Закомментируйте следующую строку.

auth   required   pam_google_authenticator.so

Сохраните и закройте файл. Если вы добавили следующую строку в файл /etc/ssh/sshd_config,

AuthenticationMethods publickey,keyboard-interactive

Удалите метод аутентификации с интерактивной клавиатурой.

AuthenticationMethods publickey

Сохраните и закройте файл. Затем перезапустите демон SSH.

sudo systemctl restart ssh

Подведение итогов

Мы надеемся, что это руководство помогло вам настроить двухфакторную аутентификацию SSH на серверах Debian 22.04 и 20.04.

Если вы нашли этот пост полезным, подпишитесь на нашу бесплатную рассылку новостей. Вы также можете подписаться на нас в Twitter или поставить лайк на нашей странице в Facebook. Оцените этот урок!