Как включить двухфакторный вход в систему по SSH – CloudSavvy IT
![Мужчина держит смартфон.](https://www.cloudsavvyit.com/thumbcache/0/0/f5c6aa9a407db1794d75f0a69320a961/p/uploads/2019/10/c50db96f.png)
Если вы действительно хотите заблокировать свой облачный сервер, вы можете включить двухфакторную аутентификацию для SSH таким же образом, как вы добавили бы ее в свою учетную запись Gmail, не позволяя никому получить доступ, если они украли ваш закрытый ключ SSH.
Это действительно необходимо?
По сравнению с наличием двух факторов для электронной почты или учетной записи в Интернете, два фактора для SSH не так полезны. Для чего-то вроде электронной почты причиной сбоя обычно являются схемы сброса пароля, легко взломанные пароли или утечка данных. Действительно, все, что связано с плохими паролями или плохим управлением паролями.
Для SSH это не большая проблема. SSH использует очень хорошее шифрование для открытых и закрытых ключей, которые он использует для установления соединений. Если ваш SSH-сервер заблокирован и не разрешает доступ с паролем, никто не сможет войти, если у него нет физического устройства, на котором расположен ключ, и маловероятно, что кто-то будет взламывать ваш SSH-ключ в любое время в этом столетии. Таким образом, в некотором смысле, у вас уже есть два фактора, потому что ваш ключ останется на вашем ноутбуке.
Но в некоторых случаях два фактора могут быть хорошим выбором. Если какой-то сумасшедший хакер решит украсть ваш ноутбук с намерением получить вместе с ним ваши SSH-ключи (а не просто продать его в Craigslist, когда они не смогут взломать пароль вашего устройства), наличие двух факторов сделает вас на шаг впереди.
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)
Однако более реальная проблема связана с переадресацией агента 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
Это позволяет использовать 2FA, однако SSH-ключи переопределяют 2FA по умолчанию, поэтому вам придется это исправить, добавив следующую строку в конец sshd_config
:
AuthenticationMethods publickey,keyboard-interactive
Для этого требуется открытый ключ и «клавиатура-интерактив», которая запрашивает у вас ваш двухфакторный код.
SSH теперь настроен, поэтому вы можете перезагрузить sshd
чтобы включить эти новые настройки:
sudo systemctl restart sshd.service
Это не закроет ваше открытое соединение, поэтому вы должны выполнить любое тестирование соединения на отдельной вкладке терминала. Откройте новую вкладку и попробуйте подключиться к вашему серверу. Вы должны увидеть подсказку с запросом кода подтверждения. Введите один с вашего телефона, и если все связано правильно, он должен работать. Если это не так, вы все равно сможете получить доступ к учетной записи, оставив ее пустой.
Если все работает правильно, и вы дважды проверили, что нет проблем со входом, вы можете удалить «nullok
Директива в /etc/pam.d/sshd
сделать 2FA обязательным.
Если вы потеряете доступ, вы все равно сможете войти в систему с помощью кодов чрезвычайной ситуации, которые вы получили при настройке PAM, и секретный ключ должен позволить вам повторно связать приложение TOTP, если по какой-либо причине ваше приложение перестало подключаться.
Добавить доступ к учетным записям служб
Если у вас есть учетная запись службы, которая должна получить доступ к вашему серверу (например, rsync
), вы должны отключить 2FA для этой учетной записи. Это довольно легко сделать; Во-первых, мы хотим создать новую группу для добавления учетных записей служб:
sudo groupadd service
Затем добавьте пользователя в эту группу:
sudo useraddsudo usermod -a -G service
Затем откройте конфигурацию PAM в /etc/pam.d/sshd
и добавьте следующую строку:
auth [success=done default=ignore] pam_succeed_if.so user ingroup service
Обратите внимание, что это разрешает доступ к вашему серверу без 2FA, но если пользователь не является пользователем root, это может не иметь большого значения.
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)