Двухфакторная аутентификация Google Authenticator
Введение
Двухфакторную аутентификацию для входа в систему (локально, через ssh, через OpenVPN и т.п.) можно настроить без использования аппаратных токенов, GSM-модемов для отправки СМС и прочего оборудования. Это можно сделать с использованием Google Authenticator.
Описание и принцип работы Google Authenticator можно найти в интернете. Краткая суть: пользователь на свой смартфон (Android/Apple) устанавливает небольшое бесплатное приложение, и вводит в него ключ, сгенерированный на компьютере. При попытке логина на этот компьютер, система запрашивает одноразовый пинкод, вычисленный на основе ключа и текущего времени. У пользователя на смартфоне такой же ключ и такое же системное время (допустимо расхождение в десятки секунд), поэтому он может вычислить нужный пинкод и ввести его с клавиатуры. Время жизни пинкода по умолчанию 30 секунд, то есть каждые 30 секунд вычисляется новый код. Для работы приложения на смартфоне не нужно подключение к интернету или сотовой сети. Если нет возможности воспользоваться смартфоном, можно ввести один из нескольких одноразовых паролей, сгенерированных во время настройки системы.
Необходимые пакеты
Для работы с Google Authenticator необходимо установить пакет libpam-google-authenticator. Так же желательно установить библиотеку libqrencode4 (или libqrencode для систем на основе p8 или младше).
На смартфон можно стандартными способами установить программу Google Authenticator или FreeOTP.
О генерации ключа для пользователя можно почитать в интернете. Кратко: от пользователя запустить google-authenticator, на первый вопрос ответить "да", ввести ключ в смартфон (вручную или через QR-код, если установлена библиотека libqrencode и он отобразился на экране), подтвердить сохранение изменений.
Включение двухфакторной аутентификации для логина по ssh
Пример:
В файле /etc/openssh/sshd_config включить опцию
KbdInteractiveAuthentication yes
Для дистрибутивов на базе p11 так же нужно включить поддержку в клиенте, добавив аналогичную строку в файл /etc/openssh/ssh_config.
/etc/pam.d/sshd:
#%PAM-1.0 auth include common-login auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-local.conf auth required pam_google_authenticator.so echo_verification_code nullok account include common-login password include common-login session include common-login
В файле /etc/security/access-local.conf нужно указать, при логине из каких подсетей не будет применяться двухфакторная аутентификация:
# Two-factor can be skipped on local network + : ALL : 192.168.1.0/24 + : ALL : 127.0.0.1 + : ALL : LOCAL - : ALL : ALL # empty line at the end!!!
Если нужно, чтоб пинкод запрашивался всегда, можно удалить строку с упоминанием этого файла из /etc/pam.d/sshd.
Параметр echo_verification_code включает отображение цифр пинкода при их вводе. Параметр nullok разрешает вход без пинкода для тех пользователей, у которых не настроен Google Authenticator.
Включение двухфакторной аутентификации для логина через OpenVPN
Дописать этот раздел.