Как защитить сервер от взлома: Настройка 2FA через Google Authenticator PAM
Приветствую, друзья!
В современных реалиях классической парольной защиты или авторизации по SSH-ключам становится недостаточно, если учетная запись администратора будет скомпрометирована. Внедрение двухфакторной аутентификации (2FA) на базе одноразовых временных паролей (TOTP) создаёт дополнительный рубеж обороны: даже если злоумышленник перехватит ваш private key или пароль, он не сможет войти на сервер без физического доступа к вашему генератору кодов.
Как пример хочется сразу привести Steam Guard, благодаря которому никто так и не смог взломать аккаунт Гейба Ньюэлла, хотя тот сообщил всему миру свою почту и пароль от аккаунта. Так что включение двухфакторной аутентификации обеспечивает максимальную защиту вашего аккаунта.
В этом пошаговом руководстве мы настроим 2FA для SSH-подключений на базе модуля Google Authenticator PAM для операционных систем Ubuntu / Debian и CentOS / AlmaLinux. Кстати говоря, многие сайты стали внедрять Google Authenticator для входа в аккаунт, чтобы пользователи не теряли свои аккаунты.
Key Takeaways: Ключевые выводы
2FA защищает от утечек ключей и брутфорса: Даже при компрометации приватного SSH-ключа доступ к серверу остается заблокированным без 6-значного временного кода TOTP.
Гибкость политики авторизации: Модуль PAM позволяет настроить как связку «Пароль + 2FA», так и максимально защищенную комбинацию «SSH-ключ + 2FA».
Важность резервных кодов: Перед перезапуском демона SSH обязательно сохраните одноразовые аварийные коды (Emergency Recovery Codes), чтобы не потерять доступ к инфраструктуре при утере смартфона.
Архитектура работы TOTP 2FA в Linux
Двухфакторная аутентификация в Linux реализуется через подсистему PAM (Pluggable Authentication Modules). Когда клиент инициирует соединение через sshd, подсистема PAM перехватывает запрос и обращается к модулю pam_google_authenticator.so.
Модуль считывает секретный ключ из домашней директории пользователя (~/.google_authenticator), сверяет сгенерированный вашим смартфоном код с текущим временем сервера и принимает решение о предоставлении доступа.
Правда ли двухфакторная аутентификация надежна?
Да. Лично я неоднократно подвергался нападкам мошенников, которые связаны со Steam-аккаунтом, и более того, я даже вводил данные логина и пароля на сайтах данных мошенников, но не вводил код из самого Steam Guard. Именно благодаря нему я до сих пор владею своим аккаунтом и рекомендую всем использовать двухфакторную аутентификацию.
Пошаговое руководство по настройке
Шаг 1: Установка модуля PAM
Зайдите на сервер под пользователем, для которого настраивается 2FA (с правами sudo).
Для Ubuntu / Debian:
sudo apt update && sudo apt install libpam-google-authenticator -y
Для RHEL / AlmaLinux / Rocky Linux:
sudo dnf install epel-release -y
sudo dnf install google-authenticator -y
Шаг 2: Генерация секретного ключа и QR-кода Выполните команду генерации от имени целевого пользователя:
google-authenticator
Мастер настройки задаст вам несколько вопросов. Рекомендуемые ответы:
Do you want authentication tokens to be time-based? (y) — активирует генерацию кодов на основе времени (TOTP). Правильно выбрать
yes, т.к. если генерация кодов основана на времени, то каждый раз код будет случайным.Появится крупный QR-код и секретный ключ. Отсканируйте QR-код в вашем приложении 2FA (Google Authenticator, Bitwarden, 2FA LassPass, Aegis).
ОБЯЗАТЕЛЬНО скопируйте и сохраните emergency recovery codes в надежное место.
Do you want me to update your "~/.google_authenticator" file? (y) — сохранит настройки в профиль.
Disallow multiple uses of the same authentication token? (y) — защитит от атак повторного воспроизведения (Replay Attacks).
Increase window size? (n) — оставляет окно валидности в 30 секунд (выберите
y, если на сервере и смартфоне часто рассинхронизируются часы).Enable rate-limiting? (y) — защищает от брутфорса (ограничивает до 3 попыток каждые 30 секунд).
Шаг 3: Настройка подсистемы PAM для SSH Отредактируйте конфигурационный файл службы SSH в PAM:
sudo nano /etc/pam.d/sshd
Добавьте в конец файла следующую строку:
auth required pam_google_authenticator.so nullok
Важно: Параметр nullok позволяет пользователям, у которых еще не настроен google-authenticator, входить по стандартному паролю или ключу. Когда все администраторы настроят 2FA, удалите nullok, чтобы сделать 2FA строго обязательным для всех.
Шаг 4: Конфигурация OpenSSH Демона (sshd_config) Теперь необходимо указать демону SSH запрашивать интерактивный ввод двухфакторного кода.
Отредактируйте файл /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
Найдите и установите следующие значения директив:
KbdInteractiveAuthentication yes
UsePAM yes
Сценарий А: Авторизация по SSH-ключам + 2FA (Рекомендуемый стандарт) Если вы хотите, чтобы сервер запрашивал SSH-ключ, а затем TOTP-код (без ввода системного пароля), добавьте в конец файла:
AuthenticationMethods publickey,keyboard-interactive
Перезапустите службу SSH для применения настроек:
# Для Ubuntu / Debian
sudo systemctl restart ssh
# Для AlmaLinux / Rocky Linux / RHEL
sudo systemctl restart sshd
Чек-лист проверки доступа (Важно!)
НЕ ЗАКРЫВАЙТЕ текущую сессию SSH. Откройте новое окно терминала и проверьте подключение:
ssh -i ~/.ssh/id_rsa user@your_server_ip
Вы должны увидеть запрос:
Authenticated with partial success.
Verification code:
Введите 6-значный код из мобильного приложения. При успешном вводе вы попадете в консоль сервера.
ЗАПОМНИТЕ: Отключать терминал можно только после успешной проверки, в противном случае вы можете потерять доступ к серверу через данного пользователя и придется обращаться за помощью к системному администратору или интернет-провайдеру.
FAQ: Часто задаваемые вопросы
Что делать, если потерян телефон с Google Authenticator? Используйте один из сохраненных одноразовых аварийных кодов (emergency recovery codes) вместо 6-значного временного кода. Если у вас есть доступ к root-консоли (через VNC/IPMI панель хостинга MivoCloud), вы можете временно отключить 2FA для пользователя, удалив файл
~/.google_authenticator.Почему рассинхронизируются коды и сервер пишет "Invalid code"? Специфика TOTP завязана на точное системное время. Убедитесь, что на сервере включена и работает служба синхронизации времени
chronyилиsystemd-timesyncd:Bashsudo timedatectl statusМожно ли настроить 2FA для пользователя root? Да, аналогичным запуском
google-authenticatorиз-под учетной записи root. Однако с точки зрения безопасности рекомендуется полностью отключить прямой вход под root (PermitRootLogin no) и использовать авторизацию через рядового пользователя сsudo.
Заключение
Настройка двухфакторной аутентификации — это один из самых эффективных и недорогих способов защитить серверную инфраструктуру от несанкционированного доступа. Потратив всего 10 минут на интеграцию PAM-модуля Google Authenticator, вы сводите к минимуму риски компрометации ваших сервисов.
Однако сетевая безопасность требует комплексного подхода. Высокий уровень защиты SSH должен подкрепляться надежным аппаратным фундаментом, защитой от DDoS-атак и изолированной сетью.
Если вы ищете отказоустойчивую платформу для развертывания критически важных проектов, оцените NVMe VPS и Выделенные Серверы от MivoCloud. Мы предоставляем чистую KVM-виртуализацию с аппаратной изоляцией ресурсов, мгновенными снапшотами для безопасного проведения системных настроек и высокоскоростным подключением.
Автор статьи: Anatolie Cohaniuc

