Настройка XRDP
Практическое руководство по XRDP на Debian 10: установка, сессии, сертификаты, раскладка клавиатуры, ограничения XFCE и обслуживание сервера.
Установка XRDP на Debian 10
Ниже — конспект настройки терминального сервера на Debian 10, который использовался для работы с «1С:Предприятие». Учтите: с этой версией ОС могут возникнуть сложности с последующей установкой 1С из-за задержки поддержки со стороны разработчиков. Для Debian 9 все команды аналогичны.
Полезно заранее свериться с системными требованиями «1С:Предприятия 8».
Установка выполняется одной командой:
apt install xrdp xorgxrdp
После этого сервер уже принимает RDP-подключения. Дальше стоит разобраться с правами на запуск X-сервера: по умолчанию его могут запускать все пользователи, у которых есть доступ к консоли.
Права меняются через диалог:
dpkg-reconfigure xserver-xorg-legacy
Примените изменения перезапуском службы:
service xrdp restart
Теперь можно подключаться по RDP с новыми параметрами.
Настройка XRDP
Сначала приведите к нужному виду пользователя, созданного при установке системы. Его настройки позже станут основой шаблона (skel) для всех новых учётных записей: при создании пользователя из /etc/skel автоматически копируются нужные файлы и параметры.
Буфер обмена
Двусторонний буфер начинает работать сразу, дополнительная настройка не требуется. Если возникают проблемы, чаще всего они связаны с раскладкой клавиатуры — об этом ниже.
Перезагрузка без пароля root
Чтобы обычный пользователь мог перезагрузить сервер, не вводя пароль администратора, используется PolicyKit. Параметры собраны в секциях файла политик, а нужные действия включаются установкой значения в соответствующем поле.
Откройте файл и измените значения auth_admin_keep на yes:
vim /usr/share/polkit-1/actions/org.freedesktop.login1.policy
= часть вывода команды и необходимые изменения =
= вместо auth_admin_keep указываем yes =
<action id="org.freedesktop.login1.reboot">
<description gettext-domain="systemd">Reboot the system</description>
<message gettext-domain="systemd">Authentication is required for rebooting the system.</message>
<defaults>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.imply">org.freedesktop.login1.set-wall-message</annotate>
</action>
После этого пароль root при перезагрузке запрашиваться не будет.
Одна сессия на пользователя
Удобно, когда при повторном подключении пользователь попадает в ту же сессию со всеми открытыми окнами. Параметры задаются в конфигурации менеджера сессий:
vim /etc/xrdp/sesman.ini
= вывод части команды с необходимыми настройками =
[Sessions]
;; X11DisplayOffset - x11 display number offset
; Type: integer
; Default: 10
X11DisplayOffset=10
;; MaxSessions - maximum number of connections to an xrdp server
; Type: integer
; Default: 0
# Выставляем количество пользователей для одновременной работе на сервере
MaxSessions=3
;; KillDisconnected - kill disconnected sessions
; Type: boolean
; Default: false
; if 1, true, or yes, kill session after 60 seconds
# Не разрываем сеанс при отключении пользователя чтобы потом попасть в туже сессию
KillDisconnected=false
Запрет входа под root
По умолчанию root может подключаться по RDP. Разумнее это отключить:
vim /etc/xrdp/sesman.ini
= необходимое изменение =
[Security]
# Авторизация root. true - разрешено false - запрещено
AllowRootLogin=false
Имя локальной папки
При подключении клиент может пробросить локальную папку. Её имя задаётся здесь:
vim /etc/xrdp/sesman.ini
= необходимое изменение =
[Chansrv]
; drive redirection, defaults to xrdp_client if not set
# Название монтируемой папки
FuseMountName=Mount_FOLDER
Сертификат XRDP
По умолчанию используются сертификаты, созданные при установке. В журнале это видно по строкам:
cat /var/log/xrdp.log
= необходимая информация =
[INFO ] Using default X.509 certificate: /etc/xrdp/cert.pem
[INFO ] Using default X.509 key file: /etc/xrdp/key.pem
[ERROR] Cannot read private key file /etc/xrdp/key.pem: Permission denied
Ошибка доступа к ключу не мешает подключению, но её лучше убрать. Достаточно добавить пользователя xrdp в группу ssl-cert:
adduser xrdp ssl-cert
После перезагрузки и нового подключения ошибка из журнала исчезнет, а строка об использовании сертификатов по умолчанию останется.
Собственный сертификат
Можно выпустить свой сертификат той же командой, что указана в конфигурации, увеличив срок действия до 10 лет. Создайте каталог и выполните генерацию:
mkdir /etc/xrdp/certificate/
cd /etc/xrdp/certificate/
openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 3650
= будут заданы вопросы на которые ответьте по аналогии =
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Kostroma
Locality Name (eg, city) []:Kostroma
Organization Name (eg, company) [Internet Widgits Pty Ltd]:example
Organizational Unit Name (eg, section) []:example
Common Name (e.g. server FQDN or YOUR name) []:Administrator
Email Address []:admin@example.com
Укажите пути к новым файлам в конфигурации:
vim /etc/xrdp/xrdp.ini
= часть кода с необходимые изменениями =
; security layer can be 'tls', 'rdp' or 'negotiate'
; for client compatible layer
security_layer=negotiate
; minimum security level allowed for client
; can be 'none', 'low', 'medium', 'high', 'fips'
crypt_level=high
; X.509 certificate and private key
; openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365
certificate=/etc/xrdp/certificate/cert.pem
key_file=/etc/xrdp/certificate/key.pem
; set SSL protocols
; can be comma separated list of 'SSLv3', 'TLSv1', 'TLSv1.1', 'TLSv1.2', 'TLSv1.3'
ssl_protocols=TLSv1.2, TLSv1.3
; set TLS cipher suites
#tls_ciphers=HIGH
Выдайте права на каталог с сертификатом:
chown -R xrdp:xrdp /etc/xrdp/certificate/
После перезагрузки сервер будет работать с вашим сертификатом, а сообщений о сертификатах по умолчанию в журнале не останется.
Внешний вид окна авторизации
Параметры формы входа меняются в том же xrdp.ini:
vim /etc/xrdp/xrdp.ini
= часть кода с необходимыми изменениями =
; Login Screen Window Title
ls_title=XRDP server 1C
; top level window background color in RGB format
# Фон
ls_top_window_bg_color=000000
; width and height of login screen
ls_width=350
ls_height=430
; login screen background color in RGB format
ls_bg_color=dedede
; optional background image filename (bmp format).
#ls_background_image=
; logo
; full path to bmp-file or file in shared folder
# Свой логотип в формате bmp размера 240х140
ls_logo_filename=/etc/xrdp/logo_xrdp.bmp
ls_logo_x_pos=55
ls_logo_y_pos=50
; for positioning labels such as username, password etc
ls_label_x_pos=30
ls_label_width=60
; for positioning text and combo boxes next to above labels
ls_input_x_pos=110
ls_input_width=210
; y pos for first label and combo box
ls_input_y_pos=220
; OK button
ls_btn_ok_x_pos=142
ls_btn_ok_y_pos=370
ls_btn_ok_width=85
ls_btn_ok_height=30
; Cancel button
ls_btn_cancel_x_pos=237
ls_btn_cancel_y_pos=370
ls_btn_cancel_width=85
ls_btn_cancel_height=30
= Оставляю сессию только Xorg а остальные коментирую =
;
; Session types
;
; Some session types such as Xorg, X11rdp and Xvnc start a display server.
; Startup command-line parameters for the display server are configured
; in sesman.ini. See and configure also sesman.ini.
[Xorg]
name=Xorg
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
code=20
Чтобы применить настройки, перезапустите службу:
service xrdp restart
Отключение хранителя экрана
Сначала планировал отключать заставку у каждого пользователя, но проще удалить пакет:
apt-get remove xscreensaver
В Debian 10 после базовой установки xscreensaver обычно и так отсутствует. Чтобы к серверу всегда можно было подключиться, проверьте параметры менеджера питания.
Подготовка базового пользователя
За основу берём учётную запись, созданную при установке системы. Её настройки станут шаблоном. Наполнение зависит от задач: установите нужные программы, подключите сетевые ресурсы и принтеры, настройте панели и всё остальное, что требуется пользователям.
Раскладка клавиатуры в XFCE
С раскладкой пришлось повозиться больше всего. Помогает добавление на панель элемента «Раскладка клавиатуры» и его настройка.
Основная проблема проявляется, когда пользователь закрывает окно RDP-клиента, не завершая сеанс: при следующем подключении русская раскладка пропадает. Заставить всех всегда выходить из сеанса нереально, поэтому нужен надёжный обходной путь.
Решение — добавить на панель элемент «Запуск приложения», выбрать «Терминал Xfce» и указать команду:
setxkbmap -layout "us,ru" -model "pc105" -option "grp:alt_shift_toggle,grp_led:scroll"
Обратите внимание на сочетание клавиш для смены раскладки. Если переключение перестало работать, достаточно нажать эту кнопку на панели.
Правка конфигурации раскладки
Дополнительно нужные параметры прописываются в /etc/xrdp/xrdp_keyboard.ini — после этого переключение работает стабильно:
vim /etc/xrdp/xrdp_keyboard.ini
= необходимые проверки и дополнения =
В моем случае эти коды были, но лучше проверить их наличие
[default_rdp_layouts]
rdp_layout_us=0x00000409
rdp_layout_ru=0x00000419
Всё что ниже добавляем в конце не забывая что переключение происходит сочетанием клавиш alt+shift
[layouts_map_ru]
rdp_layout_us=ru,us
rdp_layout_ru=ru,us
[rdp_keyboard_ru]
keyboard_type=4
keyboard_type=7
keyboard_subtype=1
; model=pc105 при необходимости
options=grp:alt_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru
Проверьте результат после перезапуска:
service xrdp restart
Ограничение настроек XFCE
Раз пользователи могут перезагружать сервер без пароля, стоит запретить им менять системные настройки. Базовые конфигурации лежат в /etc/xdg/xfce4/xfconf и по умолчанию перекрываются пользовательскими; если добавить в них нужные параметры, приоритет будет у системных.
Сначала настройте панель так, как нужно, и скопируйте её конфигурацию:
cp -v /home/настроенный пользователь/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/
= вывод команды =
«/home/настроенный пользователь/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml» -> «/etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml»
Затем внесите в файл запрет на изменения для всех, кроме пользователя local:
mcedit /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
= вывод команды с необходимыми изменениями =
<channel name="xfce4-panel" version="1.0" locked="*" unlocked="local">
После сохранения остальные пользователи увидят предупреждение при попытке изменить панель.
Аналогично запрещаются изменения настроек XFCE:
mcedit /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
= вывод команды с необходимыми изменениями =
<channel name="xsettings" version="1.0" locked="*" unlocked="local">
Пользовательские настройки при этом применяться не будут, но и предупреждений он не увидит.
Остаётся выключение: значки видны, и действие можно выполнить, введя пароль root. Чтобы сделать кнопки неактивными, создайте файл kiosk:
mkdir /etc/xdg/xfce4/kiosk
mcedit /etc/xdg/xfce4/kiosk/kioskrc
= вывод команды с необходимыми изменениями =
[xfce4-session]
# Указываем пользователей кто может перегрузить сервер или разрешение группе %root
Shutdown=root,example
Обычно на панель выводится элемент «Системные действия» только с пунктами «Перезагрузка» и «Завершение сеанса». В итоге выходить из сеанса могут все, а перезагружать сервер — только разрешённые пользователи.
Примените изменения перезагрузкой:
reboot
Шаблон для новых пользователей
Когда все настройки проверены, создайте шаблон, который будет копироваться новым пользователям. В примере переносятся настройки XFCE, рабочего стола и списка баз 1С:
cd /home/Базовый пользователь
cp -R -f -b .config/ /etc/skel/
cp -R -f -b Рабочий\ стол/ /etc/skel/
# В случае использования 1С:Предприятие
cp -R -f -b .1C/ /etc/skel/
Последняя строка копирует настройки окна «Запуск 1С:Предприятие» со списком баз. Новые пользователи после входа получат те же настройки и содержимое рабочего стола, что и базовый.
Эту же схему можно использовать для переноса настроек между пользователями. Если учётных записей много, процесс несложно автоматизировать небольшим скриптом.
Учётные записи Debian
Для доступа используются локальные пользователи. Можно настроить и доменную авторизацию, но тогда придётся решать вопросы с VPN для удалённых сотрудников — в этом сценарии такие сложности не требовались.
Добавление пользователя
adduser user007
Команда запросит пароль и дополнительную информацию. В результате будет создан пользователь, его группа и домашний каталог, куда скопируются файлы из /etc/skel.
Смена пароля
passwd user
Утилита дважды запросит новый пароль и подтвердит успешное изменение.
Удаление пользователя
Чтобы удалить вместе с домашним каталогом:
deluser --remove-home user007
Список пользователей
Все учётные записи и их параметры видны в файле:
cat /etc/passwd
= часть вывода команды =
test:x:1001:1001:test,,,:/home/test:/bin/bash
example:x:1002:1002:example,,,:/home/example:/bin/bash
usr1cv8:x:999:1003:1C Enterprise 8 server launcher:/home/usr1cv8:/bin/sh
geoclue:x:119:127::/var/lib/geoclue:/bin/false
davfs2:x:120:128::/var/cache/davfs2:/bin/false
При необходимости параметры можно отредактировать вручную.
Локальный диск клиента
Проброс локального диска проверялся на стандартном клиенте Windows, а также на Remmina и KRDC в Linux — монтирование и работа проходят без проблем.
Если диск не подключается, попробуйте в настройках RDP-клиента снять галочку «Принтеры» в разделе локальных ресурсов.
Подключение из Windows
В окне авторизации XRDP нельзя переключить раскладку на нужный язык. Обычно по умолчанию активна русская раскладка, а логин и пароль требуется вводить латиницей.
Перед подключением переключите раскладку на английскую — тогда ввод пройдёт корректно.
Принтеры
С принтерами всегда больше всего хлопот, и хорошо, что большинство современных моделей сетевые: настроить такой принтер сможет даже начинающий администратор. С USB-устройствами в Linux придётся повозиться. Проброс локального принтера через RDP-клиент у меня ни разу не заработал нормально, да и, по отзывам, работает он нестабильно — особенно если офисы разные или пользователь подключается из дома.
Для удалённых сотрудников есть два практичных варианта:
- Если печать не обязательна, в 1С настраивается сохранение в PDF, а готовая папка пробрасывается на терминальный сервер любым популярным RDP-клиентом.
- Если принтер нужен, настраивается VPN, чтобы удалённый клиент оказался в той же сети.
Обслуживание XRDP
Служба управляется стандартными командами Debian:
service xrdp restart
service xrdp start
service xrdp stop
service xrdp status
Пример статуса после запуска:
service xrdp status
● xrdp.service - xrdp daemon
Loaded: loaded (/lib/systemd/system/xrdp.service; enabled)
Active: active (running) since Вт 2017-05-23 15:05:32 MSK; 32s ago
Docs: man:xrdp(8)
man:xrdp.ini(5)
Process: 759 ExecStart=/usr/sbin/xrdp $XRDP_OPTIONS (code=exited, status=0/SUCCESS)
Process: 730 ExecStartPre=/bin/sh /usr/share/xrdp/socksetup (code=exited, status=0/SUCCESS)
Main PID: 949 (xrdp)
CGroup: /system.slice/хrdp.service
└─949 /usr/sbin/хrdp
май 23 15:05:31 хrdp systemd[1]: PID file /run/xrdp/xrdp.pid not readable (yet?) after start.
май 23 15:05:32 хrdp systemd[1]: Started xrdp daemon.
май 23 15:05:33 хrdp xrdp[949]: (949)(140156439295744)[INFO ] starting хrdp with pid 949
май 23 15:05:45 хrdp xrdp[949]: (949)(140156439295744)[INFO ] listening to port 3389 on 0.0.0.0
Активные сессии
У каждого подключённого пользователя создаётся отдельная сессия. Найти её можно так:
ps aux | grep xrdp | grep xorg
= вывод команды =
local 694 3.7 1.9 571540 76992 ? Sl 22:47 0:29 /usr/lib/xorg/Xorg :10 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp -logfile .xorgxrdp.%s.log
Здесь видно, что подключён один пользователь local с PID 694.
Завершать только этот процесс недостаточно. Полный список процессов XRDP:
ps aux | grep xrdp
= вывод команды =
root 447 0.0 0.0 13860 3640 ? S 22:45 0:00 /usr/sbin/xrdp-sesman
xrdp 471 0.0 0.0 12248 2044 ? S 22:45 0:00 /usr/sbin/xrdp
root 692 0.0 0.0 13616 2300 ? S 22:47 0:00 /usr/sbin/xrdp-sesman
local 694 3.8 1.9 571540 76992 ? Sl 22:47 0:36 /usr/lib/xorg/Xorg :10 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp -logfile .xorgxrdp.%s.log
local 697 0.0 0.0 99512 3412 ? Sl 22:47 0:00 /usr/sbin/xrdp-chansrv
xrdp 903 4.1 0.6 40076 28176 ? S 22:47 0:37 /usr/sbin/xrdp
root 982 0.0 0.0 6224 828 pts/0 S+ 23:02 0:00 grep xrdp
Завершить все процессы пользователя можно командой:
pkill -9 -u local
Ротация журналов
По умолчанию журналы XRDP не ротируются. Можно завести отдельный файл ротации, но проще добавить нужные пути в стандартный конфиг:
mcedit /etc/logrotate.d/rsyslog
=вывод команды с необходимыми дополнениями =
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
invoke-rc.d rsyslog rotate > /dev/null
endscript
}
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
/var/log/хrdp-sesman.log
/var/log/хrdp.log
{
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
invoke-rc.d rsyslog rotate > /dev/null
endscript
}
Итог
Все запланированные параметры настроены. Остальное покажет эксплуатация: любая система требует внимания администратора. Возникшие проблемы и решения будут добавляться в статью — а развитие проекта с каждой новой версией заметно.
Статья взята с ресурса sevo44.ru