Двухфакторная аутентификация в SSH - это метод обеспечения безопасности при подключении к удаленному серверу. Она требует от пользователя предоставления двух различных элементов для подтверждения своей личности: обычно это что-то, что пользователь знает (например, пароль), и что-то, что пользователь получает временным со стороны (например, одноразовый код, сгенерированный мобильным приложением, аппаратным устройством или полученный по SMS). Это усложняет задачу злоумышленникам, так как они должны обойти несколько уровней защиты, чтобы получить доступ к системе.
Клиентская часть.
Пользователю для генерации кодов необходимо установить на мобильный телефон одно из приложений, например Яндекс.Ключ (Android, iOS), Google Authenticator (Android, iOS), Microsoft Authenticator (Android, iOS).
После установки приложения, пользователь должен добавить свой аккаунт в приложению. Обычно это делается путем сканирования QR-кода или ввода секретного ключа, предоставляемого сервисом. После успешного добавления аккаунт пользователь получает возможность генерировать одноразовые коды непосредственно в мобильном приложении. Эти коды меняются каждый короткий период времени (обычно каждые 30 секунд) и используются в качестве второго фактора аутентификации.
Важно заботиться о сохранности своего мобильного устройства и не раскрывать одноразовые коды никому, чтобы обеспечить надежность двухфакторной аутентификации.
Серверная часть.
Установка.
Для включения двухфакторной авторизации необходим пакет libpam-google-authenticator
- это модуль аутентификации PAM (Pluggable Authentication Module), который позволяет использовать двухфакторную аутентификацию с использованием мобильного приложения.
Пакет libpam-google-authenticator
доступен в стандартном репозитории Debian, поэтому для его установки достаточно ввести в консоль следующую команду:
1
sudo apt install libpam-google-authenticator
После установки необходимо произвести настройку пакета, введя в консоли:
1
google-authenticator
В процессе настройки пакета необходимо отвечать на вопросы примерно следующим образом:
Do you want authentication tokens to be time-based? - yes
Ответ в консоли будет приблизительно следующий:
1
2
3
4
5
6
7
8
Warning: pasting the following URL into your browser exposes the OTP secret to Google:
[https://www.google.com/chart?chs=200×200&chld=M|0&cht=qr&chl=otpauth://totp/username@master3%3Fsecret%3DQAUP6ERU5SQ2VPXQPUQIXBHGME%26issuer%3Dmaster3](https://www.google.com/chart?chs=200%C3%97200&chld=M%7C0&cht=qr&chl=otpauth://totp/username@master3%3Fsecret%3DQADP6EEL2SQ2EW4QPUQSXBHGME%26issuer%3Dmaster3)
Failed to use libqrencode to show QR code visually for scanning.
Consider typing the OTP secret into your app manually.
Your new secret key is: QADP6EEL2SQ2EW4QPUQSXBHGME
Your verification code is 995221
Your emergency scratch codes are:
1234567890
По ссылке из вывода получим QR-код, который нужно отсканировать с помощью аутентификатора на мобильном телефоне.
Секретный ключ и коды аварийного доступа необходимо сохранить в недоступном и надёжном месте! Коды одноразовые, и в случае потери мобильного устройства и кодов доступ к серверу по ssh будет утерян!
Do you want me to update your “/home/username/.google_authenticator” file? - yes
Do you want to disallow multiple uses of the same authentication token? - yes
By default, tokes are good for 30 seconds… - no
Do you want to enable rate-limiting? - yes
Далее в любимом консольном редакторе открываем сначала файл /etc/pam.d/sshd
и добавляем в конец файла строку:
1
auth required pam_google_authenticator.so nullok
Здесь nullok
позволяет пользователям, у которых не настроена двухфакторная авторизация, все равно войти, только с помощью пароля.
Затем открываем /etc/ssh/sshd_config
. В нём находим параметр ChallengeResponseAuthentication
и меняем его значение:
1
ChallengeResponseAuthentication yes
После изменения параметров необходимо заново прочитать параметры конфига SSH:
1
sudo service ssh reload
После перезагрузки сервиса следующее подключение должно производиться уже с запросом цифрового кода из мобильного аутентификатора.