Настройка двухфакторной аутентификации SSH (2FA) на Ubuntu Server

Безопасность
В этом руководстве показано, как настроить двухфакторную аутентификацию SSH на сервере Ubuntu с помощью известного Google Authenticator.

Это значительно улучшит безопасность службы SSH на вашем сервере Ubuntu.

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

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

Здесь я покажу вам, как настроить

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

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

Установка и настройка Google Authenticator на сервере Ubuntu.

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

sudo apt install -y libpam-google-authenticator

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

google-authenticator

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

Настройка двухфакторной аутентификации SSH (2FA) на Ubuntu Server

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

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

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

Внимание. Вам нужно увеличить окно терминала, чтобы отсканировать полный QR-код.

Настройка двухфакторной аутентификации SSH (2FA) на Ubuntu Server

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

Настройка двухфакторной аутентификации SSH (2FA) на Ubuntu Server

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

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

Настройка двухфакторной аутентификации SSH (2FA) на Ubuntu Server

Настройка службы SSH для использования Google Authenticator

  • Аутентификация по паролю с 2FA
  • Аутентификация с открытым ключом 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 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 (2FA) на Ubuntu Server

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

sudo systemctl restart ssh

С этого момента служба SSH потребует от вас ввести пароль пользователя и код подтверждения (одноразовый пароль, сгенерированный Google Authenticator). На следующем снимке экрана показан сеанс входа в систему SSH из окна MacOS на сервер Ubuntu 20.04.3

Настройка двухфакторной аутентификации SSH (2FA) на Ubuntu Server

Аутентификация с открытым ключом и использованием 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 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 (2FA) на Ubuntu Server

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

sudo systemctl restart ssh

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

Примечание.

  • Каждый пользователь на вашем сервере Ubuntu должен запустить команду google-authenticator и отсканировать QR-код, чтобы использовать двухфакторную аутентификацию. Если пользователь не настроил и пытается войти в систему, будет отображаться сообщение об ошибке «Отказано в доступе (keyboard-interactive)».
  • Аварийный скретч-код — это ваш резервный код. Если вы потеряете свой телефон, вы можете ввести один из пяти запасных скретч-кодов вместо одноразового пароля, чтобы завершить двухэтапную проверку. Эти коды предназначены только для одноразового использования.
    Если вы хотите изменить секретный ключ, просто войдите на свой сервер и снова запустите команду google-authenticator, чтобы обновить файл ~/.google_authenticator.
  • Поскольку одноразовый пароль вычисляется с использованием общего секретного ключа и текущего времени, рекомендуется включить синхронизацию времени NTP на вашем сервере Ubuntu, чтобы сохранить точное время, хотя ранее мы допускали разницу времени в 4 минуты между Ubuntu сервер и мобильным приложением. Ваш сервер Ubuntu и мобильное приложение 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 18.04 и 20.04.

Оцените статью
DailyNet