Защита X2Go на Ubuntu 12.04 (Precise) с двухфакторной аутентификацией WiKID

Важно: этот гайд ориентирован на Ubuntu 12.04 (Precise). Подходы к PAM и пакетам могут отличаться в других дистрибутивах и версиях.
Зачем это нужно
Двухфакторная аутентификация (2FA) снижает риск компрометации удалённого рабочего стола: помимо знания пароля, требуется физическое устройство или токен. В этой связке WiKID выполняет генерацию и валидацию одноразовых паролей, а X2Go обеспечивает удалённый рабочий стол поверх SSH.
Ключевые термины в одну строку:
- WiKID — сервер двухфакторной аутентификации.
- X2Go — удалённый рабочий стол на базе NX/SSH.
- PAM — модульная система аутентификации Linux.
- RADIUS — протокол удалённой аутентификации, используемый между PAM и WiKID.
Предварительные условия
- Рабочий сервер с установленным WiKID Strong Authentication и веб-интерфейсом.
- Целевой Ubuntu 12.04 сервер с root-доступом или sudo.
- Сетевая связность между Ubuntu-сервером и WiKID (порт RADIUS, обычно UDP 1812).
- У пользователей локальные учётные записи на Ubuntu или централизованная авторизация (LDAP/AD), настроенная отдельно.
Добавление домена на WiKID
- Зайдите в веб-интерфейс WiKID под администратором.
- Создайте новый домен (domain) — это логическая область для ваших токенов и настроек.
- Укажите читаемое имя и при необходимости описательные параметры домена.
Примечание: названия доменов служат для разделения пользователей и политик.
Создание сетевого клиента (Network Client)
- Перейдите на вкладку Network Client.
- Нажмите Create New Network Client.
- Введите имя клиента (например, x2go-precise) и IP-адрес вашего X2Go-сервера в внутренней сети.
- В поле Protocol выберите RADIUS.
- В поле Domain выберите ранее созданный домен.
- Подтвердите добавление.
После добавления вы увидите экран ввода общего секрета.
- Введите Shared Secret — общий секрет, который будет использоваться в конфигурации pam_radius на Ubuntu. Запишите этот секрет надёжно.
Важно: общий секрет должен быть сложным и храниться в безопасном месте. Он используется для защиты RADIUS-запросов между сервером и клиентом.
Установка и настройка X2Go на Ubuntu
Установка X2Go и необходимых компонентов довольно простая. На целевом сервере выполните:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:x2go/stable
sudo apt-get update
sudo apt-get install x2goserver x2goserver-xsession x2gobroker x2gobroker-daemon x2gobroker-authservice
Если на сервере ещё нет графической оболочки, установите подходящую среду рабочего стола:
sudo apt-get install ubuntu-desktop gnome
Или установите любую другую лёгкую среду (XFCE, MATE, LXDE) в зависимости от ресурсов.
Тестирование клиента X2Go на рабочей станции пользователя:
sudo apt-get install x2goclient
На клиенте создайте новую сессию, укажите IP адрес X2Go-сервера и тип рабочего стола. Попробуйте подключиться с обычным логином и паролем (без 2FA) чтобы убедиться, что X2Go и SSH работают.
Настройка PAM на X2Go-сервере через pam_radius
Установите пакет libpam-radius-auth:
sudo apt-get install libpam-radius-auth
Затем укажите, с каким RADIUS-сервером общаться:
sudo vim /etc/pam_radius_auth.conf
# Пример строки: other-server; other-secret 3
Отредактируйте строку other-server; other-secret 3, заменив other-server на IP-адрес или hostname вашего WiKID-сервера и other-secret на общий секрет (Shared Secret), который вы задали при создании Network Client.
Важно: файл может содержать комментарий о копировании в /etc/raddb/server — НЕ перемещайте файл, просто редактируйте /etc/pam_radius_auth.conf.
Далее добавим модуль в конфигурацию PAM для sshd. Откройте:
sudo vim /etc/pam.d/sshd
Добавьте строку (порядок важен):
auth sufficient pam_radius_auth.so
Эту строку поместите непосредственно перед блоком стандартной аутентификации:
# Standard Un*x authentication.
@include common-auth
Пояснение: опция sufficient означает, что если RADIUS-аутентификация успешна, дальнейшая проверка не требуется. Если RADIUS не удался, PAM продолжит к common-auth (обычно локальные пароли).
Тестирование 2FA
- Запустите аудит логов на сервере, чтобы видеть сообщения PAM и RADIUS:
tail -f /var/log/auth.log
- На клиенте WiKID запустите приложение/токен, выберите ваш домен и сгенерируйте OTP, введя PIN и получив одноразовый пароль.
- Попробуйте подключиться через X2Go/SSH, используя username и в поле пароля — комбинацию PIN+OTP или в зависимости от политики WiKID: либо PIN+OTP, либо только OTP. (Проверяйте конфигурацию вашей политики в WiKID.)
- Убедитесь, что логин успешен и в auth.log видны подтверждающие строки.
Примечание: имя пользователя в Ubuntu должно совпадать с именем в WiKID, если у вас нет отдельной маппинг-логики.
Когда этот подход не подходит (контрпример)
- Если у вас требование единой авторизации (SSO) через SAML/OAuth — WiKID+RADIUS не даст SSO из коробки.
- Если у вас изолированная сеть без доступа к WiKID — нужны оффлайн-решения.
- Если пользователи не имеют локальных учётных записей и нет LDAP/AD-интеграции — потребуется отдельно настроить учётные записи (pam_ldap, winbind и т.д.).
Альтернативные подходы
- Использовать PAM-модули от других провайдеров 2FA (Duo, Google Authenticator, FreeRADIUS + токены).
- Внедрить SSH-ключи на основе аппаратных токенов (YubiKey) для possession-фактора вместе с паролем.
- Настроить RADIUS-прокси: PAM -> локальный RADIUS -> WiKID, если нужно централизовать авторизацию.
Чек-листы по ролям
Администратор WiKID:
- Создать домен.
- Добавить Network Client с правильным IP.
- Сгенерировать и передать Shared Secret.
- Зарегистрировать токены пользователей.
Системный администратор Ubuntu/X2Go:
- Установить X2Go server и нужный desktop.
- Установить libpam-radius-auth.
- Настроить /etc/pam_radius_auth.conf с IP и секретом.
- Добавить pam_radius в /etc/pam.d/sshd.
- Тестировать через tail -f /var/log/auth.log.
Операционные тесты и откат:
- Тестировать на тестовой машине перед продакшеном.
- Иметь запасного пользователя с доступом по локальному паролю (чтобы не потерять доступ при ошибке).
- Документировать Shared Secret и хранить в менеджере секретов.
Быстрый план действий (mini-методология)
- Установить и проверить X2Go (локальный пароль). 2. Создать домен в WiKID. 3. Добавить Network Client и получить Shared Secret. 4. Установить libpam-radius-auth на Ubuntu. 5. Настроить pam_radius с IP и секретом. 6. Добавить pam_radius в /etc/pam.d/sshd. 7. Протестировать и отладить через логи.
Диагностика и распространённые ошибки
- Проблема: «Не проходит RADIUS-запрос» — проверьте сетевой доступ по UDP 1812, верный Shared Secret и совпадение имён/портов.
- Проблема: «Пользователь не найден» — убедитесь, что имя пользователя совпадает на Ubuntu и в WiKID или настройте LDAP/AD.
- Проблема: «SSH блокируется» — всегда имейте альтернативный доступ (консоль, KVM) перед изменением PAM.
Пример сценариев тестирования (acceptance)
- Успешная аутентификация: пользователь вводит корректный PIN+OTP и авторизуется в X2Go.
- Отказ при неверном OTP: попытка с неверным кодом блокируется, запись в auth.log отмечает отказ.
- Быстрая деактивация: администратор WiKID деактивирует токен — пользователь не проходит аутентификацию.
Решение для ролей безопасности и соответствия
- Отключение пользователя происходит на уровне WiKID — мгновенно блокирует доступ. Это упрощает управление при увольнениях.
- Если требуется аудит, включите логирование RADIUS-запросов и централизованный сбор в SIEM.
Диаграмма принятия решения (Mermaid)
flowchart TD
A[Пользователь пытается войти] --> B{Есть локальная учётная запись?}
B -- Нет --> C[Авторизация через LDAP/AD]
B -- Да --> D[Запрос PAM -> pam_radius]
D --> E{RADIUS отвечает OK?}
E -- Да --> F[Доступ разрешён в X2Go]
E -- Нет --> G[Проблема аутентификации: отказ]
G --> H[Оповещение администратора]
Итог и рекомендации
- Настройка WiKID + pam_radius для X2Go даёт надёжную двухфакторную защиту удалённых сессий.
- Всегда тестируйте изменения PAM на тестовом сервере и имейте резервный доступ.
- Для крупной инфраструктуры рассмотрите проксирование RADIUS через централизованный RADIUS-сервер, который будет проверять права в LDAP/AD и делегировать проверку токенов WiKID.
Важно: не меняйте PAM без плана отката и доступа к консоли хоста.
Критерии приёмки
- Пользователь подключается к X2Go и проходит аутентификацию только с корректным OTP.
- Логи показывают успешную RADIUS-авторизацию.
- Отключение токена в WiKID мгновенно препятствует доступу.
Сводка
- Создайте домен и Network Client в WiKID, получите Shared Secret.
- Установите X2Go и libpam-radius-auth на Ubuntu.
- Настройте /etc/pam_radius_auth.conf и добавьте pam_radius в /etc/pam.d/sshd.
- Тестируйте через auth.log и обеспечьте план отката при проблемах.
Notes: Если ваша инфраструктура использует другую версию Ubuntu или другой дистрибутив, проверьте соответствие пакетов и репозиториев. При использовании производственных систем рекомендуется внедрять изменения поэтапно и иметь документированные процедуры отката.
Похожие материалы

MetaMask Learn: быстрое введение в Web3

Сменить язык Cortana в Windows 10 Technical Preview
Обновление Ubuntu 12.04 до 14.04 LTS

Ошибка 0xc000001d в Windows — как исправить

Очистка и настройка Recent Places в macOS
