Categories: CentOSlinuxUbuntu

Включаем двухфакторную аутентификацию (2FA) для SSH входа в Linux

В этой статье мы покажем, как настроить двухфакторную аутентификацию (2FA) для SSH входа на Linux сервер с помощью Google PAM (Pluggable Authentication Module) и мобильного приложения Microsoft Authenticator . 2FA позволяет добавить дополнительный слой безопасности при аутентификации на Linux хосте по SSH. Теперь для входа на сервер кроме имени и пароля пользователя (rsa ключа), вы должны будете ввести одноразовый цифровой пароль (Time-based One-time Password — TOTP), который генерируется в вашем смартфоне.

Установите на свой смартфон мобильное приложение Microsoft Authenticator (доступно как в Google Store, так и в App Store).

В этой статье я рассматриваю именно Microsoft Authenticator, т.к. я уже использую это приложение для MFA аутентификации в Azure . Если захотите, можно использовать вместо него Google Authenticator.

Теперь нужно установить и настроить пакет Google PAM на вашем Linux сервере:

  1. Подключитесь к вашему Linux хосту по SSH;
  2. Установите пакет Google PAM Authenticator с помощью пакетного менеджера:В Debian/Ubuntu: sudo apt-get install libpam-google-authenticator В RHEL/CentOS/Fedora: yum install google-authenticator

  3. Выполните команду: google-authenticator
  4. Утилита сгенерирует и отобразит в консоли QR код;
  5. Запустите приложение Microsoft Authenticator на своем смартфоне. Выберите Add account -> Personal account -> Scan a QR Code;
  6. Отсканируйте QR код через приложение. В результате в приложении Authenticator появится новая запись для вашего пользователя и сервера. В этой записи вы сможете получить одноразовый пароль для подключения к хосту;
  7. Обратите внимание, что в консоли Linux показаны секретный ключ и коды аварийного доступа;
    Эти коды нужны для подключения к вашей учетной записи на сервере, если вы потеряете/сломаете свой смартфон. Сохраните коды в безопасное место!
  8. Затем google-authenticator покажет несколько дополнительных вопросов:
  9. Do you want authentication tokens to be time-based? Y -> Enter
  10. Do you want me to update your “/home/sysops/.google_authenticator” file? Y -> Enter
  11. Do you want to disallow multiple uses of the same authentication token? Y -> Enter
  12. By default, tokens are good for 30 seconds… Y -> Enter
    По умолчанию одноразовый токен меняется раз в 30 секунд. Этого как правило достаточно. Но здесь важно, чтобы ваш хост Linux и смартфон были синхронизированы по времени.
  13. Do you want to enable rate-limiting? Y -> Enter
    Можно задать сразу задать все настройки $ google-authenticator -t -f -d -w 3 -e 5 -r 3 -R 30
    -t – включить вход по одноразовому паролю
    -f – сохранить конфигурацию в файле ~/.google_authenticator
    -d – запретить использовать предыдущие пароли
    -w 3 – разрешить использовать один предудущий и один следующий токен (если время не синхронизировано)
    -e 5 – сгенерировать 5 аварийных кодов
    -r 3 -R 30 – разрешить не более 3 логинов каждые 30 секунд

  14. Теперь нужно добавить следующую строку в файл /etc/pam.d/sshd:
    auth required pam_google_authenticator.so nullok

    Опция nullok позволяет пользователю, для которого не настроена двухфакторная аутентификация, входить с помощью только имени и пароля. После настройки и тестирования 2FA рекомендует убрать этот параметр, чтобы требовать обязательное использование двухфакторной аутентификации.

  15. Теперь внесите изменения в файл /etc/ssh/sshd_config: sudo mcedit /etc/ssh/sshd_config
  16. Измените значение в строке ChallengeResponseAuthentication на Yes:
    ChallengeResponseAuthentication yes
  17. Сохраните изменения в файле sshd_config и перезапустите sshd: service ssh restart

Теперь попробуйте подключится к вашему хосту Linux по SSH. Перед вводом пароля у вас будет запрошено ввести код верификации (verification code).

Откройте приложение Authenticator на смартфоне, найдите пользователя вашего сервера. Введите в консоль 6-символьный одноразовый пароль (One-time password code), который сгенерировал для вас Authenticator.

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

При успешном входе в логе аутентификации появится строка:

cat /var/log/auth.log

Dec 21 09:01:22 srv-ubun01 sshd(pam_google_authenticator)[6242]: Accepted google_authenticator for sysops

Если указать неверный код, в логе будут ошибки:

Dec 21 09:02:38 srv-ubun01 sshd(pam_google_authenticator)[6436]: Invalid verification code for sysops_x000D_Dec 21 09:02:40 srv-ubun01 sshd[6436]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.14.1 user=sysops

Если вы хотите использовать 2FA вместе с SSH аутентификацией по ключам, добавьте следующие директивы в /etc/ssh/sshd_config:

PasswordAuthentication no_x000D_PubkeyAuthentication yes_x000D_AuthenticationMethods publickey,keyboard-interactive
admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 месяца ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 месяца ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 месяца ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 месяца ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 месяца ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 месяца ago