Подробный гайд: настройка 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
- В той же секции
[Xorg]закомментируйтеport=3389или поменяйте порядок секций, чтобы[Xvnc]был выше. - Перезапустите:
sudo systemctl restart xrdp xrdp-sesman - При подключении в клиенте 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, или сетевая конфигурация).