Двухфакторная авторизация на основе google-authenticator

Двухфакторная авторизация используется для усиление защиты системы, при ее использовании помимо пары логин пароль применяется дополнительный механизм авторизации. Например смарт-карта или одноразовый пароль. О втором типе защиты я и хотел бы рассказать.

google-authenticator это механизм одноразовых паролей — one time password. Код меняется раз в минуту поэтому очень важно иметь синхронное время на сервере и клиентском приложении. В качестве клиентского устройства может выступать мобильный телефон на базе android, смартфон BlackBerry или iPhone.

Приложение google-authenticator для iPhone
Приложение google-authenticator для android

Установка серверной части:

FreeBSD

#cd /usr/ports/security/google-authenticator
#make && make install

Linux Debian

#aptitude install google-authenticator

После этих не хитрых манипуляций в системе появиться pam модуль pam_google_authenticator.so

Следующим этапом идет генерация кода для пользователя который планирует использовать google authenticator. Для этого запускается консольная утилита google-authenticator.

После запуска генерируется QR-Code содержащий в себе секретный ключ, который нужно просканировать приложением в телефоне. Если код не отобразился (возможно не стоят необходимые библиотеки), то можно воспользоваться ссылкой для отображения через браузер или ввести код в приложение в ручную.

После сканирования кода, нужно будет ответить на несколько вопросов:

Do you want me to update your "~/.google_authenticator" file (y/n)
 
y
 
Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n)
 
y
 
By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) 
 
n
 
If the computer that you are logging into isn t hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n)
 
y

В домашней папке пользователя создается файл .google_authenticator в котором содержатся дополнительные 5 кодов, на случай утраты основного.

После генерации кода необходимо настроить ssh и включить модуль pam.

В /etc/ssh/sshd_config исправляем строку

ChallengeResponseAuthentication yes

и перезапускаем сервис.

Включение pam модуля
В Linux

auth [success=1 default=ignore] pam_access.so accessfile=/etc/ssh/skip-user.conf
auth       required     pam_google_authenticator.so

Содержимое файла skip-user.conf

# В локальной сети вход с одним паролем
+ : ALL : 192.168.0.0/24
# Список пользователей только с паролем
+ : username : ALL
# Всех остальных заставим вводить ещё и временный код
- : ALL : ALL

Во FreeBSD

auth       optional     /usr/local/lib/pam_google_authenticator.so

Здесь будет происходить проверка на существование файла .google-authenticator, если его нет, то авторизация только по паролю

Комментарии запрещены.