Двухфакторная аутентификация SSH (2FA)

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

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

Таким образом значительно повышается безопасность сервера, поскольку злоумышленнику недостадочно знать Ваш логин и пароль. Ему еще необходимо завладеть Вашим мобильным устройством с установленным на нем аутентификатором

Установка аутентификатора у пользователя

  • Для Google Android и Apple iOS устройств — Google Authenticator
  • Для Windows Phone и других Microsoft Windows-based устройств — Authenticator

Настройка аутентификации на сервере

Установка и настройка ssh-сервера проводится с правами пользователя root в текстовой консоли удаленного сервера. OS Ubuntu. Нужно будет открыть несколько ssh-сессий

Открываем первую и устанавливаем аутентификатор

apt install libpam-google-authenticator

Инфо! Google не собирает никакой информации с Вашего сервера посредством этого ПО

Открываем вторую ssh-сессию для пользователя username и запускаем команду

google-authenticator

На вопрос

Do you want authentication tokens to be time-based?

Отвечаем y

Ответ в консоли будет приблизительно следующий

Warning: pasting the following URL into your browser exposes the OTP secret to Google:
https://www.google.com/chart?chs=200×200&chld=M|0&cht=qr&chl=otpauth://totp/username@master3%3Fsecret%3DQAUP6ERU5SQ2VPXQPUQIXBHGME%26issuer%3Dmaster3
Failed to use libqrencode to show QR code visually for scanning.
Consider typing the OTP secret into your app manually.
Your new secret key is: QAUP6ERU5SQ2VPXQPUQIXBHGME
Your verification code is 995230
Your emergency scratch codes are:
40073654
27216757
73026250
92352634
24789303

Перейдя по ссылке из выхлопа получим QR код, который сканируем при помощи сканера аутентификатора установленного на мобильном устройстве

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

На вопрос

Do you want me to update your “/home/username/.google_authenticator” file?

Отвечаем y

Do you want to disallow multiple uses of the same authentication token?

Отвечаем y

By default, tokens are good for 30 seconds…

Отвечаем n

Важно! Сервер и мобильное устройство должны быть синхронизированы по времени. Иначе сервер может не принять цифровой код

Do you want to enable rate-limiting?

Отвечаем y

Переходим в первую консоль и вносим изменения в /etc/pam.d/sshd добавив в самом верху строку

auth required pam_google_authenticator.so nullok

Инфо! Наличие параметра nullok разрешает пользователю вход на сервер по логину/паролю, без конфигурирования двухфакторной аутентификации. Это удобно на время внедрения. После этот параметр можно убрать. Таким образом двухфакторная авторизация станет обязательной

Редактируем /etc/ssh/sshd_config. Находим параметр ChallengeResponseAuthentication и меняем его значение на

ChallengeResponseAuthentication yes

Перечитаем конфиги сервера ssh

service ssh reload

Проверка

Открываем третью ssh-сессию

ssh -l username 192.168.12.3

Если все настроено правильно сервер запросит цифровой код, после ввода которого запросит пароль пользователя

Verification code:
Password:

Важно! Не закрывать ранее открытые ssh-сессии до момента, пока все не будет работать надлежащим образом

Александр Черных
системный администратор

1.1k
1+