Устанавливаем необходимые пакеты
# aptitude install libpam-oath oathtool openssl libmime-base32-perl qrencode imagemagickГенерируем 20тисимвольный hex-ключ(Это важная особенность: модуль pam_oath понимает ключи в hex):
# head -c 1024 /dev/urandom |openssl sha1| tail -c 21 a32230ef2926f93f86f1И записываем его в файл
# echo "HOTP/T30 useradm - a32230ef2926f93f86f1" >/etc/users.oath # chmod go-rw /etc/users.oath
- Здесь:
- useradm - имя пользователя, под которым мы логинимся
- Т30 - временной интервал, в течении которого работают временные пароли. У Google Authenticator этот интервал равен 30 секундам.
- HOTP - алгоритм генерации
auth sufficient pam_unix.so auth sufficient pam_oath.so usersfile=/etc/users.oath digits=6И добавляем в файл /etc/pam.d/sshd строку
@include oathнад всеми инклюдами с авторизациями
Выводим на экран QR-код для считывания приложением Google Authenticator.
# perl -e 'use MIME::Base32 qw( RFC ); print "otpauth://totp/MyServer:useradm?secret=".lc(MIME::Base32::encode(pack("H*","a32230ef2926f93f86f1")))."&issuer=MyServer";'|qrencode -s 10 -o -|display
- Здесь параметры имеют значение лишь для порядка, кроме сгенерированного выше ключа:
- MyServer - имя вашего сервера
- useradm - имя пользователя
Так же документация рекомендует отредактировать параметр в файле /etc/ssh/sshd_config
ChallengeResponseAuthentication yesПроверить, правильные ли коды генерирует приложение на телефоне, можно консольной командой:
# watch -n 1 -c "oathtool --totp a32230ef2926f93f86f1"
- Поведение, которого я добивался в данной конфигурации:
- спрашивается обычная авторизация pam_unix.
- если удачно - авторизовались. Т.о. эта модернизация не мешает в штатной работе.
- если не удачно - спрашиваем одноразовый пароль. Если удачно - авторизовались.
- если не удачно - идём в начало
-- По мотивам статьи на OpenNET
Комментариев нет:
Отправить комментарий