Рубрики
debian daemons \ демоны \ службы \ сервисы

Debian 10 / l2tp / console / KDE / client / server / xrdp

Ссылки:

https://sevo44.ru/xrdp-terminalnyj-server-linux/
https://ask-ubuntu.ru/questions/803859/2004-problema-podklyucheniya-xrdp-kde-plasma
https://fileenergy.com/linux/instruktsiya-po-ustanovke-i-nastrojke-terminalnogo-servera-na-baze-linux-debian-10-s-graficheskoj-obolochkoj
Удаленный рабочий стол Linux
https://habr.com/ru/company/ruvds/blog/312556/ https://setiwik.ru/kak-ustanovit-xrdp-na-ubuntu-20-04/ - черный экран https://ask.fedoraproject.org/t/networkmanager-insufficient-privileges-from-remote-login/7643 - insuffucient privileges network manager

Для работы клиента l2tp/ipsec в KDE:

!!! strongswan - пакет  IPSEC
!!! xl2tpd -  пакет L2TP
!!! libreswan - пакет для IPSEC

0. Установка в debian
apt install vim mc
apt install strongswan xl2tpd network-manager-l2tp libreswan

1. Перезапускаем daemon network-manager 
systemctl restart network-manager

2. Отключаем постоянные запросы паролей при настройке под учетной записью из группы admin
2.0
usermod -aG admin username

2.1 Политики polkit-1 такие полезные ...
vim /etc/polkit-1/localauthority/50-local.d/46-all-allow.pkla
-----------------------------------------------------------------------
[Allow ALL from group admin]
Identity=unix-group:admin
Action=*
ResultAny=yes
ResultInactive=yes
ResultActive=yes
-----------------------------------------------------------------------

3. Использование Network-manager в консоли: 
nmcli - network manager client
nmcli connection show - показать доступные соединения
nmcli connection  up [vpnName] - подключение к VPN из командной строки
nmcli connection down [vpnName] - отключение от VPN из командной строки
 
Пример:
nmcli connection up vpn.site.ru
nmcli connection dowm vpn.site.ru

Настройка сервера l2tp\ipsec:

0. Устанавливаем пакеты для работы ipsec:
apt install strongswan

1. Проверяем: 
/etc/ipsec.conf
---------------
conn rw-base
    fragmentation=yes
    dpdaction=clear 
    dpdtimeout=90s
    dpddelay=30s

conn l2tp-vpn
    also=rw-base
    ike=aes128-sha256-modp3072
    esp=aes128-sha256-modp3072
    leftsubnet=%dynamic[/1701]
    rightsubnet=%dynamic
    mark=%unique
    leftauth=psk
    rightauth=psk
    type=transport
    auto=add
---------------

2. Генерируем общий ключ:
openssl rand -base64 18


3. Общий ключ следует указать в файле /etc/ipsec.secrets, добавив в него следующую строку:
%any %any : PSK "mySharedKey"
Где mySharedKey - общий ключ, так как от него зависит безопасность вашей VPN-сети мы рекомендуем использовать 
в качестве ключа случайно сгенерированную строку из букв, цифр и спецсимволов. 


4. После внесения указанных настроек перезапустим службу:
!!! Имя демона Ubuntu называется strongswan-starter
systemctl restart strongswan

5. Устанавливаем пакеты для работы l2tp
apt install xl2tpd

6. Редактируем  /etc/xl2tpd/xl2tpd.conf
# auth file указывает на файл с данными для аутентификации
# pppoptfile - набор опций для PPP-соединения, которое используется внутри L2TP-туннеля
# name - имя сервера, которое будет использоваться для поиска данных аутентификации в файле chap-secrets
# local ip и ip range отвечают за локальный адрес сервера в VPN-сети и диапазон адресов для выдачи удаленным клиентам. 
# Здесь можно использовать два подхода: выдавать клиентам адреса из диапазона локальной сети офиса и включить ProxyARP
# в этом случае настраивать маршрутизацию на клиентах не требуется, они будут как-бы включены в общую сеть офиса на канальном уровне (L2) 
# либо выдавать адреса из непересекающегося диапазона и использовать маршрутизацию.
---------------------------------------
[global]
port = 1701
auth file = /etc/ppp/chap-secrets
access control = no
ipsec saref = yes
force userspace = yes

[lns default]
exclusive = no
ip range = 10.2.2.100-10.2.2.199
hidden bit = no
local ip = 10.2.2.1
length bit = yes
require authentication = yes
name = l2tp-vpn
pppoptfile = /etc/ppp/options.xl2tpd
flow bit = yes
-----------------------------------------

7. Настройка PPP
cd  /etc/ppp - переходим в каталог
cp options options.xl2tpd - копируем файл опций

8. Редактируем /etc/ppp/options.xl2tpd
# Если вы будете использовать ProxyARP то дополнительно раскомментируйте опцию: proxyarp
# Опции перечислены в порядке их следования, нужно раскомментировать их и указать нужное значение, если опция отсутствует, то ее следует добавить в конце файла.
# Также для Windows-клиентов можно передать настройку DNS-серверов, для этого добавьте опции: ms-dns 192.168.1.1
--------------------------------------
asyncmap 0
auth
crtscts
lock
hide-password
modem
mtu 1460
lcp-echo-interval 30
lcp-echo-failure 4
noipx
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
multilink
mppe-stateful
--------------------------------------

8. Для применения настроек  перезапускаем xl2tp
systemctl restart xl2tpd

9. Добавляем пользователей
# указываем логин
# имя службы, оно должно совпадать с тем, которое мы указали в опции name в xl2tpd.conf
# пароль 
# IP-адрес клиента, символ * обозначает что можно присвоить любой адрес из выбранного диапазона
vim /etc/ppp/chap-secrets
-------------------------
ivanov   l2tp-vpn   Pa$$word_1   *
petrov   l2tp-vpn   Pa$$word_1   10.2.2.99
-------------------------

10. настраиваем firewall
Для доступа к L2TP-серверу следует разрешить в брандмауэре входящие подключения к портам 
500 UDP
4500 UDP
!!! подключение к 1701 UDP, вопреки распространенному заблуждению, разрешать не следует

Диагностика:
ipsec statusall
ip xfrm state
ip xfrm policy

Настройки и установка xrdp:

0. Устанавливаем: 
apt install xrdp xorgxrdp ssl-cert- устанавливаем
1. Переконфигурируем:
dpkg-reconfigure xserver-xorg-legacy - переключаем разрешение для всех 
2. Редактируем выбор раскладки 
vim /etc/xrdp/xrdp_keyboard.ini
---------------------------
[default_rdp_layouts] # ищем и убеждаемся что файлы существуют
rdp_layout_us=0x00000409 # ищем и убеждаемся что файлы существуют
rdp_layout_ru=0x00000419 # ищем и убеждаемся что файлы существуют


[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
---------------------------  

3. Добавить пользователя xrdp в группу ssl-cert 
usermod -aG ssl-cert xrdp

. После настройки перезапустим xrdp 
service xrdp restart

Выпуск собственного сертификата для XRDP

0. Создаем  и выпускаем сертификаты
mkdir /etc/xrdp/certificate/
cd /etc/xrdp/certificate/
openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 3650

1. Подключаем сертификаты отредактировав файл
!!! ищем строки  (certificate=) и (key_file=) и правим их
vim /etc/xrdp/xrdp.ini
----------------------
certificate=/etc/xrdp/certificate/cert.pem 
key_file=/etc/xrdp/certificate/key.pem
----------------------

2. Изменяем права для файла 
chown -R xrdp:xrdp /etc/xrdp/certificate/

3. После настройки перезапустим xrdp 
service xrdp restart

Запрет авторизации ROOT в XRDP

vim /etc/xrdp/sesman.ini
-------------------------
[Security]
# Авторизация root. true - разрешено false - запрещено
AllowRootLogin=false
-------------------------

Разрешаем перезагрузка системы пользователем XRDP:

!!!  Вместо auth_admin_keep указываем yes
vim /usr/share/polkit-1/actions/org.freedesktop.login1.policy
-------------------------------------------------------------

Reboot the system
Authentication is required for rebooting the system.
                
                        yes
                        yes
                        yes
                
org.freedesktop.login1.set-wall-message

-------------------------------------------------------------

insuffucient privileges network manager

vim /usr/share/polkit-1/actions/org.freedesktop.NetworkManager.policy



   [...]
    
      auth_admin_keep
      yes
      yes
    

Более правильное решение insuffucient privileges network manager

vim /var/lib/polkit-1/localauthority/50-local.d/10-network-manager.pkla
-----------------------------------------------------------------------
[Prevent foo from modifying all network states and settings]
Identity=unix-user:foo
Action=org.freedesktop.NetworkManager.*
ResultAny=yes
ResultInactive=yes
ResultActive=yes
-----------------------------------------------------------------------

Одна сессия для пользователя XRDP

!!! Подключатся к существующей сессии
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
------------------------

XRDP черный экран при подключении:

!!! Баг был при использовании использовании ubuntu, debian 10, debian 11
!!! В окружение KDE
!!! Нужно вставить следующие строки в файл /etc/xrdp/startwm.sh
!!! unset DBUS_SESSION_BUS_ADDRESS
!!! unset XDG_RUNTIME_DIR

0. vim /etc/xrdp/startwm.sh
------------------------
#!/bin/sh
# xrdp X session start script (c) 2015, 2017 mirabilos
# published under The MirOS Licence

if test -r /etc/profile; then
        . /etc/profile
fi

unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR

if test -r /etc/default/locale; then
        . /etc/default/locale
        test -z "${LANG+x}" || export LANG
        test -z "${LANGUAGE+x}" || export LANGUAGE
        test -z "${LC_ADDRESS+x}" || export LC_ADDRESS
        test -z "${LC_ALL+x}" || export LC_ALL
        test -z "${LC_COLLATE+x}" || export LC_COLLATE
        test -z "${LC_CTYPE+x}" || export LC_CTYPE
        test -z "${LC_IDENTIFICATION+x}" || export LC_IDENTIFICATION
        test -z "${LC_MEASUREMENT+x}" || export LC_MEASUREMENT
        test -z "${LC_MESSAGES+x}" || export LC_MESSAGES
        test -z "${LC_MONETARY+x}" || export LC_MONETARY
        test -z "${LC_NAME+x}" || export LC_NAME
        test -z "${LC_NUMERIC+x}" || export LC_NUMERIC
        test -z "${LC_PAPER+x}" || export LC_PAPER
        test -z "${LC_TELEPHONE+x}" || export LC_TELEPHONE
        test -z "${LC_TIME+x}" || export LC_TIME
        test -z "${LOCPATH+x}" || export LOCPATH
fi

if test -r /etc/profile; then
        . /etc/profile
fi

test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession

------------------------

1. Перезапускаем демон xrdp
sudo systemctl restart xrdp

Название подключенной локальной папки в XRDP

0. Редактируем файл
vim /etc/xrdp/sesman.ini
------------------------
FuseMountName=Mount_FOLDER
------------------------

1. Перезапускаем демон xrdp
sudo systemctl restart xrdp

Настройка вида окна авторизации XRDP

0. Редактируем файл 
vim  /etc/xrdp/xrdp.ini
-----------------------
ls_title=YOU SUPER SERVER # заголовок окна сервера
ls_top_window_bg_color=000000  # Цвет фона RGB
ls_logo_filename=/etc/xrdp/logo_xrdp.bmp #Логотип

; Session types # После этой строки ищем и убираем лишние сессии, оставляем только [Xorg]
-----------------------

1. Перезапускаем демон XRDP 
service xrdp restart

Отключение screensaver

Вариант первый, можно просто его удалить
apt-get remove xscreensaver

Вариант второй, можно настроить электропитание в настройках экрана