Inhaltsverzeichnis

xrdp CentOS 7

xrdp akzeptiert Verbindungen von einer Vielzahl von RDP-Clients: FreeRDP, rdesktop, NeutrinoRDP und Microsoft™ Remote Desktop Client (für Windows™, macOS, iOS und Android). Der RDP-Transport wird standardmäßig mit TLS verschlüsselt.

* Quellen

Ab hier werden root-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um root zu werden geben Sie bitte folgenden Befehl ein:

$ su -
Password: 

Vorbereitung

Zur Installation von xrdp über ein rpm-Paket, soll hier das Repository eines Drittanbieters genutzt werden, da xrdp nicht im CentOS-Repository enthalten ist.

Nachfolgend soll das Repository des Drittanbieters EPEL genutzt werden. Eine Anleitung, wie das Repository des Drittanbieters EPEL eingebunden werden könnte, kann unter nachfolgendem internen Link nachgelesen werden:

Installation

Zur Installation von xrdp werden nachfolgende Pakete benötigt:

Mit nachfolgendem Befehl, werden die Pakete xrdp und tigervnc-server installiert:

# yum install xrdp tigervnc-server
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * base: mirror.infonline.de
 * centos-sclo-rh: mirror.23media.com
 * centos-sclo-sclo: mirror.fra10.de.leaseweb.net
 * epel: mirror.23media.com
 * extras: mirror.23media.com
 * updates: mirror.23media.com
182 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package tigervnc-server.x86_64 0:1.8.0-17.el7 will be installed
---> Package xrdp.x86_64 1:0.9.13-1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                Arch          Version                 Repository   Size
================================================================================
Installing:
 tigervnc-server        x86_64        1.8.0-17.el7            base        215 k
 xrdp                   x86_64        1:0.9.13-1.el7          epel        427 k

Transaction Summary
================================================================================
Install  2 Packages

Total download size: 643 k
Installed size: 2.6 M
Is this ok [y/d/N]: y
Downloading packages:
(1/2): tigervnc-server-1.8.0-17.el7.x86_64.rpm             | 215 kB   00:00
(2/2): xrdp-0.9.13-1.el7.x86_64.rpm                        | 427 kB   00:01
--------------------------------------------------------------------------------
Total                                              348 kB/s | 643 kB  00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 1:xrdp-0.9.13-1.el7.x86_64                                   1/2
  Installing : tigervnc-server-1.8.0-17.el7.x86_64                          2/2
  Verifying  : tigervnc-server-1.8.0-17.el7.x86_64                          1/2
  Verifying  : 1:xrdp-0.9.13-1.el7.x86_64                                   2/2

Installed:
  tigervnc-server.x86_64 0:1.8.0-17.el7        xrdp.x86_64 1:0.9.13-1.el7

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket xrdp installiert wurden.

# rpm -qil xrdp
Name        : xrdp
Epoch       : 1
Version     : 0.9.13
Release     : 1.el7
Architecture: x86_64
Install Date: Sat 25 Apr 2020 10:04:09 AM CEST
Group       : Unspecified
Size        : 2201506
License     : ASL 2.0 and GPLv2+ and MIT
Signature   : RSA/SHA256, Wed 11 Mar 2020 03:34:21 PM CET, Key ID 6a2faea2352c64e5
Source RPM  : xrdp-0.9.13-1.el7.src.rpm
Build Date  : Wed 11 Mar 2020 11:53:26 AM CET
Build Host  : buildvm-15.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : http://www.xrdp.org/
Bug URL     : https://bugz.fedoraproject.org/xrdp
Summary     : Open source remote desktop protocol (RDP) server
Description :
xrdp provides a fully functional RDP server compatible with a wide range
of RDP clients, including FreeRDP and Microsoft RDP client.
/etc/logrotate.d/xrdp
/etc/pam.d/xrdp-sesman
/etc/sysconfig/xrdp
/etc/xrdp
/etc/xrdp/km-00000406.ini
/etc/xrdp/km-00000407.ini
/etc/xrdp/km-00000409.ini
/etc/xrdp/km-0000040a.ini
/etc/xrdp/km-0000040b.ini
/etc/xrdp/km-0000040c.ini
/etc/xrdp/km-00000410.ini
/etc/xrdp/km-00000411.ini
/etc/xrdp/km-00000412.ini
/etc/xrdp/km-00000414.ini
/etc/xrdp/km-00000415.ini
/etc/xrdp/km-00000416.ini
/etc/xrdp/km-00000419.ini
/etc/xrdp/km-0000041d.ini
/etc/xrdp/km-00000807.ini
/etc/xrdp/km-00000809.ini
/etc/xrdp/km-0000080a.ini
/etc/xrdp/km-0000080c.ini
/etc/xrdp/km-00000813.ini
/etc/xrdp/km-00000816.ini
/etc/xrdp/km-0000100c.ini
/etc/xrdp/km-00010409.ini
/etc/xrdp/openssl.conf
/etc/xrdp/pulse
/etc/xrdp/pulse/default.pa
/etc/xrdp/sesman.ini
/etc/xrdp/xrdp.ini
/etc/xrdp/xrdp_keyboard.ini
/usr/bin/xrdp-dis
/usr/bin/xrdp-genkeymap
/usr/bin/xrdp-keygen
/usr/bin/xrdp-sesadmin
/usr/bin/xrdp-sesrun
/usr/lib/systemd/system/xrdp-sesman.service
/usr/lib/systemd/system/xrdp.service
/usr/lib64/librfxencode.so.0
/usr/lib64/librfxencode.so.0.0.0
/usr/lib64/xrdp
/usr/lib64/xrdp/libcommon.so.0
/usr/lib64/xrdp/libcommon.so.0.0.0
/usr/lib64/xrdp/libmc.so
/usr/lib64/xrdp/libscp.so.0
/usr/lib64/xrdp/libscp.so.0.0.0
/usr/lib64/xrdp/libvnc.so
/usr/lib64/xrdp/libxrdp.so.0
/usr/lib64/xrdp/libxrdp.so.0.0.0
/usr/lib64/xrdp/libxrdpapi.so.0
/usr/lib64/xrdp/libxrdpapi.so.0.0.0
/usr/lib64/xrdp/libxup.so
/usr/libexec/xrdp
/usr/libexec/xrdp/reconnectwm.sh
/usr/libexec/xrdp/startwm-bash.sh
/usr/libexec/xrdp/startwm.sh
/usr/sbin/xrdp
/usr/sbin/xrdp-chansrv
/usr/sbin/xrdp-sesman
/usr/share/doc/xrdp-0.9.13
/usr/share/doc/xrdp-0.9.13/COPYING
/usr/share/doc/xrdp-0.9.13/README.Fedora
/usr/share/doc/xrdp-0.9.13/design.txt
/usr/share/doc/xrdp-0.9.13/faq-compile.txt
/usr/share/doc/xrdp-0.9.13/faq-general.txt
/usr/share/doc/xrdp-0.9.13/file-loc.txt
/usr/share/doc/xrdp-0.9.13/install.txt
/usr/share/man/man1/xrdp-dis.1.gz
/usr/share/man/man5/sesman.ini.5.gz
/usr/share/man/man5/xrdp.ini.5.gz
/usr/share/man/man8/xrdp-chansrv.8.gz
/usr/share/man/man8/xrdp-genkeymap.8.gz
/usr/share/man/man8/xrdp-keygen.8.gz
/usr/share/man/man8/xrdp-sesadmin.8.gz
/usr/share/man/man8/xrdp-sesman.8.gz
/usr/share/man/man8/xrdp-sesrun.8.gz
/usr/share/man/man8/xrdp.8.gz
/usr/share/polkit-1/rules.d/xrdp.rules
/usr/share/xrdp
/usr/share/xrdp/ad24b.bmp
/usr/share/xrdp/ad256.bmp
/usr/share/xrdp/cursor0.cur
/usr/share/xrdp/cursor1.cur
/usr/share/xrdp/sans-10.fv1
/usr/share/xrdp/xrdp24b.bmp
/usr/share/xrdp/xrdp256.bmp
/usr/share/xrdp/xrdp_logo.bmp
/var/log/xrdp-sesman.log
/var/log/xrdp.log

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket tigervnc-server installiert wurden.

# rpm -qil tigervnc-server
Name        : tigervnc-server
Version     : 1.8.0
Release     : 17.el7
Architecture: x86_64
Install Date: Sat 25 Apr 2020 10:04:10 AM CEST
Group       : User Interface/X
Size        : 521156
License     : GPLv2+
Signature   : RSA/SHA256, Thu 22 Aug 2019 11:44:37 PM CEST, Key ID 24c6a8a7f4a80eb5
Source RPM  : tigervnc-1.8.0-17.el7.src.rpm
Build Date  : Fri 09 Aug 2019 05:04:41 AM CEST
Build Host  : x86-02.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.tigervnc.com
Summary     : A TigerVNC server
Description :
The VNC system allows you to access the same desktop from a wide
variety of platforms.  This package includes set of utilities
which make usage of TigerVNC server more user friendly. It also
contains x0vncserver program which can export your active
X session.
/etc/sysconfig/vncservers
/usr/bin/vncserver
/usr/bin/x0vncserver
/usr/lib/systemd/system/vncserver@.service
/usr/lib/systemd/system/xvnc.socket
/usr/lib/systemd/system/xvnc@.service
/usr/share/man/man1/vncserver.1.gz
/usr/share/man/man1/x0vncserver.1.gz

Dienst/Deamon-Start einrichten

Um xrdp, welcher als Dienst/Deamon als Hintergrundprozess laufen soll, auch nach einem Neustart des Servers zur Verfügung zu haben, sollte der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgenden Befehlen realisiert werden kann:

# systemctl enable xrdp.service
Created symlink from /etc/systemd/system/multi-user.target.wants/xrdp.service to /usr/lib/systemd/system/xrdp.service.

Eine Überprüfung, ob beim Neustart des Server der xrdp-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:

# systemctl list-unit-files --type=service | grep xrdp
xrdp-sesman.service                           disabled
xrdp.service                                  enabled

bzw.

# systemctl is-enabled xrdp.service
enabled

iptables Regel

Damit der xrdp-Dienst/Daemon auch erreichbar ist und nicht die Remote-Desktop-Verbindung vom Paketfilter iptables blockiert wird, muss nachfolgende Regel zum iptables-Regelwerk hinzugefügt werden.

Um die aktuellen iptables-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# iptables -L -nv --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out   source       destination         
1     1562 1266K ACCEPT     all  --  *      *     0.0.0.0/0    0.0.0.0/0      state RELATED,ESTABLISHED 
2        0     0 ACCEPT     icmp --  *      *     0.0.0.0/0    0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo     *     0.0.0.0/0    0.0.0.0/0           
4        1    60 ACCEPT     tcp  --  *      *     0.0.0.0/0    0.0.0.0/0      state NEW tcp dpt:22 
5       39  1248 REJECT     all  --  *      *     0.0.0.0/0    0.0.0.0/0      reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out   source       destination         
1        0     0 REJECT     all  --  *      *     0.0.0.0/0    0.0.0.0/0      reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out   source       destination

Nachfolgender Befehl, fügt folgende iptables-Regel dem iptables-Regelwerk nach der Position 5 hinzu, ohne das der Paketfilter angehalten werden muss:

und hier die Befehle:

# iptables -I INPUT 5 -p tcp --dport 3389 -j ACCEPT

Ein erneute Abfrage des iptables-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:

# iptables -L -nv --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out   source       destination         
1       70  5752 ACCEPT     all  --  *      *     0.0.0.0/0    0.0.0.0/0      state RELATED,ESTABLISHED 
2        0     0 ACCEPT     icmp --  *      *     0.0.0.0/0    0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo     *     0.0.0.0/0    0.0.0.0/0           
4        0     0 ACCEPT     tcp  --  *      *     0.0.0.0/0    0.0.0.0/0      state NEW tcp dpt:22 
5        0     0 ACCEPT     tcp  --  *      *     0.0.0.0/0    0.0.0.0/0      tcp dpt:3389 
6        0     0 REJECT     all  --  *      *     0.0.0.0/0    0.0.0.0/0      reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out   source       destination         
1        0     0 REJECT     all  --  *      *     0.0.0.0/0    0.0.0.0/0      reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out   source       destination

Die neue Zeile ist an Position 5 (INPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):

...
5        0     0 ACCEPT     tcp  --  *      *     0.0.0.0/0    0.0.0.0/0      tcp dpt:80
...

Um diese iptables-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:

# /usr/sbin/iptables-save > /etc/sysconfig/iptables 

Erster Start

Nachdem alle vorhergehenden Installationsschritte und Konfigurationsschritte erfolgreich durchgeführt worden sind, kann der xrdp-Dienst/Daemon mit nachfolgendem Befehle gestartet werden:

# systemctl start xrdp.service

Nachfolgender Befehl kann zur Überprüfung, ob der xrdp-Dienst/Daemon gestartet wurde, genutzt werden:

# systemctl status xrdp.service
● xrdp.service - xrdp daemon
   Loaded: loaded (/usr/lib/systemd/system/xrdp.service; enabled;
vendor preset: disabled)
   Active: active (running) since Sat 2020-04-25 10:28:49 CEST; 19s ago
     Docs: man:xrdp(8)
           man:xrdp.ini(5)
 Main PID: 5247 (xrdp)
   CGroup: /system.slice/xrdp.service
           └─5247 /usr/sbin/xrdp --nodaemon

Apr 25 10:28:49 pml035 systemd[1]: Started xrdp daemon.
Apr 25 10:28:49 pml035 xrdp[5247]: (5247)(140127764486592)[INFO ] starting ...47
Apr 25 10:28:49 pml035 xrdp[5247]: (5247)(140127764486592)[INFO ] address [... 1
Apr 25 10:28:49 pml035 xrdp[5247]: (5247)(140127764486592)[INFO ] listening....0
Apr 25 10:28:49 pml035 xrdp[5247]: (5247)(140127764486592)[INFO ] xrdp_list...ne
Hint: Some lines were ellipsized, use -l to show in full.

Konfiguration

~/.Xclients

:!: WICHTIG - Nachfolgende Befehle bitte als Benutzer ausführen unter dessen eine Anmeldung am Remote-Gerät durchgeführt werden soll!

Damit nicht nachfolgende Fehlermeldung erscheint,

xrdp - Fehler

ist es bei manchen GDM (Graphical Desktop Manager), wie z.B. MATE Desktop notwendig, falls nicht schon vorhanden, die nachfolgende Konfigurationsdatei im jeweiligen $HOME-Verzeichnis des entsprechenden Benutzers, unter dessen eine Anmeldung am Remote-Gerät durchgeführt werden soll anzulegen, was mit nachfolgendem Befehl durchgeführt werden kann:

$ touch ~/.Xclients

Der Inhalt der Konfigurationsdatei sollte dann z.B. für den MATE Desktop wie folgt aussehen und kann mit nachfolgendem Befehl erstellt werden:

$ echo "mate-session" > ~/.Xclients

Damit die Konfigurationsdatei auch „ausgeführt“ werden kann, sind nachfolgende Dateirechte mit nachfolgendem Befehl zu setzen:

$ chmod a+x ~/.Xclients

Anschließend sollte die Konfigurationsdatei wie folgt im Dateisystem angelegt sein:

$ ls -l ~/.Xclients 
-rwxrwxr-x 1 klaus klaus 13 Apr 25 10:08 /home/klaus/.Xclients

Erster Verbindungsuafbau

Nachfolgend soll beschrieben werden, wie von einem Windows™ PC mittels Microsoft™ Remote Desktop Client ein Verbindung zu einem CentOS-7-Server eine Verbindung aufgebaut werden kann.

Microsoft™ Remote Desktop Client

Nach dem erfolgreichen Satrt des Microsoft™ Remote Desktop Client, sollte nachfolgender Bildschirm erscheinen:

Microsoft™ Remote Desktop Client - Start

Hier kann für weitere Konfigurationen die [Optionen einblenden]-Schaltfläche gedrückt werden, wonach sich der Microsoft™ Remote Desktop Client wie folgt am Bildschirm darstellt:

Microsoft™ Remote Desktop Client - Start - Optionen einblenden

Hier wird unter

Feld Wert Beschreibung
Computer: 192.168.0.35 Die IP-Adresse, oder der DNS-Name des Remote-Geräts eingetragen
Benutzername: klaus Der Benutzername des Benutzer, unter dessen die Anmeldung erfolgen soll eingetragen.

Durch drücken der [Verbinden]-Schaltfläche, sollte dann in diesem Fall nachfolgender Dialog erscheinen:

Microsoft™ Remote Desktop Client - Verbindung - Zertifikatshinweis

:!: HINWEIS - Dieser Hinweis erscheint, da hier das Standard-Zertifikat von xrdp zur Verwendung kommt und dieses nicht vom Microsoft™ Remote Desktop Client als Vertrauenswürdig anerkannt wird.

Zu diesem Zeitunkt der Installation kann hier die [Ja]-Schaltfläche gedrückt werden, wonach dann nachfolgender Bildschirm erscheinen sollte:

Microsoft™ Remote Desktop Client - Verbindung - Login

Hier wird unter

Feld Wert Beschreibung
username klaus Der Benutzername des Benutzer, unter dessen die Anmeldung erfolgen soll eingetragen.
password ★★★ Das Passwort des Benutzer, unter dessen die Anmeldung erfolgen soll eingetragen.

Durch drücken der [OK]-Schaltfläche wird die Verbindung dann Aufgebaut.

Microsoft™ Remote Desktop Client - Eigene Auflösung

Falls die im Microsoft™ Remote Desktop Client unter dem [Anzeige]-Reiter im [Anzeigekonfiguration]-Bereich erscheinende Auswahl an Bildschirmauflösungen nicht reichen, kann mit nachfolgendem Befhel in der Microsoft™ Eingabeaufforderung den Microsoft™ Remote Desktop Client mit einer angepassten Bildschirmauflösung für das Remote-Gerät starten, wie nachfolgende Bildschirmkopien zeigen:

|Microsoft™ Eingabeaufforderung - Start - Microsoft™ Remote Desktop Client - mit eigener Bildschirmauflösung

Hier wird unter

Programm Optionen Beschreibung
mstsc.exe /w:1600 /h:900 Microsoft™ Remote Desktop Client mit dem entsprechenden Bildschirmauflösungsparmetern.
- /w:1600 = Width (Breite) - 1600 Pixel
- /h:900 = Height (Höhe) - 900 Pixel

Nach dem erfolgreichen Satrt des Microsoft™ Remote Desktop Client, sollte nachfolgender Bildschirm erscheinen:

Microsoft™ Remote Desktop Client - Start

Hier kann für weitere Konfigurationen die [Optionen einblenden]-Schaltfläche gedrückt werden, wonach sich der Microsoft™ Remote Desktop Client wie folgt am Bildschirm darstellt:

Microsoft™ Remote Desktop Client - Start - Optionen einblenden

Hier wird unter

Feld Wert Beschreibung
Computer: 192.168.0.35 Die IP-Adresse, oder der DNS-Name des Remote-Geräts eingetragen
Benutzername: klaus Der Benutzername des Benutzer, unter dessen die Anmeldung erfolgen soll eingetragen.

Im Microsoft™ Remote Desktop Client kann nun unter dem [Anzeige]-Reiter im [Anzeigekonfiguration]-Bereich erscheinende Auswahl an Bildschirmauflösungen den zuvor via Microsoft™ Eingabeaufforderung gestarteten Microsoft™ Remote Desktop Client mit dem entsprechenden Bildschirmauflösungsparmetern angezeigt werden, was nachfolgende Bildschirmkopie zeigt:

Microsoft™ Remote Desktop Client - mit eigener Bildschirmauflösung

Durch drücken der [Verbinden]-Schaltfläche, sollte dann in diesem Fall nachfolgender Dialog erscheinen:

Microsoft™ Remote Desktop Client - Verbindung - Zertifikatshinweis

:!: HINWEIS - Dieser Hinweis erscheint, da hier das Standard-Zertifikat von xrdp zur Verwendung kommt und dieses nicht vom Microsoft™ Remote Desktop Client als Vertrauenswürdig anerkannt wird.

Zu diesem Zeitunkt der Installation kann hier die [Ja]-Schaltfläche gedrückt werden, wonach dann nachfolgender Bildschirm erscheinen sollte: 
Microsoft™ Remote Desktop Client - Verbindung - Login- Eigene Bildschirmauflösung

Hier wird unter

Feld Wert Beschreibung
username klaus Der Benutzername des Benutzer, unter dessen die Anmeldung erfolgen soll eingetragen.
password ★★★ Das Passwort des Benutzer, unter dessen die Anmeldung erfolgen soll eingetragen.

Durch drücken der [OK]-Schaltfläche wird die Verbindung dann Aufgebaut.