Подробный гайд: настройка xrdp в ALT Linux (проблемы с авторизацией)

Подробное руководство по настройке xrdp в ALT Linux. Решение проблем с авторизацией, настройка PAM, startwm.sh, systemd-logind и polkit.

2026.05.05                  


Подробный гайд: настройка xrdp в ALT Linux (проблемы с авторизацией)Подробный гайд: настройка xrdp в ALT Linux (проблемы с авторизацией) Проблемы с авторизацией в xrdp на ALT Linux чаще всего связаны с тремя факторами: PAM-конфигурация, конфликт с systemd-logind (активная локальная сессия) и некорректный запуск рабочего стола (startwm.sh).

Все команды выполняются от root или через sudo. Гайд актуален для ALT Linux p9/p10/p11/c10+.


1. Установка пакетов

В ALT Linux xrdp разделён на основной демон и бэкенд для Xorg.

Установите оба:

sudo apt update
sudo apt install xrdp xorgxrdp

Если планируете использовать Xvnc (резервный вариант):

sudo apt install tigervnc-server

2. Настройка PAM (аутентификация)

xrdp делегирует проверку паролей через PAM. В ALT Linux файлы могут отсутствовать или содержать некорректные ссылки.

Создайте/проверьте два файла:

/etc/pam.d/xrdp

auth     required   pam_unix.so
account  required   pam_unix.so
password required   pam_unix.so
session  required   pam_unix.so

/etc/pam.d/xrdp-sesman

auth     required   pam_unix.so
account  required   pam_unix.so
password required   pam_unix.so
session  required   pam_unix.so
session  optional   pam_systemd.so

Если в вашей системе используется pam_sss.so или pam_ldap.so, замените pam_unix.so на соответствующий модуль или добавьте auth sufficient pam_sss.so use_first_pass перед pam_unix.so.

После правок перезапустите демоны:

sudo systemctl restart xrdp xrdp-sesman

3. Настройка запуска сессии (startwm.sh)

Файл /etc/xrdp/startwm.sh отвечает за запуск DE.

По умолчанию он часто ломается из-за переменных окружения или отсутствия исполняемого флага.

1. Откройте файл:
sudo nano /etc/xrdp/startwm.sh
2. Замените содержимое на универсальный шаблон (подставьте ваш DE):
#!/bin/bash

# Сброс переменных, мешающих запуску удалённой сессии
unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR
unset XDG_SESSION_TYPE

# Запуск рабочего стола (выберите один)
exec startxfce4       # XFCE
# exec mate-session   # MATE
# exec startkde       # KDE Plasma
# exec gnome-session  # GNOME (может требовать extra-настроек)
3. Сделайте исполняемым:
sudo chmod +x /etc/xrdp/startwm.sh

4. Устранение конфликта с systemd-logind

В современных системах ALT Linux systemd-logind убивает удалённые сессии, если пользователь уже вошёл в систему локально (на мониторе или через VNC/SSH с X11-форвардингом).

Вариант A (рекомендуемый):

Перед подключением по RDP выйдите из локальной сессии пользователя.

Вариант B (разрешить параллельные сессии):

sudo nano /etc/systemd/logind.conf

Найдите и раскомментируйте:

KillUserProcesses=no

Примените:

sudo systemctl restart systemd-logind

Примечание:

  • KillUserProcesses=no снижает безопасность при физическом доступе к машине, но решает 80% проблем с "Authorization failed" в xrdp.

5. Polkit и права

При первом подключении xrdp может запрашивать пароль дважды или падать из-за запросов polkit (управление цветом, сетью, принтерами).

Создайте правило, разрешающее фоновые запросы для xrdp:

sudo nano /etc/polkit-1/rules.d/45-xrdp.rules

Вставьте:

polkit.addRule(function(action, subject) {
  if (action.id.indexOf("org.freedesktop.") === 0 &&
      subject.isInGroup("xrdp")) {
    return polkit.Result.YES;
  }
});

Перезапустите polkit:

sudo systemctl restart polkit

Также добавьте пользователя в группы:

sudo usermod -aG xrdp,ssl-cert $USER

6. Запуск служб и фаервол

sudo systemctl enable xrdp xrdp-sesman
sudo systemctl restart xrdp xrdp-sesman

# Открытие порта 3389 (если используется firewalld)
sudo firewall-cmd --permanent --add-port=3389/tcp
sudo firewall-cmd --reload

# Если используется iptables:
sudo iptables -A INPUT -p tcp --dport 3389 -j ACCEPT
sudo service iptables save

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

Если авторизация всё ещё не проходит, смотрите логи в реальном времени:

sudo tail -f /var/log/xrdp.log /var/log/xrdp-sesman.log
# или через journalctl:
journalctl -u xrdp -u xrdp-sesman -f --no-pager
Сообщение в логе Вероятная причина Решение
Password authentication failed Ошибка PAM Проверьте /etc/pam.d/xrdp*, убедитесь, что пользователь существует и пароль не истёк
Connection closed / session start failed startwm.sh не запускает DE Исправьте startwm.sh, проверьте наличие exec <команда> в конце файла
Authorization required / polkit popup Запрос прав от DE Создайте правило polkit из п.5 или используйте Xvnc бэкенд
X server is not available Не установлен xorgxrdp или конфликт портов sudo apt install xorgxrdp, проверьте netstat -tlnp | grep 3389

8. Резервный бэкенд: Xvnc (если Xorg не работает)

На некоторых графических стеках ALT Linux Xorg бэкенд xrdp конфликтует с DRM/KMS.

Переключитесь на Xvnc:

1. В /etc/xrdp/xrdp.ini найдите секцию [Xvnc] и убедитесь, что она активна:
[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
  1. В той же секции [Xorg] закомментируйте port=3389 или поменяйте порядок секций, чтобы [Xvnc] был выше.
  2. Перезапустите: sudo systemctl restart xrdp xrdp-sesman
  3. При подключении в клиенте Remote Desktop выберите сессию Xvnc.

Чек-лист быстрой проверки

  • [ ] sudo apt install xrdp xorgxrdp выполнен без ошибок
  • [ ] /etc/pam.d/xrdp и xrdp-sesman существуют и содержат pam_unix.so
  • [ ] /etc/xrdp/startwm.sh исполняемый, в конце exec <ваш_de>
  • [ ] Пользователь не залогинен локально (или KillUserProcesses=no)
  • [ ] Пользователь добавлен в группы xrdp и ssl-cert
  • [ ] Порт 3389 открыт в фаерволе
  • [ ] Логи /var/log/xrdp*.log не содержат PAM authentication failed или startwm.sh: permission denied

Безопасность

  • RDP по умолчанию не шифрует трафик до установления сессии.

Рекомендуется подключаться через SSH-туннель:

  ssh -L 3390:localhost:3389 user@alt-host

И подключать клиент к localhost:3390.

  • В /etc/xrdp/xrdp.ini можно включить tls_security=any или tls_security=server для принудительного шифрования.
  • Регулярно обновляйте пакет: sudo apt upgrade xrdp.

Если после прохождения всех шагов авторизация всё равно падает, приложите вывод:

journalctl -u xrdp-sesman --since "5 min ago" --no-pager
grep -i error /var/log/xrdp-sesman.log

Это позволит точно локализовать причину (PAM, polkit, DE, или сетевая конфигурация).