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

Что такое 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 для поддержки 2FA
- Откройте файл конфигурации SSH-демона в nano:
sudo nano /etc/ssh/sshd_config- Найдите строку:
ChallengeResponseAuthentication noи замените no на yes:
ChallengeResponseAuthentication yesСохраните (Ctrl+O) и выйдите (Ctrl+X).
Перезапустите SSH-демон:
sudo systemctl restart ssh
Примечание: изменение этой опции не прерывает уже установленные сессии, потому вторая сессия остаётся рабочей и служит страховкой.
Установка 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.
- При вводе неверного кода доступ запрещён.
- Повторное использование кода в пределах окна запрещено (если включено).
- В случае потери телефона доступны резервные коды и маршрут восстановления.
Тестовые сценарии:
- Правильный пароль + правильный код → успешный вход.
- Правильный пароль + неверный код → доступ запрещён.
- Неверный пароль + правильный код → доступ запрещён.
- Потеря телефона → вход с использованием резервного одноразового кода.
Частые проблемы и отладка
Проблема: коды всегда неверные. Причина: неверное системное время на 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
Подготовка
- Резервное копирование важных файлов и /etc конфигураций.
- Убедиться в том, что системное время корректно (timedatectl).
Установить пакет
- sudo apt-get update && sudo apt-get install libpam-google-authenticator
Включить ChallengeResponseAuthentication в /etc/ssh/sshd_config
- set ChallengeResponseAuthentication yes
- sudo systemctl restart ssh
Запустить google-authenticator для каждого пользователя, кто будет входить по SSH
- google-authenticator — сохранить QR и резервные коды.
Изменить /etc/pam.d/sshd и вставить:
- auth required pam_google_authenticator.so
Перезапустить SSH и протестировать через вторую сессию
Внедрить дополнительные меры безопасности (fail2ban, ограничение IP, отключение root)
Документировать процесс и хранить резервные коды в безопасном месте (менеджер паролей или оффлайн-хранилище)
План отката и инцидентный runbook
Если что-то пошло не так — быстрые шаги для восстановления доступа:
- Не закрывайте вторую SSH-сессию.
- Через вторую сессию откатите изменения в /etc/pam.d/sshd (удалите строку pam_google_authenticator.so).
- Перезапустите SSH: sudo systemctl restart ssh.
- Если обе сессии потеряны, подключите монитор+клавиатуру к Pi и выполните шаги локально.
- В крайнем случае извлеките 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 не панацея, но это важный слой в стратегии защиты.
Важно: всегда оставляйте план отката и тестируйте изменения безопасным способом.
Похожие материалы
FaceTime с Android и Windows — как подключиться
Оглавление в Google Slides — быстрый гид
nice и renice: управляем приоритетами процессов
Запуск Linux GUI через Bash на Windows 10
Исправить steamclient64.dll — файл не найден