Подробный гайд: за что отвечает /etc/pam.d/xrdp-sesman

Конфигурация PAM для xrdp-sesman: аутентификация, авторизация и управление сессиями при подключении к Linux через RDP.

2026.05.24                  


Подробный гайд: за что отвечает /etc/pam.d/xrdp-sesmanПодробный гайд: за что отвечает /etc/pam.d/xrdp-sesman Файл /etc/pam.d/xrdp-sesman — это конфигурация PAM (Pluggable Authentication Modules) для демона управления сессиями xrdp-sesman, который входит в состав XRDP (open-source реализация RDP-сервера для Linux). Этот файл определяет, как именно проверяются учётные данные, какие ограничения применяются, как настраивается окружение и регистрируется сессия при подключении через Remote Desktop.

Ниже приведён структурированный разбор от базовых понятий до практических сценариев.


1. Что такое PAM и зачем он нужен в XRDP?

PAM (Pluggable Authentication Modules) — стандартный механизм аутентификации в Linux, позволяющий гибко настраивать проверку логина/пароля, авторизацию, управление сессиями и учётными записями без изменения кода приложений.


xrdp-sesman не работает с паролями напрямую. Вместо этого он делегирует эту задачу PAM, передавая ему имя пользователя и пароль, полученные от клиента RDP.


Файл /etc/pam.d/xrdp-sesman говорит PAM:

  • какие модули использовать,
  • в каком порядке,
  • как реагировать на успех/ошибку,
  • что делать после успешного входа.

2. Основное назначение файла

Фаза PAM За что отвечает в контексте xrdp-sesman
auth Проверка логина и пароля (локальный, LDAP, AD, OTP и т.д.)
account Проверка срока действия учётки, блокировок, времени входа, групп
session Настройка окружения, лимитов, создание домашней директории, аудит
password Смена пароля (обычно не используется в RDP, секция часто пуста)

3. Типичное содержимое (на примере Debian/Ubuntu и RHEL)

Конкретные строки зависят от дистрибутива. Ниже показан усреднённый рабочий вариант.

# Тип         Контроль     Модуль                 Аргументы
auth          required     pam_env.so
auth          required     pam_unix.so
account       required     pam_unix.so
session       required     pam_limits.so
session       required     pam_unix.so
session       optional     pam_systemd.so
session       required     pam_loginuid.so

Разбор ключевых модулей

Модуль Назначение
pam_env.so Загружает переменные окружения из /etc/environment, ~/.pam_environment
pam_unix.so Основная проверка пароля и учётки через /etc/shadow и /etc/passwd
pam_limits.so Применяет лимиты из /etc/security/limits.conf (nofile, nproc, memlock)
pam_loginuid.so Устанавливает audit UID для отслеживания действий в журналах
pam_systemd.so Интеграция с systemd-logind (управление сессиями, cgroups, polkit)
pam_mkhomedir.so (опционально) Автоматически создаёт ~/ при первом входе
pam_access.so (опционально) Фильтрация доступа по IP/группам через /etc/security/access.conf

Контрольные флаги (вторая колонка)

  • required -> ошибка на любом шаге = отказ в доступе (проверка продолжается для логирования)
  • requisite -> ошибка = мгновенный отказ
  • sufficient -> успех = пропуск остальных модулей (если нет prior failures)
  • optional -> выполняется, но не влияет на итог, если только не является единственным

4. Как выглядит процесс аутентификации

  1. Пользователь подключается через RDP-клиент.
  2. xrdp передаёт логин/пароль в xrdp-sesman.
  3. sesman вызывает PAM-стек из /etc/pam.d/xrdp-sesman.
  4. Выполняется фаза auth -> проверка пароля.
  5. Выполняется фаза account -> проверка блокировок, срока действия, доступа.
  6. Выполняется фаза session -> настройка окружения, лимитов, регистрация в systemd.
  7. При успехе sesman запускает выбранную сессию (Xorg, Xvnc, Wayland и т.д.).
  8. При ошибке -> запись в журнал, отказ в подключении.

5. Кастомизация и типовые сценарии

Интеграция с Active Directory / LDAP

auth    sufficient   pam_sss.so
auth    required     pam_unix.so
account sufficient   pam_sss.so
account required     pam_unix.so

Требует настроенного sssd или winbind. pam_sss.so проверяет домен, pam_unix.so -> локальные учётки как fallback.


Ограничение доступа по группам

auth    required     pam_unix.so
account required     pam_listfile.so \
           onerr=fail item=user sense=allow file=/etc/xrdp-allowed-users

Файл /etc/xrdp-allowed-users:

admin1
admin2
@rdp-users

Двухфакторная аутентификация (TOTP)

auth    required     pam_unix.so
auth    required     pam_google_authenticator.so

Требует предварительной инициализации google-authenticator для каждого пользователя.


Авто создание домашней директории

session optional     pam_mkhomedir.so skel=/etc/skel umask=0077

6. Безопасность и риски

Риск Как избежать
Случайное удаление pam_unix.so Оставьте бэкап, используйте pam-auth-update (Debian/Ubuntu)
Открытый доступ из интернета Комбинируйте с pam_access.so, faillock, pam_tally2 или ufw/firewalld
Утечка паролей через логи Убедитесь, что pam_unix.so не логирует пароли (по умолчанию не логирует)
Блокировка сессий при pam_limits.so Проверьте limits.conf на maxlogins, nproc
Конфликт с SELinux/AppArmor Добавьте session required pam_selinux.so и проверьте контексты

Важно:

Ошибка в PAM-конфиге может полностью заблокировать удалённый доступ. Всегда имейте консольный/SSH доступ для отката.


7. Диагностика проблем

Где смотреть логи?

# Debian/Ubuntu
journalctl -u xrdp-sesman -f
grep xrdp /var/log/auth.log

# RHEL/CentOS/Alma/Rocky
journalctl -u xrdp-sesman -f
grep xrdp /var/log/secure

Типичные ошибки и решения

Симптом Возможная причина Действие
Authentication failure Неверный пароль, отключён pam_unix Проверьте /etc/shadow, тест: su - пользователь
Account locked faillock, pam_tally2 или AD faillock --user имя --reset или разблокируйте в AD
Session open failed pam_limits.so блокирует по nproc Увеличьте лимиты в /etc/security/limits.conf
Нет переменных окружения pam_env.so не загружает .pam_env Проверьте права и синтаксис файла
Сессия падает сразу после входа pam_systemd.so конфликтует с Xorg Временно закомментируйте, проверьте logind.conf

Тестирование PAM без перезапуска XRDP

# Проверка синтаксиса (не все дистрибутивы поддерживают)
pamtester xrdp-sesman username authenticate

# Или через strace для отладки
strace -e trace=read,write -f -p $(pgrep xrdp-sesman) 2>&1 | grep -i pam

8. Как безопасно редактировать файл

1. Сделайте бэкап:
   sudo cp /etc/pam.d/xrdp-sesman /etc/pam.d/xrdp-sesman.bak.$(date +%F)
  1. Изменяйте по одному модулю за раз.
  2. Тестируйте в изолированной среде или с активным SSH-доступом.
4. Перезапускайте сервисы:
   sudo systemctl restart xrdp-sesman xrdp
5. Для Debian/Ubuntu предпочтительно использовать:
   sudo pam-auth-update

Он автоматически управляет общими PAM-профилями и снижает риск ошибок.


9. Резюме

Аспект Кратко
Функция Управление аутентификацией, авторизацией и настройкой сессий XRDP
Ключевые модули pam_unix.so, pam_env.so, pam_limits.so, pam_loginuid.so
Безопасность Ошибки в файле -> блокировка RDP. Всегда имейте fallback-доступ
Кастомизация Поддержка LDAP/AD, 2FA, лимитов, авто-создания ~/, фильтрации по IP
Диагностика journalctl, /var/log/auth.log или secure, pamtester, strace

Файл /etc/pam.d/xrdp-sesman — это «мозг» аутентификации XRDP. Понимание его структуры позволяет безопасно интегрировать сервер с корпоративной инфраструктурой, повышать безопасность и решать проблемы с входом без угадывания.


Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.