The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  правила/FAQ  поиск  регистрация  вход/выход  слежка  RSS
"Раздел полезных советов: Двухфакторная аутентификация SSH с ..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Двухфакторная аутентификация SSH с ..."  +/
Сообщение от auto_tips (ok) on 01-Окт-13, 21:18 
Все началось с того, что я приобрел YubiKey и захотел использовать его для двухфакторной аутентификации SSH. Я также хотел иметь возможность восстановить доступ к серверу на случай, если потеряю ключ. Информация о том, как это сделать, слишком разрознена, поэтому я написал собственное руководство.

Вещи, которые необходимо знать:

* HOTP -- это алгоритм генерации одноразового пароля на основе счетчика. Счетчик меняется каждый раз, когда генерируется новый пароль.
* TOTP -- алгоритм генерации пароля в зависимости от таймера, регулярно генерируется новый пароль. (30 секунд в этом случае).

В результате, вы входите через SSH, видите запрос пароля и вводите пароль, предоставленный OTP, системой одноразовых паролей (one-time password) от YubiKey.

Для аварийного доступа я настроил возможность аутентификации с помощью Android-приложения Google Authenticator. Я настраивал все на Debian Wheezy сервере, но это должно работать и для других похожих систем.

Вам необходимо установить libpam-oath на сервере (>=1.12.4-1 или вы не сможете использовать аварийный вход).
На вашем компьютере необходимо установить yubikey-personalization-gui, oathtool и libmime-base32-perl.

Когда вы установите необходимые программы и библиотеки, то прежде, чем приступать к настройке, убедитесь, что у вас открыт дополнительный терминал с правами root, чтобы можно было исправить возможные ошибки.

Ключ ниже указан просто для примера, вам необходимо подставить свой.

++ Настройка YubiKey.

Для начала, используем yubikey-personalisation-gui, чтобы настроить YubiKey и сгенерировать ключ. Укажите OATH-HOTP режим, отключите token идентификацию и скопируйте ключ куда-нибудь, он понадобится для настройки сервера. Не забудьте сохранить настройки в YubiKey.

Создайте файл /etc/users.oath на сервере с содержанием:

   HOTP robin - 8a54ac40689f0bb99f306fdf186b0ef6bd153429

где robin это имя пользователя, использующего ключ, а большая шестнадцатиричная строка это ключ без пробелов, который вы сгенерировали ранее.

Установите возможность читать файл только для root:

   # chmod 600 /etc/users.oath

Измените /etc/pam.d/sshd таким образом, чтобы строка

   @include common-auth

была раскомментирована, а после нее добавьте следующее:

   auth required pam_unix.so nullok_secure

   # OATH OTP
   auth required pam_oath.so usersfile=/etc/users.oath window=20

window=20 указывает, как много раз может быть нажата кнопка на YubiKey перед входом. Иными словами, как далеко в последовательности OTP модуль будет искать совпадение.

Измените sshd_config, чтобы он разрешал вызов-ответ (Challenge-Response) аутентификацию.

   sed -i.bak -E -e 's/(ChallengeResponseAuthentication) no/\1 yes/' /etc/ssh/sshd_config

Вы можете проверить последовательность следующим образом:

   $ oathtool -w10 8a54ac40689f0bb99f306fdf186b0ef6bd153429
   333518
   886962
   ...

Если вы нажмете кнопку на YubiKey несколько раз, вы дожны увидеть точно такую же последовательность.

Перезапустите ssh демон и все должно работать. Вам нужно ввести пароль, вы нажимаете на кнопку YubiKey.

++ Настройка Google Authenticator

Это будет аварийным входом на случай, если вы потеряете ключ. Используем здесь повременной счетчик TOTP вместо счетчика на основе последовательности.

Для начала сгенерируйте случайный десятибайтовый ключ (20 символов в шестнадцатиричном виде):

   $ head -c 1024 /dev/urandom | openssl sha1 | tail -c 21
   2c2d309a7a92e117df5a

Добавьте строку в /etc/users.oath:

   HOTP/T30 robin - 2c2d309a7a92e117df5a

T30 означает, что используется повременной алгоритм с 30-и секундной ротацией.

Перед тем, как добавить этот же ключ в android приложение, мы должны представить его в base32 виде:

   $ perl -e 'use MIME::Base32 qw( RFC ); print  lc(MIME::Base32::encode(pack("H*","2c2d309a7a92e117df5a")))."\n";'
   fqwtbgt2slqrpx22

Эта команда на perl из шестнадцатиричного ключа сначала получает двоичный, который потом преобразовывает в base32.
Проверить, что все работает, можно так:

   $ oathtool --totp -w10 2c2d309a7a92e117df5a
   125557
   804612
   ...

Последовательность должна совпадать с той, которую отдает android приложение. Поскольку алгоритм генерации основывается на времени, то разница времени на устройствах должна не превышать пары секунд.

Теперь вы можете войти на сервер через повременной ключ, сгенерированный приложением или с помощью пароля, сгенерированным нажатием на кнопку YubiKey.

++ Примечания

Когда вы залогиньтесь, файл users.oath будет изменен, в него будет записано новое значение счетчика и время. Убедитесь, что файл не открыт в текстовом редакторе.

Если кто-нибудь нажмет кнопку YubiKey много раз (больше двадцати для этого примера), то ключ рассинхронизируется с сервером и вам придется сбросить его, сгенерировав новый и заменив старый в users.oath.

Есть еще libpam-google-authenticator, который ведет себя похожим образом, но недоступен для Debian Wheezy.

Если у вас много сервереров и вы хотите использовать один YubiKey для всех, то вам потребуется что-нибудь вроде центрального сервера аутентификации, чтобы избежать рассинхронизации ключей.

URL: http://www.kallisti.net.nz/blog/2013/09/yubikey-logins-with-ssh/

Обсуждается: http://www.opennet.dev/tips/info/2805.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "Двухфакторная аутентификация SSH с использованием YubiKey"  +/
Сообщение от lucentcode (ok) on 01-Окт-13, 21:18 
Спасибо. Очень интересный материал. Не зла про YubiKey.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Двухфакторная аутентификация SSH с использованием YubiKey"  +/
Сообщение от lucentcode (ok) on 01-Окт-13, 21:19 
Не знал про YubiKey(опечатки такие опечатки).
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Двухфакторная аутентификация SSH с использованием YubiKey"  –1 +/
Сообщение от Аноним (??) on 02-Окт-13, 18:55 
Еще бы абзац о том, что такое юбикей и чем он лучше ключей... 2 железки постоянно генерят пароли в зависимости от (точного) времени, и имея одну железку можно узнать какой пароль в другой в этот момент?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Двухфакторная аутентификация SSH с использованием YubiKey"  –1 +/
Сообщение от Аноним (??) on 02-Окт-13, 22:43 
Только получается что "поймав" ваш "8a54ac40689f0bb99f306fdf186b0ef6bd153429" с ним каждый раз можно будет заходить, так как он - валидный всегда будет. Лучше или свой сервер (в целом два) поднимать или юзать модуль что бы обращаться к yubi-key серверам в интеренете. Смысл в том что yubikey имеет свой идинтефикатор и по нему алгоритмом генерит пароль, пароль НЕ зависит от времени или чего-то там еще кроме собственно AES ключа зашитого в него и ID yubikey. Смысл в том что сервер проверяет насколько правильна сгенерилась последовательность зная public ID + AES и смотрит - не использовалась ли указанная последовательно до того. То есть сервера YubiKey в интернете (ну или приватный) хранят историю использования ключей. В целом еще у них есть беспланая виртуалка YubiRadius где все преднастроенно и типа есть ЛДАП + Радиус и можно забивать туда юзеров \ ключи и использовать как центр авторизации.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Двухфакторная аутентификация SSH с использованием YubiKey"  +/
Сообщение от pavlinux (ok) on 03-Окт-13, 00:00 
Кто ж напишет PAM модуль для подтверждения по SMS, мне чёй-то так в падлу.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Двухфакторная аутентификация SSH с использованием YubiKey"  +/
Сообщение от pavlinux (ok) on 03-Окт-13, 00:08 
> Только получается что

ФСБ запрещает юзать аппаратные ключи для удалённого доступа! Это только увеличивает риск.
Лучше один, средненький пароль, типа "Qwerty-1025", чем два ключа.  
Более того, использовать аппаратную авторизацию допускается только на защищенной,
ограниченной территории (в пределах этажа, отдела).

А как нарисовано на сайте http://www.yubico.ru/?uic_map=1505201284100
"Юбикей на связке ключей" - это ваще, высший пилотаж раз3.1415здяйства. :D

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Двухфакторная аутентификация SSH с использованием YubiKey"  +/
Сообщение от Andrey Mitrofanov on 03-Окт-13, 10:48 
> Кто ж напишет PAM модуль для подтверждения по SMS, мне чёй-то так в падлу.

Debian GNU/Linux 6.0 servachok tty2

servachok send SMS text OK to short nmr 5554 and enter the unlock code : _


Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

8. "Двухфакторная аутентификация SSH с использованием YubiKey"  +/
Сообщение от n0p on 04-Окт-13, 22:54 
Есть маленький нюанс, дружище.

Двухфакторная аутентификация означает, что ты "что-то знаешь", например пароль и "что-то имеешь", например, ключ. И при этом используются обязательно обе штуки одновременно.

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

Как думаешь, у ФСБ будут возражения?

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

9. "Двухфакторная аутентификация SSH с использованием YubiKey"  +/
Сообщение от pavlinux (ok) on 06-Окт-13, 01:30 
> В результате, вы входите через SSH, видите запрос пароля и вводите пароль,
> предоставленный OTP, системой одноразовых паролей (one-time password) от YubiKey.

Где тут двухфакторность?

----

Двух-, трех-, хз- факторность - это последовательные, НЕ ВЗАИМОИСКЛЮЧАЮЩИЕ процедуры аутентификации.
Например ( SSL-ключ && пароль && подтверждение по SMS).

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Двухфакторная аутентификация SSH с использованием YubiKey"  +/
Сообщение от n0p on 06-Окт-13, 12:29 

Согласен, эту штуку обязательно надо использовать в сочетании с дополнительной процедурой. Без неё она превращается в тыкву.
Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Двухфакторная аутентификация SSH с использованием YubiKey"  +/
Сообщение от Олег (??) on 06-Окт-13, 13:36 
Проспонсируешь? :)
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

12. "Двухфакторная аутентификация SSH с использованием YubiKey"  +/
Сообщение от pavlinux (ok) on 06-Окт-13, 14:18 
> Проспонсируешь? :)

Краудфандинг или как там это зовётся.

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Двухфакторная аутентификация SSH с использованием YubiKey"  +/
Сообщение от Олег email(??) on 06-Окт-13, 14:58 
Ну как оно там зовется мне все равно :)
Главное что бы это было кому нибудь нужно, и еще было бы неплохо что бы этот кто то еще и заплатил :)
Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "'А на этот случай у меня есть проездной'."  +/
Сообщение от Filosof email(ok) on 15-Окт-13, 19:33 
Пакет libpam-google-authenticator есть для бубунты. Думаю бекпортировать в Дебиан не должно быть проблемой - он весьма автономен.

Делал на базе google-authenticator несколько серверов.
Решение вполне годное с парой минусов:
- Нужно мобильное устройство типа айОС/Андроид
- Нужно каждому пользователю прописать ключ персонально (в штатной схеме. Мож можно и один на всех - не пробовал).
Плюсы:
+ не надо СМСок - всё итак в "телефоне"
+ в Убунте ставится пакетиком из репа
+ Есть генератор QR кодов, чтоб не набирать сериализированный ключ руками.

HOTP - это стрёмный вариант. Везде рекомендуется иметь TOTP. Синхронизация по времени таки на порядок надёжней счётчиков. Особенно при использовании больше чем одним человеком.

Позже нашёл такой конструктор:
http://motp.sourceforge.net/
можно собрать авторизацию куда угодно, в каком угодно виде, и использовать в виде клиента что угодно. Думаю и к Гаусу и к Оаусу прикладывается.
Стандарты рулят. Желающие сами написать могут модуль куда угодно. Математика же.
Если удастся сделать красиво и элегантно - может напишу готовую заметку (может будет моей первой).

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

15. "смртря как настроить"  +/
Сообщение от Filosof email(ok) on 15-Окт-13, 19:39 
У меня сначала идёт запрос ОТП, потом стандартный пароль.
2 фактора + защита от перебора.

Для ленивых стандартное поведение - "авторизовывать по ключу, если нет ключа - запускать 2х факторность". Спасает при необходимости написания скриптов.
Система вообще гибкая - твори что хочешь. PAM же.

А вот "сервера YubiKey" меня пугают. Я б никому не доверял свой ключ.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

16. "Двухфакторная аутентификация SSH с использованием YubiKey"  +/
Сообщение от Filosof email(ok) on 15-Окт-13, 19:42 
> Кто ж напишет PAM модуль для подтверждения по SMS, мне чёй-то так
> в падлу.

Я там ниже ссылку на коллекцию motp-поделок дал - там должно быть что-то готовое стоящее.

Я лично СМСки шлю через внешний сервер - к нему стучусь через http rest. По сути скрипт-однострочник. Но для этой цели не пользовал - итак в телефоне стоит клиент-генератор.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

17. "Двухфакторная аутентификация SSH с использованием YubiKey"  +/
Сообщение от Аноним (??) on 20-Окт-13, 14:56 
> Ну как оно там зовется мне все равно :)
> Главное что бы это было кому нибудь нужно, и еще было бы
> неплохо что бы этот кто то еще и заплатил :)

Тебе надо? Ты и плати.

Пассажиров без тебя хватамбо.

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

18. "Двухфакторная аутентификация SSH с использованием YubiKey"  +/
Сообщение от Аноним (??) on 22-Окт-13, 10:33 
Не хами! Проходи мимо
Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

19. "Двухфакторная аутентификация SSH с использованием YubiKey"  +/
Сообщение от Crazy Alex (ok) on 23-Окт-13, 13:17 
Смотря от чего защищаешься. Если от интернет-взломщиков всяких, и при этом хочешь ходить откуда угодно (то есть только ключами не обойдешься) - то как раз OTP будет отличным вариантом, даже без двухфакторки.

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

Мораль - прежде чем защищаться - стройте модель угроз.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

20. "'А на этот случай у меня есть проездной'."  +/
Сообщение от Аноним (??) on 05-Май-17, 10:33 
TOTP ME позволяет сделать то же самое на любой недорогой кнопочной мобиле с J2ME. Я проверял, it works.
Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру