Гид по технологиям

Как защитить Raspberry Pi с помощью двухфакторной аутентификации

10 min read Безопасность Обновлено 13 Dec 2025
Защита Raspberry Pi: SSH с двухфакторной аутентификацией
Защита Raspberry Pi: SSH с двухфакторной аутентификацией

Быстрая навигация

  • The Amazing Raspberry Pi
  • Двухфакторная аутентификация
  • Настройка Raspberry Pi
  • Установка приложения
  • Конфигурация 2FA
  • Связывание компонентов
  • Дополнительные меры безопасности
  • SOP и план отката
  • Частые вопросы

Raspberry Pi на клавиатуре, компактный одноплатный компьютер

Что такое Raspberry Pi и почему его нужно защищать

Raspberry Pi — это одноплатный компьютер, выпущенный в Великобритании в 2012 году с целью обучения и экспериментов. Это недорогая, энергоэффективная платформа, предоставляющая HDMI-выход, USB, сетевое подключение и возможность запуска Linux. Форм-фактор часто бывает очень компактным — есть модели от минималистичного Pi Zero до полнофункциональных Pi 4.

Факты:

  • Цена: от примерно $5 за Pi Zero до около $75 за Pi 4 B с 8 ГБ оперативной памяти.
  • Популярность: миллионы устройств в обороте по всему миру (в оригинальном материале упоминалось более 30 млн проданных единиц).

Проблема: при массовом распространении платформа привлекает внимание злоумышленников. Многие устройства используют стандартный пользовательский аккаунт (pi) и пароль, что делает их уязвимыми, особенно если SSH доступен из интернета. Взлом Pi часто используется как точка входа в более крупные сети: злоумышленник получает доступ к одному устройству и затем «пивотирует» к другим.

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

Что такое двухфакторная аутентификация (2FA)

Аутентификация — это подтверждение, что кто-то имеет право войти в систему. Факторы аутентификации делятся на три категории:

  • Что-то, что вы знаете: пароль или фраза.
  • Что-то, что у вас есть: смартфон, аппаратный токен или USB-донгл.
  • Что-то, чем вы являетесь: биометрия (отпечаток пальца, скан сетчатки).

Многофакторная аутентификация (MFA) комбинирует хотя бы два из разных категорий. В этом руководстве мы используем пароль (что-то, что вы знаете) и приложение-генератор кодов на телефоне (что-то, что у вас есть). Приложение и сервер синхронизируются и генерируют коды TOTP (time-based one-time passwords) — одноразовые коды, действующие короткое время.

Краткое определение: TOTP — временные шестизначные коды, генерируемые локально и синхронизированные с сервером по времени; код действителен обычно 30 секунд.

Преимущества 2FA:

  • Значительно снижает риск успешного взлома при компрометации пароля.
  • Быстро и дешево внедряется на Raspberry Pi.

Ограничения 2FA (коротко): не защищает от атак на конечную точку, социальных атак или полного компрометации телефона.

Подготовка: две SSH-сессии и план безопасности

Если вы обычно подключаетесь по SSH, предположим, что ваш Pi работает в «headless» режиме (без монитора). Работать будем по SSH.

Важно: установите две параллельные SSH-сессии перед изменениями. Одна сессия служит для настройки и тестирования, вторая — страховая: если первая потеряет доступ, вторая останется активной и позволит откатить изменения.

Пример команды (используйте своё имя хоста и пользователя):

ssh pi@watchdog.local

Если вы меняли имя пользователя или хостнейм, подставьте свои значения. Оставьте одну сессию минимизированной и не закрывайте её до полной проверки работоспособности 2FA.

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

Что проверить перед началом

  • Ваш локальный компьютер и Raspberry Pi имеют корректные системные часы (время важно для TOTP).
  • У вас есть физический доступ к устройству на случай полной потери SSH.
  • Создайте резервную копию /home/pi и критичных конфигурационных файлов.

SSH-соединение с Raspberry Pi в терминальном окне

Настройка SSH для поддержки 2FA

  1. Откройте файл конфигурации SSH-демона в nano:
sudo nano /etc/ssh/sshd_config
  1. Найдите строку:
ChallengeResponseAuthentication no

и замените no на yes:

ChallengeResponseAuthentication yes
  1. Сохраните (Ctrl+O) и выйдите (Ctrl+X).

  2. Перезапустите SSH-демон:

sudo systemctl restart ssh

Файл sshd_config открыт в редакторе nano, строка ChallengeResponseAuthentication выделена

Примечание: изменение этой опции не прерывает уже установленные сессии, потому вторая сессия остаётся рабочей и служит страховкой.

Установка PAM-модуля Google Authenticator

На Raspberry Pi установим PAM-модуль libpam-google-authenticator. PAM (Pluggable Authentication Modules) — это модульная подсистема Linux для обработки аутентификации (пароль, токены и т.д.).

Установка:

sudo apt-get install libpam-google-authenticator

Этот модуль позволит SSH запрашивать TOTP у входящего пользователя.

Установка приложения на телефон

Установите Google Authenticator (iOS/Android) или совместимое приложение, например Authy. Любое приложение, поддерживающее TOTP, сгодится.

Конфигурация двухфакторной аутентификации на аккаунте

Запустите на Raspberry Pi (под своим обычным пользователем, без sudo):

google-authenticator

Вас спросят, хотите ли вы использовать временные токены. Ответьте Y и нажмите Enter.

В терминале появится QR-код. Если окно терминала шириной 80 колонок, код может быть «искажён» — раздвиньте окно, чтобы увидеть полностью. Под QR-кодом отображаются резервные одноразовые коды. Сохраните их где-то в безопасном месте: они понадобятся, если вы потеряете доступ к телефону.

Ответьте на последовательность вопросов (рекомендуемые ответы):

  • Обновить файл “/home/pi/.google_authenticator”? — Y
  • Запретить повторное использование кодов в течение 30 секунд? — Y
  • Расширить окно допуска токенов (увеличивает вероятность синхрониз. ошибок)? — N
  • Включить ограничение частоты (rate-limiting)? — Y

После этого откройте приложение на телефоне, нажмите + → Scan QR Code и отсканируйте код с терминала. В приложении появится запись с именем хоста (hostname) и текущий 6-значный код. Вводите код как единое число, без пробелов.

Связывание PAM и SSH

Отредактируйте PAM-конфиг для SSH:

sudo nano /etc/pam.d/sshd

Вставьте строку (где именно — см. ниже):

#2FA
auth required pam_google_authenticator.so

Расположение этой строки определяет порядок запроса аутентификационных факторов:

  • Чтобы запросить код ПОСЛЕ пароля: вставьте строку ниже @include common-auth.
  • Чтобы запросить код ДО пароля: вставьте строку выше @include common-auth.

Сохраните и выйдите, затем перезапустите SSH:

sudo systemctl restart ssh

Закройте одну SSH-сессию, но оставьте «страховую» открытую. Попробуйте подключиться снова и введите пароль, затем код из приложения. Если вход не проходит, используйте запасную сессию для диагностики.

Тестирование и приёмочное тестирование

Критерии приёмки:

  • Пользователь может подключиться по SSH, введя сначала пароль, затем действительный TOTP.
  • При вводе неверного кода доступ запрещён.
  • Повторное использование кода в пределах окна запрещено (если включено).
  • В случае потери телефона доступны резервные коды и маршрут восстановления.

Тестовые сценарии:

  1. Правильный пароль + правильный код → успешный вход.
  2. Правильный пароль + неверный код → доступ запрещён.
  3. Неверный пароль + правильный код → доступ запрещён.
  4. Потеря телефона → вход с использованием резервного одноразового кода.

Частые проблемы и отладка

  • Проблема: коды всегда неверные. Причина: неверное системное время на Pi или телефоне. Решение: синхронизировать время (ntp/systemd-timesyncd).

  • Проблема: QR-код обрезан. Решение: увеличить ширину окна терминала или подключиться локально к дисплею.

  • Проблема: вы оказались заблокированы. Решение: используйте вторую SSH-сессию или подключите монитор и клавиатуру, чтобы удалить строку из /etc/pam.d/sshd.

Дополнительные меры безопасности (жёсткая защита)

2FA — важный слой, но его стоит дополнить следующими практиками:

  • Отключить вход под root по SSH: в /etc/ssh/sshd_config установите PermitRootLogin no.
  • Использовать ключи SSH и отключить аутентификацию паролем (PasswordAuthentication no) только после тщательного тестирования и если у вас есть 2FA для ключей.
  • Переименовать или удалить стандартного пользователя “pi” и создать отдельные, персональные учётные записи.
  • Ограничить доступ по IP через ufw/iptables или VPN.
  • Установить fail2ban для ограничения числа попыток входа.
  • Ограничить доступ к файлу .google_authenticator (chmod 600).
  • Включить автоматические обновления безопасности или регулярные обновления пакетов.
  • Разместить Pi за VPN или использовать reverse SSH tunnel для публичного доступа.
  • Рассмотреть использование аппаратного токена (YubiKey) для ещё более высокой надёжности.

Важно: изменение PasswordAuthentication на no одновременно с включённой 2FA может потребовать дополнительной настройки для работы аутентификации по ключам + 2FA. Тщательно тестируйте изменения с резервной сессией.

Когда 2FA не спасёт — ограничения и обходы

2FA затрудняет многие атаки, но при определённых обстоятельствах может оказаться бесполезной:

  • Социальная инженерия: злоумышленник обманывает вас и получает код напрямую.
  • MITM (man-in-the-middle): в сложных сценариях атаки, если злоумышленник контролирует сетевой трафик между клиентом и сервером в момент входа.
  • Компрометация конечного устройства: если телефон с генератором кодов взломан, коды могут быть украдены.
  • SIM-swapping не влияет на TOTP (онлайн-сим-код не используется), но влияет на SMS-базированные коды.

Митигирующие меры: защита конечной точки (антивирусы, обновления), обучение пользователей, аппаратные ключи безопасности и мониторинг аномалий в логах.

SOP: пошаговый план внедрения 2FA на Raspberry Pi

  1. Подготовка

    • Резервное копирование важных файлов и /etc конфигураций.
    • Убедиться в том, что системное время корректно (timedatectl).
  2. Установить пакет

    • sudo apt-get update && sudo apt-get install libpam-google-authenticator
  3. Включить ChallengeResponseAuthentication в /etc/ssh/sshd_config

    • set ChallengeResponseAuthentication yes
    • sudo systemctl restart ssh
  4. Запустить google-authenticator для каждого пользователя, кто будет входить по SSH

    • google-authenticator — сохранить QR и резервные коды.
  5. Изменить /etc/pam.d/sshd и вставить:

    • auth required pam_google_authenticator.so
  6. Перезапустить SSH и протестировать через вторую сессию

  7. Внедрить дополнительные меры безопасности (fail2ban, ограничение IP, отключение root)

  8. Документировать процесс и хранить резервные коды в безопасном месте (менеджер паролей или оффлайн-хранилище)

План отката и инцидентный runbook

Если что-то пошло не так — быстрые шаги для восстановления доступа:

  1. Не закрывайте вторую SSH-сессию.
  2. Через вторую сессию откатите изменения в /etc/pam.d/sshd (удалите строку pam_google_authenticator.so).
  3. Перезапустите SSH: sudo systemctl restart ssh.
  4. Если обе сессии потеряны, подключите монитор+клавиатуру к Pi и выполните шаги локально.
  5. В крайнем случае извлеките microSD, подключите к другому компьютеру и вручную измените файлы конфигурации или восстановите образ.

Критерии успеха отката: SSH вновь принимает только пароль и вы можете войти в систему.

Рольовые чек-листы

Администратор:

  • Сделать резервные копии конфигураций.
  • Проверить время на Pi.
  • Установить libpam-google-authenticator.
  • Включить ChallengeResponseAuthentication.
  • Вставить pam_google_authenticator.so в /etc/pam.d/sshd.
  • Тестировать с двух сессий.
  • Документировать резервные коды.

Пользователь:

  • Установить приложение-генератор на телефон.
  • Запустить google-authenticator и отсканировать QR.
  • Сохранить резервные коды в безопасном месте.

Чек-лист тестирования после внедрения

  • Успешный вход с паролем + TOTP.
  • Ошибка при вводе неверного TOTP.
  • Вход с резервным кодом при потере телефона.
  • Логирование попыток входа и срабатывания rate-limiting.

Решения альтернативной аутентификации

  • SSH-ключи + 2FA: считаются более защищёнными, чем пароли. Можно требовать ключ и TOTP.
  • Аппаратные токены (U2F, YubiKey): более стойкие к фишингу и компрометации телефона.
  • Вход через VPN или bastion host: убирает публичный SSH из интернета.

Ментальные модели и эвристики

  • «Защита по слоям»: каждая мера (пароль, 2FA, firewall) снижает вероятность успешной атаки.
  • «Страховка»: всегда иметь альтернативный способ доступа (вторая сессия, локальный вход).
  • «Принцип наименьшего доступа»: давать только те права, которые реально нужны.

Факт-бокс

  • Срок действия TOTP: обычно 30 секунд.
  • Резервные коды: одноразовые, храните их оффлайн.
  • PAM-модуль: libpam-google-authenticator.

Совместимость и локальные особенности

  • Приложения: Google Authenticator (iOS/Android), Authy и другие поддерживают TOTP.
  • Локализация времени: убедитесь, что Pi использует правильный часовой пояс и синхронизацию времени (systemd-timesyncd, ntp).

Короткий глоссарий

  • SSH: Secure Shell — протокол удалённого управления.
  • PAM: Pluggable Authentication Modules — система модулей аутентификации в Linux.
  • TOTP: Time-based One-Time Password — временный одноразовый пароль.

Модель принятия решений (диаграмма)

graph TD
  A[Начать внедрение 2FA?] --> B{Pi имеет публичный SSH?}
  B -- Да --> C[Включить 2FA 'PAM, Google Authenticator']
  B -- Нет --> D[Рассмотреть VPN/SSH через bastion]
  C --> E{Прошло тестирование?}
  E -- Да --> F[Отключить root, настроить fail2ban]
  E -- Нет --> G[Откат и диагностика]
  G --> C

Часто задаваемые вопросы

Что делать, если я потерял телефон с приложением-генератором?

Используйте заранее сохранённые резервные одноразовые коды, которые были выданы при настройке google-authenticator. Если у вас нет резервных кодов, подключитесь к Pi через страховую SSH-сессию или локально через монитор/клавиатуру, удалите pam_google_authenticator.so из /etc/pam.d/sshd и повторно настройте 2FA.

Можно ли использовать Authy вместо Google Authenticator?

Да, любые приложения, поддерживающие стандарт TOTP, совместимы.

Повлияет ли изменение часового пояса на коды?

Важна синхронизация времени, а не часовой пояс. Убедитесь, что время и часы на Pi и телефоне точны (ntp или systemd-timesyncd).

Резюме

Двухфакторная аутентификация на Raspberry Pi даёт существенное повышение безопасности по сравнению с обычными паролями. Внедрение требует аккуратной последовательности действий: подготовка, установка libpam-google-authenticator, конфигурация SSH/PAM, тестирование с запасной сессией, документирование резервных кодов и добавление дополнительных мер защиты. 2FA не панацея, но это важный слой в стратегии защиты.

Важно: всегда оставляйте план отката и тестируйте изменения безопасным способом.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

FaceTime с Android и Windows — как подключиться
Руководство

FaceTime с Android и Windows — как подключиться

Оглавление в Google Slides — быстрый гид
Презентации

Оглавление в Google Slides — быстрый гид

nice и renice: управляем приоритетами процессов
Linux

nice и renice: управляем приоритетами процессов

Запуск Linux GUI через Bash на Windows 10
Инструменты

Запуск Linux GUI через Bash на Windows 10

Исправить steamclient64.dll — файл не найден
Техподдержка

Исправить steamclient64.dll — файл не найден

Комментарии и метки для папок в Windows 11
Windows

Комментарии и метки для папок в Windows 11