Как защитить рабочий стол Ubuntu 10.10 с помощью LinOTP 2
LinOTP 2 позволяет добавить двухфакторную аутентификацию через одноразовые пароли (OTP) для входа в рабочий стол на Ubuntu 10.10 / Debian Squeeze. В статье показана установка из репозитория, настройка UserIdResolver, регистрация токена mOTP и интеграция с PAM. Приведены рекомендации по отладке, чеклисты для администратора и шаги восстановления при ошибках.
Введение
Эта инструкция проведёт вас по установке LinOTP как автономного бэкенда одноразовых паролей (OTP) на Linux‑машине. LinOTP обеспечивает модульную поддержку многих типов токенов и позволяет добавить второй фактор при входе в систему. Описанные шаги рассчитаны на Ubuntu 10.10 и Debian Squeeze; однако подойдут и для близких по конфигурации дистрибутивов с адаптацией путей и пакетов.
Краткое определение: LinOTP — серверная часть для управления одноразовыми паролями (OTP). Она хранит токены, валидирует OTP и предоставляет API для работы через веб-интерфейс или CLI.
Важно: Ubuntu 10.10 и Debian Squeeze могут быть устаревшими/неподдерживаемыми; при работе в продакшене рассмотрите обновление ОС или изоляцию серверов управления аутентификацией.
Основные цели статьи
- Быстро развернуть LinOTP 2 на локальной машине
- Настроить источники пользователей (UserIdResolver)
- Зарегистрировать мобильный mOTP‑токен и проверить генерацию OTP
- Интегрировать LinOTP с PAM для входа в GNOME
- Дать советы по отладке, безопасности и восстановлению
Требования
- Система: Ubuntu 10.10 или Debian Squeeze (или аналогичная)
- Доступ root или sudo
- Установленный Apache2 (LinOTP предлагает интеграцию с Apache)
- Рабочая установка MySQL/MariaDB (LinOTP предложит создать базу) или возможность создания БД
- Клиентский телефон с поддержкой mOTP (например, motp)
Настройка онлайн‑репозитория LinOTP
Сначала добавим GPG‑ключ, который подписывал пакеты, затем сам репозиторий. В этом HOWTO используется установка через репозиторий apt.
Скачайте ключ и добавьте его в систему:
wget http://linotp.org/apt/LSE\ LinOTP2\ Packaging\ [email protected]\ \(0xF86258E5\)\ pub.as
sudo apt-key add http://linotp.org/apt/LSE\ LinOTP2\ Packaging\ [email protected]\ \(0xF86258E5\)\ pub.ascДобавьте репозиторий в систему:
sudo add-apt-repository "deb http://linotp.org/apt/ubuntu lucid linotp2ce"Примечание: если add-apt-repository отсутствует, можно добавить строчку вручную в /etc/apt/sources.list.d/linotp.list.
Установка пакетов LinOTP
Обновите кеш пакетов и установите сервер, клиент управления и PAM‑модуль:
sudo apt-get update
sudo apt-get install linotp linotpuseridresolver libpam-linotp linotpadminclientceВо время установки пакет запросит параметры конфигурации. Ответьте на вопросы, как показано ниже (или выберите аналогичные значения для вашей среды):
- Запускать LinOTP 2 через Apache2? — Yes
- Пароль администратора LinOTP — придумайте сложный пароль
- Создать самоподписанный сертификат? — Yes (для тестовой среды)
- Какую СУБД использовать для базы токенов? — Mysql
- Хост базы данных — localhost
- Имя базы данных — LinOTP2
- Пользователь базы данных — linotp2
- Пароль пользователя базы данных — придумайте
- Введите пароль root для MySQL, чтобы создать базу и таблицы
- Создать таблицы? — yes
Во время установки будет создан файл ключа шифрования: /etc/linotp2/encKey. Сохраните резервную копию этого файла, он необходим для восстановления токенов.
Важно: права доступа. Если после установки появляется “internal server error”, проверьте /var/log/apache2/error.log и права на /var/log/linotp и /etc/linotp2. Директория /etc/linotp2 должна принадлежать пользователю linotp.
Пример исправления прав:
sudo chown -R linotp:linotp /etc/linotp2
sudo chown -R linotp:linotp /var/log/linotpУправление LinOTP: веб-интерфейс и CLI
После установки доступны два способа управления:
- Веб‑интерфейс: https://localhost/manage
- CLI: linotpadm.py (или linotpadminclientce)
Если в вебе появляется ошибка, см. логи Apache и LinOTP.
Конфигурация UserIdResolver (источник пользователей)
LinOTP читает пользователей через UserIdResolver. В AGPLv3‑сборке доступен PasswdUserIdResolver для чтения пользователей из файлов в формате /etc/passwd.
Вы можете использовать файл /etc/passwd или собственный файл в том же формате. В Enterprise‑издании доступны резолверы для LDAP и SQL.
Пример настройки резолвера через CLI:
linotpadm.py --url=https://localhost --admin=admin --command=setresolver --resolver=defaultPW --rtype=FILE --rf_file=/etc/passwdОжидаемый отклик в JSON:
{ u'status': True,....}Добавьте резолвер в realm по умолчанию и установите его как default:
linotpadm.py --url=https://localhost --admin=admin --command=setrealm --realm=defrealm --resolver=useridresolver.PasswdIdResolver.IdResolver.defaultPW
linotpadm.py --url=https://localhost --admin=admin --command=setdefaultrealm --realm=defrealmПроверьте список пользователей:
linotpadm.py --url=https://localhost --admin=admin --command=listuserВы должны увидеть пользователей из /etc/passwd.
Регистрация OTP‑токена (пример mOTP)
В качестве примера мы зарегистрируем mOTP‑токен для мобильного телефона. Можно также использовать OATH‑токены или Google Authenticator‑совместимые приложения.
Скачайте приложение motp: http://motp.sourceforge.net и установите на телефон. Инициализируйте токен, введя PIN 0000 при первом запуске — на экране отобразится init‑secret.
Зарегистрируйте токен в LinOTP через CLI (пример для пользователя cornelius):
linotpadm.py --url=https://localhost --admin=admin --command=inittoken --user=cornelius --type=motp --otpkey=860e2e9bf9d50665 --serial=1 --otppin=1234Пояснение параметров:
- otpkey — init‑secret, который показал телефон
- serial — заданный вами серийный номер токена
- otppin — PIN, который вводится на телефоне перед генерацией OTP
Опционально можно установить строгий PIN для токена:
linotpadm.py --url=https://localhost --admin=admin --command=set --pin=Password --serial=1После регистрации проверьте портал аутентификации:
https://localhost/auth/indexДля входа используйте имя пользователя и в качестве пароля — сочетание вашего PIN и сгенерированного OTP (в зависимости от конфигурации: PIN может быть в начале или конце). Если аутентификация не проходит, проверьте правильность init‑secret и синхронизацию времени на телефоне.
Интеграция с PAM для входа в GNOME
LinOTP устанавливает модуль /lib/security/pam_linotp.so. Создадим отдельный PAM‑файл и подключим его в нужных службах.
Скопируйте стандартный common‑auth и создайте common‑linotp:
cp /etc/pam.d/common-auth /etc/pam.d/common-linotpВ /etc/pam.d/common-linotp замените строку:
auth [success=1 default=ignore] pam_unix.so nullok_secureна
auth [success=1 default=ignore] pam_linotp.so debug nosslhostnameverify nosslcertverify url=https://localhost/validate/simplecheck realm=defrealm resConf=defaultPWВажно: опция debug выводит подробную информацию, включая пароли, в системные логи. Используйте её только для отладки.
Подключите common-linotp вместо common-auth в нужном PAM‑файле, например для gdm:
@include common-linotpЕсли хотите, чтобы разблокировка экрана также требовала OTP, измените /etc/pam.d/gnome-screensaver аналогично.
После этого при входе вас будут спрашивать не обычный «Password», а «Your OTP» или соответствующий локализованный текст в дисплей‑менеджере.
Если вход не проходит, проверьте /var/log/auth.log и логи LinOTP.
Отладка и частые ошибки
- “Internal server error” в вебе — смотрите /var/log/apache2/error.log. Частая причина — неверные права на /etc/linotp2 или /var/log/linotp.
- Ошибки при обращении к базе — убедитесь, что MySQL работает и пароль root введён верно во время установки.
- Неправильный OTP — проверьте init‑secret и время на телефоне (mOTP чувствителен к времени).
- PAM не срабатывает — проверьте порядок модулей в /etc/pam.d/* и права на библиотеку pam_linotp.so.
Полезные команды для диагностики:
sudo tail -f /var/log/apache2/error.log /var/log/auth.log /var/log/linotp/linotp.log
sudo ps aux | grep linotp
mysql -u root -p -e "SHOW DATABASES;"Альтернативные подходы и интеграции
Если LinOTP не подходит или вы хотите другую архитектуру, рассмотрите:
- Google Authenticator PAM (простая OATH‑TOTP интеграция)
- FreeRADIUS + YubiKey/OTP (для сетевой аутентификации и 802.1X)
- LDAP/Active Directory + LinOTP Enterprise resolver (для централизованного управления пользователями)
- Аппаратные токены (YubiKey) для более высокого уровня защиты
Выбор зависит от требуемого уровня безопасности, масштаба и наличия аппаратных токенов.
Когда LinOTP может не подойти
- Если вам нужны аппаратные смарт‑карты с PKI вместо OTP
- В средах с высокой регуляторной нагрузкой, где требуется HSM для хранения ключей
- Если ОС устарела и нельзя обеспечить безопасность транспортного канала (TLS)
Ментальные модели и рекомендации
- Разделение ролей: управление токенами отделено от аутентификации — резервируйте и ограничивайте доступ к LinOTP‑админке.
- Минимальный привилегированный доступ: сервисы должны иметь минимальные права к БД и файловой системе.
- Fail‑open vs fail‑closed: решите политику при недоступности LinOTP — блокировать входы или временно откатиться на локальные пароли.
Факты для планирования (без привязки к числам версий)
- Требуется отдельная база данных для токенов и пользователей (можно локальная MySQL).
- Необходимо хранить файл encKey и резервную копию для восстановления токенов.
- Логи аутентификации содержат чувствительные данные при включённом debug — отключайте в продакшне.
Чеклист для администратора перед вводом в эксплуатацию
- Сделать резервную копию /etc/linotp2/encKey
- Проверить владельца и права /etc/linotp2 и /var/log/linotp
- Убедиться, что Apache использует корректный сертификат TLS
- Создать отдельного пользователя БД с ограниченными правами
- Отключить debug в pam_linotp после отладки
- Протестировать вход для 3–5 пользователей с разными токенами
Критерии приёмки
- LinOTP отвечает на запросы в /manage без 500 ошибок
- CLI команды (listuser, inittoken) возвращают успешный статус
- Аутентификация через PAM проходит для тестовых пользователей
- Резервная копия /etc/linotp2/encKey хранится в надёжном месте
Плейбук восстановления при инциденте
- Если LinOTP не отвечает:
- Проверить статусы Apache и LinOTP‑сервиса
- Просмотреть /var/log/apache2/error.log и /var/log/linotp/linotp.log
- Если база повреждена:
- Остановить LinOTP
- Восстановить базу из резервной копии
- При необходимости восстановить /etc/linotp2/encKey
- Если encKey утерян:
- Токены восстановить нельзя без ключа; восстановите из резервной копии или реинициализируйте токены у пользователей
Тестовые сценарии и критерии приёмки
- Создать тестового пользователя, инициализировать токен, пройти вход — успех
- Включить debug, убедиться, что в логах появляется информация, затем выключить
- Изменить права /etc/linotp2 на неправильные и убедиться, что сервис выдаёт ошибку, затем восстановить права и проверить восстановление
Краткий глоссарий
- OTP — одноразовый пароль
- mOTP — мобильная реализация OTP, зависящая от времени
- Realm — область/контекст пользователей в LinOTP
- UserIdResolver — модуль, читающий список пользователей
Безопасность и советы по жёсткой защите
- Используйте валидный TLS‑сертификат вместо самоподписанного в продакшене
- Ограничьте доступ к веб‑интерфейсу LinOTP по IP или VPN
- Храните резервные копии encKey в сейфе/на удалённом носителе
- Минимизируйте привилегии БД и сейфите учётные данные
Приватность и соответствие требованиям
LinOTP обрабатывает идентификаторы пользователей и токены. Не храните лишние персональные данные рядом с токенами. При необходимости, ограничьте журналирование и настройте политику хранения логов в соответствии с локальными требованиями по защите данных.
Итог
LinOTP 2 даёт гибкий и расширяемый способ добавить двухфакторную аутентификацию на рабочий стол Linux. Следуя шагам этой инструкции, вы сможете установить сервер, зарегистрировать mOTP‑токены и интегрировать проверку OTP в PAM для GNOME. Обязательно настройте права, TLS и резервные копии перед вводом в эксплуатацию.
Важно: перед развёртыванием в продакшене протестируйте все сценарии отказа и план восстановления.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента