«Безопасная оболочка» SSH — сетевой протокол для установления защищённого соединения между хостами, стандартно по порту 22 (который лучше поменять). SSH-клиенты и SSH-серверы доступны для большинства ОС. Внутри SSH работает практически любой другой сетевой протокол, то есть можно удалённо работать на другом компьютере, передавать по шифрованному каналу звуковой поток или видео и т.д. Кроме того, можно подключаться к другим хостам уже от имени этого удалённого хоста.
Аутентификация происходит по паролю, но разработчики и системные администраторы традиционно применяют SSH-ключи. Проблема в том, что секретный ключ могут украсть. Добавление парольной фразы теоретически защищает от кражи секретного ключа, но на практике при форвардинге и кэшировании ключей они . Двухфакторная аутентификация решает эту проблему.
Как реализовать двухфакторную аутентификацию
Разработчики из компании Honeycomb недавно опубликовали , как реализовать соответствующую инфраструктуру на клиенте и сервере.
Инструкция предполагает, что у вас есть некий базовый хост, открытый в интернет (бастион). Вы хотите подключаться к этому хосту с ноутбуков или компьютеров через интернет, и получать доступ ко всем остальным устройствам, который находятся за ним. 2FA гарантирует, что злоумышленник не сможет проделать то же самое, даже если получит доступ к вашему ноутбуку, например, установив вредоносное ПО.
Первый вариант — OTP
OTP — одноразовые цифровые пароли, которые в данном случае будут использоваться для SSH-аутентификации вместе с ключом. Разработчики пишут, что это неидеальный вариант, потому что злоумышленник может поднять фальшивый бастион, перехватить ваш OTP и использовать его. Но это лучше, чем ничего.
В данном случае на серверной стороне в конфиг Chef прописываются следующие строки:
metadata.rbattributes/default.rb(изattributes.rb)files/sshdrecipes/default.rb(копия изrecipe.rb)templates/default/users.oath.erb
На клиентской стороне ставится любое OTP-приложение: Google Authenticator, Authy, Duo, Lastpass, устанавливается brew install oath-toolkit или apt install oathtool openssl, потом генерируется случайная строка base16 (ключ). Она конвертируется в формат Base32, который используют мобильные аутентификаторы, и импортируется непосредственно в приложение.
В итоге вы можете подключиться к бастиону и убедиться, что теперь тот требует не только парольную фразу, но и код OTP для аутентификации:
➜ ssh -A bastion
Enter passphrase for key '[snip]':
One-time password (OATH) for '[user]':
Welcome to Ubuntu 18.04.1 LTS...Второй вариант — аппаратная аутентификация
В данном случае от пользователя не требуется каждый раз вводить OTP-код, поскольку вторым фактором становится аппаратное устройство или биометрия.
Тут конфигурация Chef немного сложнее, а конфигурация клиентов зависит от ОС. Но зато после выполнения всех действий клиенты на MacOS могут подтверждать аутентификацию в SSH по парольной фразе и приложением пальца к сенсору (второй фактор).
Владельцы iOS и Android подтверждают вход . Это специальная технология от Krypt.co, которая даже безопаснее, чем OTP.
На Linux/ChromeOS есть вариант работы с USB-токенами YubiKey. Конечно, злоумышленник может похитить ваш токен, но он всё равно не знает парольную фразу.
Источник: habr.com
