...

среда, 4 сентября 2013 г.

Двухфакторная аутентификация в OpenSSH: ключ+одноразовый код

В предыдущей статье я рассказал, как добавить проверку одноразовых кодов при логине на свой сервер по SSH. Статья завершалась словами «если ходим по ключу — двухфакторная аутентификация не работает (не используется PAM)».

С недавнего времени, после выпуска OpenSSH версии 6.2, ситуация поменялась к лучшему.


+



sshd(8): Added support for multiple required authentication in SSH protocol 2 via an AuthenticationMethods option. This option lists one or more comma-separated lists of authentication method names. Successful completion of all the methods in any list is required for authentication to complete.






sshd(8): Добавлена поддержка множественных способов аутентификации в SSH протоколе 2 посредством параметра AuthenticationMethods. Этот параметр задаёт один или более списков с запятой-разделителем, перечисляющих названия методов аутентификации. Для аутентификации требуется успешное завершение всех методов в любом из списков.





Рассмотрю пример настройки: аутентификация по ключу и, затем, по одноразовому коду. У меня используется Debian Jessie (testing), там всё доступно «из коробки».

С момента написания прошлой статьи консольную тулзу положили рядом с модулем, поэтому на сервере нужен лишь один новый пакет:

apt-get install libpam-google-authenticator

На телефон с Android'ом ставим Google Autenticator и какой-либо сканер QR кодов, например такой. Если у вас телефон с другой ОС, то вам сюда.




После запуска этой команды:

google-authenticator



первым вопросом будет, хотим ли мы time-based токены. Ответ — «y».

В ответ получаем ASCII-art с таким симпатичным QR кодом, содержащим в себе секретный ключ (картинка кликабельная):


Также, если вы хотите добавить данные в Google Authenticator вручную — выводятся сам секретный код инициализации и код для проверки.


Также имеет смысл записать в надёжном месте 5 резервных кодов на случай, если вдруг с телефоном что-то случится. А по URL, который тулза тоже пишет, ходить не нужно — там лишь рисуется тот же самый QR код покрасивее. Вы ведь не хотите показывать свой секретный код Гуглу? :)


QR код сразу сканируем из приложения в телефоне, потом отвечаем на вопросы в консоли.

— Сохранить всё насовсем в ~/.google_authenticator?

— y

— Запретить использование одного кода несколько раз? Помогает заметить или даже предотвратить атаку man-in-the-middle.

— y

— Увеличить окно времени с приблизительно 1.5 минут до 4 минут?

— n (и тут сразу проверяем, точно ли время в телефоне; впрочем, Google Authenticator последних версий умеет синхронизировать время из интернета)

— Ограничить число попыток логина за промежуток времени?

— y




В файле /etc/pam.d/sshd в группе «auth» должна быть лишь одна строка с вызовом модуля pam_google_authenticator.so:

--- /etc/pam.d/sshd.orig 2013-05-22 05:05:49.000000000 +0400
+++ /etc/pam.d/sshd 2013-09-04 16:36:43.141649326 +0400
@@ -1,7 +1,9 @@
# PAM configuration for the Secure Shell service

+auth required pam_google_authenticator.so
+
# Standard Un*x authentication.
-@include common-auth
+#@include common-auth

# Disallow non-root logins when /etc/nologin exists.
account required pam_nologin.so




В /etc/ssh/sshd_config включаем ChallengeResponse аутентификацию, PAM и указываем, что нужно проверять как ключ, так и одноразовый пароль.

ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive


Затем:



service ssh reload





Все консольные команды (ssh, scp, sftp) OpenSSH версии 5.9p1 и, очевидно, позднее — поддерживают ChallengeResponse аутентификацию. Более старые версии не проверял.

lftp версий 4.3.3 и 4.4.8 не поддерживает. Другие версии не проверял.





  1. OpenSSH 6.2 Release Notes

  2. Установка приложения Google Authenticator

  3. Google Authenticator

  4. Сканер QR кодов


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Комментариев нет:

Отправить комментарий