Поиск по сайту:

Как включить двухфакторную аутентификацию для входа по SSH


Если вы действительно хотите заблокировать свой облачный сервер, вы можете включить двухфакторную аутентификацию для SSH так же, как вы добавили бы ее в свою учетную запись Gmail, не позволяя никому получить доступ, если они украдут ваш закрытый ключ SSH.

Это действительно необходимо?

По сравнению с двумя факторами в электронной почте или веб-аккаунте, два фактора в SSH не так полезны. Для чего-то вроде электронной почты точкой отказа обычно являются схемы сброса пароля, легко взламываемые пароли или утечка данных. Действительно, все, что связано с неправильными паролями или плохим управлением паролями.

Для SSH это не проблема. SSH использует очень хорошее шифрование для открытых и закрытых ключей, которые он использует для установления соединений. Если ваш SSH-сервер заблокирован и не разрешает доступ по паролю, никто не сможет войти, если у него нет физического устройства, на котором находится ключ, и маловероятно, что кто-то будет взломать ваш SSH-ключ в любое время в этом столетии. Так что, в некотором смысле, это почти как если бы у вас уже было два фактора, потому что ваш ключ останется на вашем ноутбуке.

Но, в некоторых крайних случаях, два фактора могут быть хорошим выбором. Если какой-нибудь сумасшедший хакер решит украсть ваш ноутбук с намерением получить ваши SSH-ключи вместе с ним (а не просто продать его на Craigslist, когда они не могут взломать пароль вашего устройства), наличие двух факторов сделает вас на шаг впереди.

Однако более реальная проблема связана с переадресацией агента SSH; Если переадресация агента включена, запросы ключей для входа на дополнительные серверы перенаправляются обратно на ваше устройство. Это позволяет вам подключаться по SSH к общедоступному серверу, а с этого общедоступного сервера — снова по SSH к другому частному серверу в той же сети, что дает вам доступ, аналогичный тому, как работает VPN.

Однако проблема заключается в том, что если общедоступный сервер скомпрометирован, если у вас включена переадресация агентов, злоумышленник может действовать от вашего имени, пока вы подключены к общедоступному серверу. Это потенциальное повышение привилегий, в зависимости от того, как вы настроили свою сеть. Двухфакторный SSH решит эту проблему.

Опять же, это очень редкое решение, и, вероятно, оно вызовет больше проблем, чем предотвратит, но если вы серьезно относитесь к тому, чтобы все заблокировать, мы покажем вам, как это сделать.

Как включить два фактора для SSH

Для обработки двухфакторных запросов мы будем использовать подключаемый модуль аутентификации Google (PAM), который работает с Authy и Google Authenticator. Установите его из менеджера пакетов вашего дистрибутива:

sudo apt-get install libpam-google-authenticator

Затем запустите эту команду инициализации:

google-authenticator

Ответьте «да» на первый вопрос о том, что токены аутентификации основаны на времени. Это более безопасно. Затем ваш терминал будет заполнен гигантским QR-кодом, и вам, вероятно, придется немного уменьшить масштаб.

Откройте приложение для проверки подлинности и отсканируйте свой код (не скриншот). Ваше приложение должно синхронизироваться и начать выводить шестизначные коды, которые меняются каждые 30 секунд.

Вы также захотите записать все дополнительные выходные данные, включая секретный ключ и аварийные скретч-коды. Они используются для повторного получения доступа к вашему серверу, если вы по какой-либо причине заблокированы, хотя вы должны быть предупреждены, что любые проблемы, связанные с неправильной настройкой, могут по-прежнему заблокировать вас навсегда. Мы включим два фактора дополнительно для тестирования, прежде чем сделать их обязательными.

На следующие вопросы ответьте на следующие вопросы:

  • Ответьте да на вопрос об обновлении конфигурации, иначе ничего не будет работать.
  • Ответьте «да» на запрет многократного использования каждого токена. Срок их действия истекает после их использования.
  • Ответьте нет на расширение окна действительного кода, так как в этом нет никакого смысла.
  • Ответьте да, чтобы разрешить ограничение скорости, которое заблокирует злоумышленников после трех попыток. Ваши последние три кода будут действительны в течение полутора минут, поэтому вам не придется беспокоиться о том, что вы заблокируете себя из-за слишком медленной работы.

Вся ваша конфигурация сохраняется в ~/.google-authenticator. Вы можете скопировать этот файл на дополнительный сервер, чтобы применить ту же конфигурацию; не запускайте повторно инструмент инициализации, иначе вам придется связать два отдельных устройства.

Настройте SSH для работы с Google PAM

Откройте файл конфигурации PAM по адресу /etc/pam.d/sshd в вашем любимом текстовом редакторе и добавьте в самый низ следующую строку:

auth required pam_google_authenticator.so nullok

Директива nullok означает, что это временно, поэтому два фактора будут необязательными, пока вы не измените это. Оставьте это так для тестирования. Вы также можете найти строку, содержащую @include common-auth, и закомментировать ее с помощью #:

# Standard Un*x authentication.
#@include common-auth

Это отключает аутентификацию на основе пароля, чего вы не хотите.

Затем откройте настройки SSH в /etc/ssh/sshd_config. Найдите параметр ChallengeResponseAuthentication и включите его:

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication yes

Это включает двухфакторную аутентификацию, однако ключи SSH по умолчанию переопределяют двухфакторную аутентификацию, поэтому вам придется исправить это, добавив следующую строку в конец sshd_config:

AuthenticationMethods publickey,keyboard-interactive

Для этого требуется открытый ключ и «интерактивная клавиатура», которая представляет собой подсказку, которая запрашивает ваш двухфакторный код.

Теперь SSH настроен, поэтому вы можете перезапустить sshd , чтобы включить следующие новые настройки:

sudo systemctl restart sshd.service

Это не закроет ваше открытое соединение, поэтому вы должны выполнять любое тестирование соединения на отдельной вкладке терминала. Откройте новую вкладку и попробуйте подключиться к вашему серверу. Вы должны увидеть подсказку с запросом кода подтверждения. Введите один со своего телефона, и если все правильно подключено, все должно работать. Если это не так, вы все равно сможете получить доступ к учетной записи, оставив это поле пустым.

Если все работает правильно и вы еще раз убедились, что со входом проблем нет, вы можете удалить директиву «nullok» в /etc/pam.d/sshd, чтобы сделать двухфакторную аутентификацию обязательной.

Если вы потеряете доступ, вы все равно сможете войти в систему, используя аварийные коды, которые вы получили при настройке PAM, а секретный ключ должен позволить вам повторно связать приложение TOTP, если ваше по какой-либо причине потеряет связь.

Добавить доступ для учетных записей служб

Если у вас есть учетная запись службы, которой требуется доступ к вашему серверу (например, rsync), вы должны отключить двухфакторную аутентификацию для этой учетной записи. Это довольно легко сделать; во-первых, мы хотим создать новую группу для добавления учетных записей служб:

sudo groupadd service

Затем добавьте пользователя в эту группу:

sudo useradd <username>
sudo usermod -a -G service <username>

Затем откройте конфигурацию PAM в /etc/pam.d/sshd и добавьте следующую строку:

auth [success=done default=ignore] pam_succeed_if.so user ingroup service

Обратите внимание, что это разрешает доступ к вашему серверу без 2FA, но если пользователь не root, это может не иметь большого значения.