Аутентификация SSH - Google Authenticator на сервере Debian
В этом руководстве показано, как настроить двухфакторную аутентификацию SSH на сервере Debian с помощью известного Google Authenticator. Это значительно улучшит безопасность службы SSH на вашем сервере Debian.
Как работает двухфакторная аутентификация
Обычно вам нужно только ввести пароль или использовать ключ SSH для удаленного входа на сервер Debian. Двухфакторная аутентификация (2FA) требует, чтобы вы вводили две части информации для входа в систему. Поэтому вам также потребуется ввести одноразовый пароль на основе времени для входа на ваш SSH-сервер.
Этот одноразовый пароль вычисляется с использованием алгоритма TOTP, который является стандартом IETF.
В наши дни многие веб-сайты и сервисы (Facebook, Google, Twitter и т. д.) предлагают пользователям двухфакторную аутентификацию для защиты своих учетных записей, и рекомендуется также включить двухфакторную аутентификацию на вашем SSH-сервере.
Этот урок покажет вам, как настроить:
Примечание. Серверное программное обеспечение с открытым исходным кодом, которое мы будем использовать в этой статье, называется 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 на своем телефоне.
- Google Authenticator — самое известное мобильное приложение TOTP. Вы можете установить его через Google Play или магазин приложений Apple на свой мобильный телефон. Мобильное приложение Google Authenticator не имеет открытого исходного кода.
- Если вы не доверяете Google, вы можете использовать FreeOTP, мобильное приложение TOTP с открытым исходным кодом, разработанное Red Hat.
Отсканируйте QR-код с помощью Google Authenticator или FreeOTP на своем мобильном телефоне. Обратите внимание, что вам нужно увеличить окно терминала, чтобы отсканировать полный QR-код.
QR-код представляет собой секретный ключ, который известен только вашему SSH-серверу и вашему мобильному приложению TOTP. После сканирования QR-кода вы можете увидеть шестизначный одноразовый пароль на своем телефоне.
По умолчанию он меняется каждые 30 секунд. Введите этот одноразовый пароль в окне терминала, чтобы подтвердить его правильность.
Теперь в окне терминала вы можете увидеть секретный ключ, проверочный код и аварийный скретч-код. Рекомендуется сохранить эту информацию в надежном месте для последующего использования.
Затем вы можете ввести подтверждение [ y ], чтобы ответить на все оставшиеся вопросы.
Это обновит ваш файл конфигурации Google Authenticator, отключит многократное использование одного и того же токена аутентификации, увеличит временное окно и включит ограничение скорости для защиты от попыток входа в систему методом грубой силы.
Шаг 2. Настройте демон SSH для использования Google Authenticator
Аутентификация по паролю с 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. Оцените этот урок!