Двухфакторная авторизация на основе google-authenticator
Двухфакторная авторизация используется для усиление защиты системы, при ее использовании помимо пары логин пароль применяется дополнительный механизм авторизации. Например смарт-карта или одноразовый пароль. О втором типе защиты я и хотел бы рассказать.
google-authenticator это механизм одноразовых паролей — one time password. Код меняется раз в минуту поэтому очень важно иметь синхронное время на сервере и клиентском приложении. В качестве клиентского устройства может выступать мобильный телефон на базе android, смартфон BlackBerry или iPhone.
Установка серверной части:
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, если его нет, то авторизация только по паролю