Настройка двухфакторной аутентификации SSH (2FA) на сервере Ubuntu 22.04/20.04
Из этого туториала вы узнаете, как настроить двухфакторную аутентификацию SSH на сервере Ubuntu с помощью известного Google Authenticator. Это значительно повысит безопасность службы SSH на вашем сервере Ubuntu.
Как работает двухфакторная аутентификация
Обычно вам нужно только ввести пароль или использовать ключ SSH для удаленного входа на сервер Ubuntu. Двухфакторная аутентификация (2FA) требует ввода двух частей информации для входа в систему. Поэтому вам также потребуется ввести одноразовый пароль, основанный на времени, для входа на ваш SSH-сервер. Этот одноразовый пароль вычисляется с использованием алгоритма TOTP, который является стандартом IETF. В наши дни многие веб-сайты и сервисы (Facebook, Google, Twitter и т. д.) предлагают пользователям 2FA для защиты своих учетных записей, и хорошей идеей также включить 2FA на вашем SSH-сервере.
В этом уроке вы узнаете, как настроить
- Аутентификация по паролю с помощью 2FA
- Аутентификация с открытым ключом с помощью 2FA
Примечание. Серверное программное обеспечение с открытым исходным кодом, которое мы будем использовать в этой статье, называется
libpam-google-authenticator
и устанавливается из репозитория Ubuntu по умолчанию. Компания Google не участвует в процессе аутентификации ни в какой форме. Серверному программному обеспечению и мобильному приложению не требуется доступ к сети.
Шаг 1. Установите и настройте Google Authenticator на сервере Ubuntu
Войдите на свой сервер Ubuntu и выполните следующую команду, чтобы установить Google Authenticator из репозитория пакетов Ubuntu по умолчанию.
sudo apt install -y libpam-google-authenticator
Затем запустите команду google-authenticator
, чтобы создать новый секретный ключ в вашем домашнем каталоге.
google-authenticator
На вопрос: «Хотите ли вы, чтобы токены аутентификации были основаны на времени?» Ответьте да.
Затем вы увидите QR-код, который можно отсканировать с помощью приложения TOTP на своем телефоне. Я рекомендую два приложения:
- Google Authenticator - самое известное мобильное приложение TOTP. Вы можете установить его через Google Play или магазин приложений Apple на свой мобильный телефон.
- Мобильное приложение Google Authenticator не имеет открытого исходного кода. Если вы не доверяете Google, вы можете использовать FreeOTP, мобильное приложение TOTP с открытым исходным кодом, разработанное Red Hat.
Отсканируйте QR-код с помощью Google Authenticator или FreeOTP на своем мобильном телефоне. Обратите внимание, что вам нужно увеличить окно терминала, чтобы отсканировать полный QR-код.
QR-код представляет собой секретный ключ, который известен только вашему SSH-серверу и вашему мобильному приложению TOTP. После сканирования QR-кода вы увидите на своем телефоне шестизначный одноразовый пароль. По умолчанию оно меняется каждые 30 секунд. Вам нужно будет ввести этот одноразовый пароль позже, чтобы войти на сервер Ubuntu через SSH.
В окне терминала вы можете увидеть секретный ключ, код подтверждения и аварийный скретч-код. Рекомендуется сохранить эту информацию в безопасном месте для дальнейшего использования.
Затем вы можете ввести y, чтобы ответить на все оставшиеся вопросы. Это обновит ваш файл конфигурации Google Authenticator, отключит многократное использование одного и того же токена аутентификации, увеличит временной интервал и включит ограничение скорости для защиты от попыток входа в систему методом перебора.
Шаг 2. Настройте демон SSH для использования Google Authenticator
- Аутентификация по паролю с помощью 2FA
- Аутентификация с открытым ключом с помощью 2FA
Аутентификация по паролю с помощью 2FA
Если вы не используете ключ SSH, следуйте инструкциям ниже.
Откройте файл конфигурации SSH-сервера.
sudo nano /etc/ssh/sshd_config
Найдите в файле следующие два параметра и убедитесь, что для обоих установлено значение да.
UsePAM yes
ChallengeResponseAuthentication yes
Примечание. В Ubuntu 22.04 вместо этого следует использовать следующие две строки. ChallengeResponseAuthentication
заменен на KbdInteractiveAuthentication
.
UsePAM yes
KbdInteractiveAuthentication yes
PAM означает подключаемый модуль аутентификации. Он предоставляет простой способ подключить другой метод аутентификации к вашей системе Linux. Чтобы включить Google Authenticator с SSH, необходимо включить аутентификацию PAM и Challenge-Response.
Если вы хотите разрешить пользователю root использовать 2FA, найдите параметр PermitRootLogin
и установите для него значение yes
. Это не может быть PermitRootLogin no
или PermitRootLogin запретный пароль
.
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 из системы CentOS на сервер Ubuntu 20.04.
Аутентификация по открытому ключу с помощью 2FA
Если вы используете ключ SSH для входа на сервер SSH, следуйте инструкциям ниже.
Откройте файл конфигурации SSH-сервера.
sudo nano /etc/ssh/sshd_config
Найдите в файле следующие два параметра и убедитесь, что для обоих установлено значение да.
UsePAM yes
ChallengeResponseAuthentication yes
Примечание. В Ubuntu 22.04 следует использовать следующие две строки. ChallengeResponseAuthentication
заменен на KbdInteractiveAuthentication
.
UsePAM yes
KbdInteractiveAuthentication yes
PAM означает подключаемый модуль аутентификации. Он предоставляет простой способ подключить другой метод аутентификации к вашей системе Linux. Чтобы включить Google Authenticator с SSH, необходимо включить аутентификацию PAM и Challenge-Response.
Если вы хотите разрешить пользователю root использовать 2FA, найдите параметр PermitRootLogin
и установите для него значение yes
. Это не может быть PermitRootLogin no
или PermitRootLogin запретный пароль
.
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.
Примечания
- Каждому пользователю на вашем сервере Ubuntu необходимо запустить команду
google-authenticator
и отсканировать QR-код, чтобы использовать двухфакторную аутентификацию. Если пользователь не выполнил настройку и попытается войти в систему, отобразится сообщение об ошибке «Отказано в доступе (интерактивно с клавиатуры)». - Аварийный скретч-код — это ваш резервный код. Если вы потеряете свой телефон, вы можете ввести один из пяти аварийных скретч-кодов вместо одноразового пароля, чтобы завершить двухэтапную проверку. Эти коды предназначены только для одноразового использования.
- Если вы хотите изменить секретный ключ, просто войдите на свой сервер и снова запустите команду
google-authenticator
, чтобы обновить файл~/.google_authenticator
. - Поскольку одноразовый пароль вычисляется с использованием общего секретного ключа и текущего времени, рекомендуется включить синхронизацию времени NTP на вашем сервере Ubuntu, чтобы сохранить точное время, хотя ранее мы допускали разницу во времени в 4 минуты между сервер и мобильное приложение. Ваш сервер 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 22.04 и 20.04. Как всегда, если этот пост оказался для вас полезным, подпишитесь на нашу бесплатную рассылку. Вы также можете подписаться на нас в Твиттере или поставить лайк нашей странице в Facebook.