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

Настройка многофакторной аутентификации для SSH в Linux

Настройка двухфакторной аутентификации для SSH в Linux

В этом руководстве мы узнаем, что такое многофакторная аутентификация и ее важность, а также, наконец, как настроить многофакторную аутентификацию для SSH в Linux с помощью приложения Google Authenticator.

Введение

Безопасность – дело серьёзное. Число компрометаций значительно растет с каждым днем, и, по оценкам, к 2025 году киберпреступность нанесет компаниям ущерб в 10,5 триллионов долларов США.

Важно, чтобы на всех уровнях технологического стека был реализован надежный уровень безопасности. В этой статье мы рассмотрим одну из таких реализаций безопасности для ssh с использованием многофакторной аутентификации.

SSH (расшифровывается как Secure Shell) — это сетевой протокол, который позволяет пользователям подключаться к удаленным машинам (серверам) и получать доступ к ресурсам.

Протокол ssh реализует два типа безопасности, а именно Аутентификация на основе пароля и Аутентификация на основе ключей.

Аутентификация на основе ключей (открытый -> частный) считается более безопасной по сравнению с аутентификацией на основе пароля, и в большинстве инструкций по усилению безопасности SSH рекомендуется отключать аутентификацию на основе пароля и включать только аутентификацию на основе ключей.

Независимо от того, какой механизм аутентификации вы выберете, вы можете сделать ssh более безопасным, внедрив настройку многофакторной аутентификации.

Что такое многофакторная аутентификация?

Многофакторная аутентификация (сокращенно MFA) – это безопасный процесс аутентификации, требующий более одного метода аутентификации, выбранного из независимых категорий учетных данных.

Многофакторную аутентификацию также иногда называют Двухфакторной аутентификацией (2FA).

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

Вторым фактором будет любое приложение, генерирующее OTP, или любой протокол, который отправляет вам текстовые сообщения или совершает вызов на ваше устройство.

В зависимости от того, как реализовано приложение, способ аутентификации может различаться. Некоторые распространенные инструменты, которые вы используете для MFA:

  • Приложение, установленное на мобильное устройство, генерирующее токены.
  • Внешнее устройство типа Yubikey.
  • Отпечаток пальца.
  • Распознавание лиц.
  • Текстовое сообщение или пароль OTP на основе звонка.

Чтобы включить многофакторную аутентификацию для ssh, мы будем использовать приложение Google Authenticator, которое использует протокол OATH-TOTP. Существуют и другие альтернативные инструменты, такие как Twilio Authy или FreeOTP, которые вы можете установить и опробовать.

Мы начнем с установки приложения Google Authenticator как на сервер, так и на мобильное устройство, а затем попытаемся включить MFA и выполнить проверку.

Установите Google Аутентификатор

Сначала установите приложение Google Authenticator на свои устройства Android или IOS через playstore/Itunes.

Приложение Google Аутентификатор

Теперь установите приложение Google Authenticator в свою систему Linux.

В зависимости от вашего дистрибутива выполните следующие команды установки.

В Ubuntu и его производных дистрибутивах выполните следующую команду.

sudo apt install libpam-google-authenticator

В дистрибутивах на основе RHEL выполните следующую команду.

sudo dnf install google-authenticator -y

Для распространения на основе Arch выполните следующую команду.

sudo pacman -S libpam-google-authenticator

Создать начальный токен для пользователя

В качестве первого шага в настройке MFA вам необходимо запустить следующую команду со своего терминала. Это позволит выполнить первоначальную настройку путем создания ключа TOTP. Этот ключ предназначен для пользователя, запускающего команду, и не применим ко всем пользователям в системе.

google-authenticator

Существует некоторая последовательность шагов, при которой вам будет предложено выбрать опцию (y/n).

ШАГ 1. Вам будет предложено выбрать токены аутентификации на основе времени. Токены аутентификации на основе времени будут генерировать новый код каждые 30 секунд. Нажмите y, чтобы продолжить.

Запустите команду Google Authenticator

ШАГ 2. Вместе с QR-кодом будет создан секретный токен. Откройте мобильное приложение Google Authenticator и отсканируйте QR-код или введите секретный ключ вручную, чтобы зарегистрировать устройство. Как только это будет сделано, приложение начнет генерировать токены каждые 30 секунд.

Секретные ключи и коды проверки

ШАГ 3. На этом этапе вам будет предложено обновить файл .google_authenticator в вашем домашнем каталоге. В этом файле сохраняются все секретные ключи, проверочный код, аварийные скретч-коды. Нажмите y, чтобы продолжить.

Обновите файл google_authenticator

ШАГ 4. Выбор "y" на этом этапе приведет к прекращению действия токена сразу после его использования для аутентификации. В этом случае, даже если какой-то хакер получит ваш токен, срок его действия истечет.

Запретить многократное использование одной и той же аутентификации

ШАГ 5. На этом этапе определяется количество разрешенных токенов и сроки. Когда я выбираю "n", это позволяет получить 3 токена за 90 секунд. Если я нажму "y", будет разрешено 17 токенов за 240 секунд.

Количество токенов

ШАГ 6. На этом этапе вам будет предложено включить ограничение скорости. Ограничение скорости позволяет злоумышленнику делать только 3 попытки входа каждые 30 секунд. Если токены неверны, им придется подождать N времени, чтобы повторить попытку.

Ограничение скорости

Мы завершили первый шаг. Откройте файл ~/.google_authenticator, и вы сможете найти все настройки и секретные коды, которые мы сделали на всех этих этапах.

cat ~/.google_authenticator

Посмотреть настройки google_authenticator

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

google-authenticator -q -t -d -f -r 3 -R 30 -w 3

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

google-authenticator –-help

Отобразить раздел справки Google-Authenticator

Настройте SSH для многофакторной аутентификации

Нам нужно внести некоторые изменения в конфигурацию openSSH, чтобы мы могли начать использовать MFA.

Примечание:

  • Рекомендуется всегда создавать резервные копии файлов конфигурации перед внесением каких-либо изменений. Если что-то не так, изменения можно отменить.
  • Поскольку вы вносите изменения в файлы конфигурации SSH, убедитесь, что у вас открыт отдельный сеанс, чтобы вас случайно не заблокировали.

Выполните следующие команды для резервного копирования файлов конфигурации SSH.

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.backup

Сначала включите SSH для использования MFA, установив для параметра ChallengeResponseAuthentication значение да.

Настройте SSH для использования MFA

Затем отредактируйте файл /etc/pam.d/sshd:

sudo vi /etc/pam.d/sshd

И добавьте следующие строки в конец файла.

auth required pam_google_authenticator.so nullok
auth required pam_permit.so

Редактировать файл конфигурации sshd Pam

Если вы хотите сделать MFA обязательным для всех пользователей, удалите слово "nullok".

Перезапустите службу ssh, чтобы изменения вступили в силу.

sudo systemctl restart sshd

Тест двухфакторной аутентификации

Пришло время проверить, эффективны ли внесенные нами изменения.

Подключитесь к серверу через SSH, и вам будет предложено ввести пароль в качестве первого фактора, а затем код подтверждения в качестве второго фактора аутентификации, как показано на изображении ниже.

ssh username@hostname/IPaddress

Тест двухфакторной аутентификации

После того, как вы введете пароль SSH и код подтверждения, вы сможете войти в систему.

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

У меня есть testuser, и я могу успешно подключиться, не запрашивая код подтверждения.

Подключиться с использованием альтернативного пользователя

Видеть? Я также могу войти в систему без кода подтверждения.

Многофакторная аутентификация для аутентификации на основе ключей

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

Потому что по умолчанию ssh сначала использует аутентификацию с открытым ключом, и если ключ найден, он аутентифицируется с его использованием. Если ключ не найден, будет использоваться аутентификация на основе пароля.

Чтобы проверить это, вы можете использовать режим подробный.

ssh -v username@hostname/IPaddress ## With verbose

SSH с подробным режимом

Добавьте следующую строку в нижний файл /etc/ssh/sshd_config:

AuthenticationMethods publickey,password publickey,keyboard-interactive

Затем откройте /etc/pam.d/sshd и закомментируйте следующую строку.

Общая аутентификация

Если вы не закомментируете "@include common-auth", это позволит использовать более двух факторов аутентификации. Сначала он будет аутентифицироваться с использованием ключей, а затем пароля и токенов. Все, что мне нужно, это ключ и токен для аутентификации, поэтому я отключаю его.

Трехфакторная аутентификация

Перезапустите службу sshd и проверьте, работают ли изменения нормально.

sudo systemctl restart sshd

Теперь, если я попытаюсь подключиться, он использует открытый ключ в качестве первого фактора и код проверки в качестве второго фактора аутентификации.

Ключ и код проверки

Шаги восстановления

Возможны ситуации, когда вы можете потерять или сменить свое мобильное устройство. В этом случае вам необходимо переустановить приложение Google-Authenticator и зарегистрировать секретный ключ, чтобы начать генерировать токены.

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

Помните коды, которые генерируются на начальном этапе? Вы можете использовать экстренный скретч-код в качестве токена для входа в систему. Каждый скретч-код можно использовать только один раз. Сохраните его в безопасном месте, чтобы его можно было использовать при необходимости.

Коды сохраняются в файле ~/.google_authenticator.

cat ~/.google_authenticator

Скретч-коды

Теперь вы можете снова восстановить свои собственные ключи, выполнив следующую команду.

google-authenticator

Заключение

В этой статье я показал вам, как установить аутентификатор Google и включить многофакторную аутентификацию для SSH с различными конфигурациями.

Как администратор, вы также можете писать скрипты Bash, чтобы автоматизировать процесс генерации секретных ключей и поделиться ими с пользователем. Вам также следует усилить защиту ssh перед настройкой MFA, чтобы ваша система была более безопасной. Мы планируем осветить их в отдельных статьях. Следите за обновлениями!

Связанное чтение:

  • Как настроить аутентификацию на основе ключей SSH в Linux
  • Определите, использует ли пользователь SSH-аутентификацию на основе пароля или ключа
  • Как разрешить или запретить доступ по SSH определенному пользователю или группе в Linux
  • Отключить аутентификацию по паролю SSH для конкретного пользователя или группы

Статьи по данной тематике