Вход в Linux с помощью Google Authenticator

Быстрые ссылки
- Установить PAM для Google Authenticator
- Создать ключи аутентификации для каждого пользователя
- Активировать двухфакторную аутентификацию
- Включить Google Authenticator для графического входа в Ubuntu
- Если используется шифрование домашней папки
- Помощь, если вход перестал работать
Почему это полезно
Двухфакторная аутентификация повышает безопасность: помимо пароля система требует одноразовый код, генерируемый на вашем смартфоне. Решение основано на стандартном протоколе TOTP, поэтому работает не только с официальным приложением Google Authenticator, но и с Authy, FreeOTP и другими совместимыми клиентами. Оно не зависит от постоянного подключения к Интернету: коды генерируются локально.
Важно: описанные примеры выполнены на Ubuntu 14.04 с Unity и LightDM, но общие принципы применимы к большинству дистрибутивов и менеджеров сеанса, использующих PAM.
Краткое определение
TOTP — алгоритм генерации одноразовых временных паролей. PAM — модульная система аутентификации в Linux, позволяющая добавлять разные способы входа.
1. Установить Google Authenticator PAM
В большинстве дистрибутивов пакет называется libpam-google-authenticator или аналогично. На Ubuntu команда для установки выглядит так. Откройте терминал, выполните и введите пароль пользователя:
sudo apt-get install libpam-google-authenticator

Если пакет недоступен в репозиториях, проверьте исходники на GitHub и при необходимости соберите модуль вручную. В большинстве случаев репозиторий вашей системы уже содержит этот пакет.
Примечание: модуль реализует стандарт TOTP и не “звонит домой” к Google: секреты генерируются и хранятся локально.
2. Создать ключи аутентификации для каждого пользователя
Для каждого аккаунта, которому вы хотите включить двухфакторную аутентификацию, выполните команду google-authenticator в контексте этого пользователя. Например, войдите под нужным пользователем, откройте терминал и выполните:
google-authenticator
Интерактивный мастер предложит сгенерировать секрет, QR-код и набор запасных (emergency) кодов. Рекомендуемые действия:
- Сканируйте QR-код приложением на телефоне или введите секрет вручную.
- Запишите и сохраните emergency-коды в безопасном месте (бумажно или в менеджере паролей). Они помогут, если вы потеряете телефон.
- По умолчанию мастер добавляет запись в домашний каталог пользователя (обычно ~/.google_authenticator).

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

Совет: если у вас несколько устройств или вы хотите иметь резервную копию, безопасно скопируйте секрет в офлайн-менеджер паролей или распечатайте QR-код. Не храните секрет в открытом виде в общедоступных местах.
3. Активировать двухфакторную аутентификацию в PAM
Перед внесением изменений убедитесь, что у вас есть способ откатиться: вы сможете переключиться на виртуальную консоль (Ctrl+Alt+F2) и отредактировать конфигурацию PAM, если что-то пойдёт не так.
Поскольку мы хотим включить второй фактор только для графического входа, будем редактировать файл PAM для дисплейного менеджера (например, LightDM в Ubuntu). Это даёт “аварийный выход” — при проблемах можно войти через виртуальную консоль и отменить изменения.
LightDM (Ubuntu)
Откройте файл /etc/pam.d/lightdm в текстовом редакторе с правами root:
sudo gedit /etc/pam.d/lightdm

Добавьте в конец файла строку:
auth required pam_google_authenticator.so nullok
Описание параметров:
- auth required pam_google_authenticator.so — требовать модуль при аутентификации.
- nullok — разрешать вход пользователю, который ещё не выполнил google-authenticator (т.е. не настроил TOTP). Если удалить nullok, пользователи без файла ~/.google_authenticator не смогут войти графически.

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

Другие дисплейные менеджеры
Если вы используете GDM, SDDM, LightDM-подобные другие менеджеры или просто вход в консоли, нужно редактировать соответствующий PAM-файл, например /etc/pam.d/gdm-password или /etc/pam.d/login. Общая строка для вставки останется похожей, но место вставки может отличаться.
Важно: не добавляйте модуль в системные PAM-конфигурации, не понимая последствий. Ошибка в /etc/pam.d/common-auth или других критических файлах может заблокировать доступ в систему.
4. Если вы используете шифрование домашней папки
Старые версии Ubuntu использовали ecryptfs для шифрования домашней папки, когда каталог пользователя остается зашифрованным до ввода пароля. В этом случае файл ~/.google_authenticator недоступен модулю PAM до расшифровки домашней папки, и вход не сможет пройти проверку второго фактора.
Рекомендации:
- Предпочтительнее использовать полное шифрование диска (LUKS) — оно работает совместно с описанным решением.
- Если вы всё ещё используете ecryptfs, изучите README модуля и документацию ecryptfs для способов размещения конфигурации PAM в незашифрованном месте (например, в /etc или в отдельном незашифрованном каталоге). Это требует аккуратной настройки и понимания рисков хранения секретов в незашифрованной области.
5. Помощь, если что-то сломалось
Если после редактирования вы не можете войти графически, используйте виртуальную консоль (Ctrl+Alt+F2) и войдите по имени пользователя и паролю. Затем откройте и отредактируйте файл PAM, например:
sudo nano /etc/pam.d/lightdm
Удалите добавленную строку или восстановите резервную копию и сохраните файл. Затем вернитесь в графическую среду (Ctrl+Alt+F7 или Ctrl+Alt+F1 в зависимости от дистрибутива) и попробуйте войти снова.

Если вы не можете войти в консоль, загрузитесь в режим восстановления (recovery) или используйте live-USB для монтирования корневой файловой системы и редактирования PAM-файлов.
Ниже приведены дополнительные рекомендации, сценарии и чек-листы по расширенному использованию и отладке.
Когда это решение не подходит
- Когда все пользователи пользуются зашифрованными домашними папками, и вы не хотите перестраивать хранение секретов.
- В средах, где доступ к устройствам генерирующим TOTP строго контролируется организационными политиками и требуется централизованное управление ключами.
- Если на компьютере нет возможности установить PAM-модуль (специфические или сильно урезанные системы).
В этих случаях рассмотрите альтернативы (см. раздел «Альтернативные подходы»).
Альтернативные подходы
- Аппаратные ключи (U2F/FIDO2). Сильнее защищают от фишинга и могут быть интегрированы с PAM-плагинами для FIDO.
- Централизованные решения 2FA (например, RADIUS/LDAP с поддержкой TOTP). Удобно для корпоративной среды, где нужно управлять пользователями централизованно.
- Использование SSH-ключей вместо паролей для удалённого доступа с обязательной двухфакторной проверкой при подключении к удалённым хостам.
Мини-методология: пошаговый план внедрения в организации
- Оцените текущую PAM-конфигурацию и наличие шифрования домашних каталогов.
- Тестируйте установку на одной тестовой машине и одном тестовом аккаунте.
- Документируйте процесс восстановления доступа (виртуальная консоль, recovery, live-USB).
- Обучите пользователей генерации QR и хранению emergency-кодов.
- Разверните по группам, начиная с невысокого приоритета пользователей.
- Внедрите мониторинг и обратную связь, поправьте сценарии входа.
Роль‑ориентированные чек-листы
Администратор:
- Проверить наличие пакета libpam-google-authenticator в репозитории.
- Сделать резервные копии /etc/pam.d/*.
- Настроить и протестировать на тестовом аккаунте.
Пользователь:
- Запустить google-authenticator и сканировать QR.
- Сохранить emergency-коды в защищённом месте.
- Проверить вход в систему и корректность кода из приложения.
Офис поддержки:
- Иметь инструкции по входу в виртуальную консоль и откату PAM.
- Процедура верификации личности для выдачи emergency-кодов или восстановления доступа.
Инцидентный плейбук: восстановление доступа
- Пользователь сообщает, что потерял устройство TOTP.
- Поддержка верифицирует личность по внутренней процедуре.
- Если пользователь имеет emergency-код — подсказать, как войти и сбросить TOTP (удалить ~/.google_authenticator и запустить google-authenticator заново).
- Если нет emergency-кодов, администратор временно удаляет строку pam_google_authenticator из PAM для соответствующего менеджера сеанса, чтобы позволить доступ, затем помогает пользователю настроить новый TOTP.
- После восстановления восстановить строку проверки в PAM и зафиксировать изменения в журнале.
Критерии приёмки
- При входе графически пользователь с настроенным TOTP запрашивается пароль, затем текущий код TOTP.
- Пользователь без настроенного TOTP (при включённом nullok) может войти только с паролем.
- Виртуальная консоль позволяет откатить изменения при проблемах.
Безопасность и жёсткая настройка
Рекомендации для повышения безопасности при использовании TOTP:
- Уберите nullok, когда все пользователи настроили TOTP.
- Ограничьте права доступа к файлу ~/.google_authenticator (должен быть читаем только владельцем).
- Храните emergency-коды в зашифрованном менеджере паролей или в физическом сейфе.
- Рассмотрите добавление блокировок по числу попыток (pam_tally2/pam_faillock) для предотвращения перебора кодов и паролей.
- Для корпоративных сред используйте централизованные решения управления ключами.
Совместимость и миграция
- На системах, где PAM-пакет называется иначе, найдите соответствующий пакет в репозиториях.
- Для GDM используйте /etc/pam.d/gdm-password; для SDDM — /etc/pam.d/sddm; для login консоли — /etc/pam.d/login.
- Всегда тестируйте на отдельной учётной записи перед массовым развёртыванием.
Примеры команд и конфигураций
Установка на Debian/Ubuntu:
sudo apt-get update sudo apt-get install libpam-google-authenticator
Запуск мастера (выполнить под пользователем):
google-authenticator
Добавление в LightDM (как root):
sudo nano /etc/pam.d/lightdm
Вставить в конец:
auth required pam_google_authenticator.so nullok
Частые ошибки и как их исправить
Проблема: после добавления модуля никто не может войти графически. Решение: переключитесь на виртуальную консоль (Ctrl+Alt+F2), удалите добавленную строку в /etc/pam.d/* и перезагрузите менеджер сеанса.
Проблема: PAM не может найти ~/.google_authenticator из-за шифрования домашней папки. Решение: переместите конфигурацию в незашифрованное место и настройте соответствующие права доступа, либо используйте полное шифрование диска.
Проблема: часы на телефоне и сервере рассинхронизированы, коды не принимаются. Решение: синхронизируйте время на сервере (например, systemd-timesyncd или ntp) и проверьте время на смартфоне. TOTP чувствителен к времени.
1‑строчное глоссарное пояснение
- TOTP: временной одноразовый пароль, зависящий от секретного ключа и времени.
- PAM: модульная система аутентификации в Unix/Linux.
Заключение
Включение Google Authenticator через PAM повышает безопасность локального и удалённого доступа. Для безопасного внедрения: тестируйте на отдельных аккаунтах, обеспечьте путь отката и обучите пользователей сохранению emergency-кодов. Для корпоративных сред рассмотрите централизованные и аппаратные решения, если требуется масштабируемое управление.
Полезные ссылки
- Репозиторий libpam-google-authenticator на GitHub (поискать по названию пакета для вашей системы)
- Документация PAM и README модуля для подробных опций
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента