Google Authenticator на Ubuntu: как настроить двухфакторную аутентификацию (2FA)
Изображения используются для иллюстрации шагов — обратите внимание на описания под ними и сохраняйте резервные коды в надёжном месте.
Почему это важно
Война между злоумышленниками и специалистами по информационной безопасности продолжается. Согласно исследованиям Бюро трудовой статистики США (Bureau of Labor Statistics), спрос на специалистов по безопасности растёт быстрее, чем в большинстве других профессий. В повседневной практике простые меры защиты могут значительно снизить вероятность несанкционированного доступа. Двухфакторная аутентификация (2FA) добавляет второй независимый фактор кроме пароля — обычно это одноразовый код из мобильного приложения.
Изображение: демонстрация слабого пароля на ноутбуке
Важно: 2FA заметно повышает безопасность, но не делает систему неуязвимой. Есть векторы обхода (например, SIM-swap при использовании SMS), поэтому стоит знать альтернативы и меры смягчения рисков.
Основные понятия в одну строку
- Двухфакторная аутентификация (2FA): проверка личности с помощью двух разных факторов (что-то, что вы знаете + что-то, что вы имеете).
- TOTP: Time-based One-Time Password — временные одноразовые коды, которые генерирует Google Authenticator.
- PAM: Pluggable Authentication Modules — система модульной аутентификации в Linux.
Сфера применения и предпосылки
Этот гид подходит для Ubuntu 16.04 (Desktop или Server) и объясняет настройку PAM-модуля libpam-google-authenticator в сочетании с мобильным приложением Google Authenticator (Android или iOS).
Перед началом убедитесь, что:
- У вас есть локальный или удалённый доступ с правами sudo.
- У всех пользователей, для которых вы включаете 2FA, есть смартфоны с возможностью установки приложений из Google Play или App Store.
- Вы понимаете риски временной блокировки и подготовили способ восстановления доступа.
Установка мобильного приложения
Первый этап — мобильная сторона: установите Google Authenticator на смартфон.
Откройте Google Play или App Store, найдите «google authenticator», проверьте издателя (Google Inc.) и установите приложение. После установки откройте приложение и подготовьте его к сканированию QR-кодов.
Изображение: экран установки приложения Google Authenticator
Установка PAM-модуля на Ubuntu
Откройте терминал на сервере или рабочей станции и выполните установку:
sudo apt-get install libpam-google-authenticatorПри необходимости введите пароль и подтвердите установку.
Конфигурация PAM
Отредактируйте файл /etc/pam.d/common-auth, чтобы подключить модуль Google Authenticator. Запустите редактор от root:
sudo nano /etc/pam.d/common-authНайдите строку, похожую на:
auth [success=1 default=ignore] pam_unix.so nullok_secureИ прямо над ней добавьте строку:
auth required pam_google_authenticator.soФайл должен выглядеть примерно так (с сохранением оригинальных строк):
Сохраните и закройте файл (Ctrl+X, затем Y).
Важное замечание: если у вас в системе есть пользователи, для которых вы не готовы включать 2FA немедленно, рассмотрите возможность использовать параметры pam_google_authenticator.so nullok или настроить исключения, чтобы избежать массовой блокировки доступа. Будьте внимательны: неверные изменения в PAM могут привести к невозможности входа.
Настройка для каждого пользователя
Каждый пользователь, у которого вы хотите требовать 2FA, должен выполнить на своём сеансе команду:
google-authenticatorКоманда сгенерирует набор данных и задаст вопросы конфигурации.
При запуске вы увидите:
- QR-код для сканирования
- Проверочный одноразовый код (одиноразовый код можно ввести сразу)
- Секретный ключ (seed)
- Набор из 5 запасных одноразовых «scratch» кодов
Рекомендации по ответам на вопросы:
- Разрешить обновление токенов и синхронизацию времени — рекомендуется отвечать Y.
- Разрешать одноразовые коды scratch — сохраните их в безопасном месте (бумажный носитель или менеджер паролей с шифрованием).
Ниже приведён примерный набор вопросов и безопасные ответы (по умолчанию Y):
- Do you want authentication tokens to be time-based? Y
- Do you want to disallow multiple uses of the same authentication token? Y
- Do you want to increase the original generation window? N (обычно N)
- Do you want to enable rate-limiting? Y (защищает от перебора)
Не закрывайте терминал, пока не сохраните ключи или не отсканируете QR-код в приложение.
Настройка мобильного приложения
В приложении Google Authenticator выберите «Начать» или нажмите плюс, затем «Сканировать штрих-код» и отсканируйте QR-код в терминале. Если камера не распознаёт код, выберите «Ввести предоставленный ключ» и вручную введите секретный ключ, после чего укажите понятное имя учётной записи (например, user@hostname).
После добавления учётной записи приложение начнёт показывать шестизначные коды с таймером — эти коды действительны короткий промежуток времени и используются при логине.
Тестирование входа и sudo
Протестируйте работу для второго пользователя. Например, смените пользователя в терминале:
sudo su slaghoopleПри попытке выполнить команду требующую sudo вы увидите запрос одноразового кода. Откройте приложение на телефоне, введите текущий шестизначный код и затем ваш sudo-пароль.
Запустите также команду google-authenticator для нового пользователя и добавьте его учётную запись в мобильном приложении (укажите имя, например, slaghoople).
С этого момента при локальном входе и выполнении sudo (если PAM настроен) будет требоваться код из мобильного приложения.
Важные дополнительные настройки для удалённого SSH-доступа
Если вы хотите требовать 2FA при входе по SSH, добавьте или проверьте в /etc/ssh/sshd_config следующие опции:
- ChallengeResponseAuthentication yes
- UsePAM yes
При SSH-конфигурации можно также комбинировать методы авторизации:
- AuthenticationMethods publickey,keyboard-interactive
Это заставит сначала пройти проверку по ключу, а затем по двухфакторной форме. После изменения конфигурации перезапустите SSH:
sudo systemctl restart sshПри работе с удалённым сервером: НЕ закрывайте текущую сессию до тех пор, пока не подтвердите, что новые соединения проходят успешно. В противном случае вы можете потерять доступ.
Устранение проблем и план отката
Возможные проблемы:
- Потеря смартфона или приложение удалено: используйте сохранённые scratch-коды для доступа.
- Блокировка входа для всех пользователей: загрузитесь в режим восстановления (single-user mode) или используйте live-образ, смонтируйте диск и удалите/закомментируйте строку pam_google_authenticator.so из /etc/pam.d/common-auth.
- Неверное время на сервере или телефоне: TOTP зависит от синхронизированного времени. Проверьте системное время и синхронизацию NTP.
План отката (короткая инструкция):
- Получить доступ к серверу через физическую консоль или режим восстановления.
- Отключить строку pam_google_authenticator.so в /etc/pam.d/common-auth.
- Перезагрузить систему и войти штатно.
- Повторно настроить 2FA после исправления причины блокировки.
Меры безопасности и жёсткая конфигурация
- Файл ~/.google_authenticator хранит секрет и настройки. Убедитесь, что его права = 600:
chmod 600 ~/.google_authenticator. - Храните scratch-коды в офлайн-хранилище (бумага в сейфе) или в зашифрованном менеджере паролей.
- Включите rate-limiting (ответить Y при настройке), чтобы ограничить перебор кодов.
- Регулярно проверяйте журналы аутентификации (/var/log/auth.log) на предмет подозрительных попыток.
- Используйте аппаратные ключи (U2F/FIDO) для особо критичных серверов.
Альтернативные подходы и когда они подходят
- Аппаратные токены (YubiKey, FIDO2): более устойчивы к фишингу и атакам типа SIM-swap — подходят для высокозащищённых систем.
- Authy и другие приложения: позволяют резервное копирование учётных записей в облаке (удобно, но требует дополнительной защиты аккаунта поставщика резервного копирования).
- SMS 2FA: удобна, но уязвима к SIM-swap и перехвату — не рекомендуется для критичных систем.
Когда 2FA может не помочь
- Если злоумышленник контролирует устройство аутентификации (компрометация телефона), TOTP станет бесполезным.
- Фишинг, где пользователь вводит код в злонамеренную страницу, может позволить атакующему использовать код в реальном времени.
Роли и контрольный список (быстрый чек)
Администратор:
- Установить libpam-google-authenticator на каждом сервере.
- Настроить PAM и протестировать на пилотных учётных записях.
- Обновить политику восстановления и задокументировать процедуру отката.
Обычный пользователь:
- Установить Google Authenticator на смартфон.
- Запустить google-authenticator и отсканировать QR.
- Сохранить scratch-коды в надёжном месте.
DevOps/оператор:
- Проверить SSH-конфигурацию и NTP.
- Перезапустить ssh после изменений, тестируя с новой сессией.
- Мониторить /var/log/auth.log и настраивать оповещения.
Матрица сравнения (коротко)
- Google Authenticator (TOTP): бесплатно, просто, требует смартфона.
- SMS: просто, но менее безопасно (риски SIM-swap).
- U2F/FIDO: самый безопасный вариант для защиты от фишинга, требует аппаратного ключа и поддержки сервиса.
Критерии приёмки
- Все целевые пользователи добавлены в Google Authenticator и успешно проходят проверку при входе.
- При выполнении sudo в системе требуется 2FA-код.
- SSH-подключения сохраняют доступность для администраторов и не вызывают массовых блокировок.
- Документирован и протестирован план восстановления доступа.
Тестовые сценарии и приёмочные тесты
- Локальный вход: пользователь вводит пароль и код — успешный вход.
- sudo: пользователь вводит код после пароля — команда выполняется.
- SSH: новая сессия требует 2FA, при этом существующая сессия остаётся активной.
- Потеря телефона: пользователь использует scratch-код и восстанавливает доступ.
Конфиденциальность и соответствие
Секреты TOTP хранятся локально в файле ~/.google_authenticator и не передаются третьим лицам. При использовании облачных бэкапов (например, у Authy) удостоверьтесь, что выбранный сервис соответствует вашим требованиям по обработке персональных данных и требованиям локального законодательства.
Советы и эвристики
- Всегда сначала тестируйте на непродуктивной машине или в отдельной учётной записи.
- Не отключайте существующие методы доступа до подтверждения работоспособности 2FA.
- Храните один запасной способ восстановления офлайн.
Короткое резюме
Настройка Google Authenticator на Ubuntu — это эффективный и относительно простой способ значительно повысить безопасность системы. Процесс включает установку libpam-google-authenticator, подключение PAM-модуля, генерацию ключей для каждого пользователя и добавление аккаунтов в мобильное приложение. Не забудьте про тестирование, защиту файлов с секретами и план восстановления.
Изображение: пример слабого пароля на ноутбуке
Image credit: designer491 via Shutterstock
Изображение: авторская фотография предоставлена Dave Clark Digital Photo via Shutterstock.com
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone