VNC¶
Siehe auch
RustDesk
Alternative zu VNC-Server: GNOME Remote Desktop
VNC-Clients: Remmina, UltraVNC
VNC benötigt firewallseitig „Port-Nummer 5900/tcp plus Display-Nummer“. Um also Display 3 erreichen zu können, muss der Port 5903/tcp freigegeben werden. Wer in firewalld den Service-Name vnc-server verwendet, gibt automatisch die Ports 5900 bis 5903 frei.
VNC ist in seiner ungeschützten Standard-Form ein Klartext-Protokoll, kommt also ohne Sicherheitsmerkmale daher. Um die Kommunikation abzusichern und zu verschlüsseln, wird zum Verbindungsaufbau die -via-Option angegeben, damit der Netzwerkverkehr über SSH getunnelt wird. Alternativ unterstützen moderne Server und Clients TLS-basierte Sicherheitstypen (TLSNone, TLSPlain, X509Vnc etc., siehe unten).
VNC wird pro Benutzer und Display-Nummer konfiguriert (Red Hat empfiehlt, als erste User-Display-Nummer die :2 zu verwenden).
Ab RHEL 8 werden Konfigurationsangaben über /etc/tigervnc/vncserver.users sowie die Template-Unit vncserver@.service gepflegt.
Begriffe¶
- Display-Nummer
VNC-Sessions werden mit einer Display-Nummer adressiert, analog zu X11-Displays.
:0entspricht typisch der physikalischen Konsole,:1ist für Server-Sessions reserviert (bei Red Hat),:2und höher für VNC-User. Der TCP-Port ist5900 + Display-Nummer.- RFB
Remote Framebuffer Protocol - das eigentliche Protokoll, das VNC implementiert (RFC 6143). Aktuelle stabile Version ist 3.8. Im Kern werden Pixel-Updates (nicht Anwendungen) zwischen Server und Client ausgetauscht.
- Security Type
VNC kennt mehrere Aushandlungs-Varianten für Authentifizierung und Verschlüsselung, konfiguriert über
SecurityTypes:None: keine Auth, kein TLS (für SSH-getunnelte Setups gedacht).VncAuth: klassisches Passwort-Verfahren. Die Key-Ableitung basiert auf DES und beschränkt das Passwort auf 8 Zeichen (längere werden stillschweigend abgeschnitten). Keine Verschlüsselung.TLSNone/TLSVnc/TLSPlain: TLS-verschlüsselter Kanal ohne Zertifikatsprüfung; Authentifizierung über VncAuth oder PAM.X509None/X509Vnc/X509Plain: wie oben, aber mit X.509-Zertifikatsprüfung - die empfohlene Variante für produktive Nutzung.
- Xvnc
Der eigentliche VNC-Server-Prozess von TigerVNC: eine X11-Server-Implementierung ohne sichtbaren Bildschirm, die den gerenderten Framebuffer über das RFB-Protokoll ausliefert.
VNC-Server¶
TigerVNC¶
TigerVNC erlaubt Desktop Sharing sowie die Fernsteuerung eines Computers, ähnlich wie Anydesk, TeamViewer oder RDP. Ein vncviewer verbindet sich dabei zum vncserver und steuert diesen. Der vncserver-Desktop läuft unter Xvnc und erlaubt separate, parallele Benutzer-Sessions. In der Standard-Konfiguration wird nicht der bestehende Bildschirm geteilt, sondern eine neue VNC-Session.
Achtung
TigerVNC funktioniert nur unter X11. Auf Systemen mit Wayland-Session (RHEL 9+ Default) läuft der per vncserver@:x gestartete Dienst in einer eigenen X11-Session - er teilt nicht den aktiven Wayland-Desktop des Users. Für das Teilen der laufenden Sitzung muss GNOME Remote Desktop (RDP-basiert) verwendet werden.
Installation:
dnf --assumeyes install tigervnc-server
RHEL 8 und neuer¶
Quelle für RHEL 9 | Quelle für RHEL 8
Konfiguration der Benutzer. Diese werden in der Datei /etc/tigervnc/vncserver.users verwaltet. Im Beispiel für „linus“:
:2=linus
Der Benutzer „linus“ benötigt noch ein Passwort für den VNC-Service, welches unter keinen Umständen mit seinem Benutzerpasswort übereinstimmen sollte. Das Passwort wird durch die VNC-Tools im Klartext auf der Server-Maschine abgelegt.
su - linus
vncpasswd
# Password:
# Verify:
Weitere Einstellungen können in folgenden Dateien (mit absteigender Priorität) gemacht werden:
/etc/tigervnc/vncserver-config-mandatory$HOME/.config/tigervnc/config(TigerVNC >= 1.14) bzw.$HOME/.vnc/config(TigerVNC < 1.14)/etc/tigervnc/vncserver-config-defaults
So passt man beispielsweise die Auflösung eines Benutzers an:
geometry=1280x1024
Start des VNC-Servers wieder als root beispielsweise auf Display 2 (Port 5902/tcp auf der Firewall öffnen):
systemctl enable --now vncserver@:2
Die Systemd-Unit anpassen, damit die jeweilige VNC-Session nach einem Logout des Users neu startet:
[Service]
Restart=on-success
RestartSec=10
systemctl daemon-reload
Falls aus Sicherheitsgründen nur Verbindungen über SSH-Tunneling erlaubt werden sollen, unterbindet man den Zugriff auf die VNC-Ports (5900-59xx) und fügt die SSH-Keys des Benutzers hinzu.
Debian und Ubuntu¶
Debian und Ubuntu liefern tigervnc-standalone-server in den offiziellen Repos. Es gibt jedoch keine fertige Template-Unit wie unter RHEL - der Dienst wird pro User gestartet:
apt-get --yes install tigervnc-standalone-server
# user initial setup
vncpasswd
vncserver :2 -geometry 1280x1024 -localhost yes
Systemd-User-Units (~/.config/systemd/user/vncserver@.service) oder eine eigene, angepasste Systemunit halten den Dienst persistent.
PAM-Authentifizierung¶
Zur Authentifizierung via PAM (zum Beispiel für LDAP; Quelle) zunächst sicherstellen, dass ein vnc PAM existiert:
test -f /etc/pam.d/vnc || ln -s login /etc/pam.d/vnc
Folgende Zeilen zur jeweiligen VNC-Konfiguration der Benutzer hinzufügen:
SecurityTypes=TLSPlain
PlainUsers=linus
x11vnc¶
x11vnc unterscheidet sich fundamental von TigerVNC: statt einen eigenen virtuellen X-Server zu starten, exportiert es einen bereits laufenden X11-Display (typischerweise :0). Damit wird der aktuelle physikalische Bildschirm eines angemeldeten Users geteilt - was für Helpdesk-Zwecke passt, aber nicht für unabhängige, gleichzeitige Admin-Sessions.
dnf --assumeyes install x11vnc
x11vnc -ncache 10 -display :0 -geometry 1024x768 -rfbauth /home/user/.vnc/passwd
GNOME Remote Desktop¶
Unter RHEL 9 und neueren GNOME-Umgebungen empfiehlt Red Hat anstelle von VNC das native GNOME Remote Desktop (Paket gnome-remote-desktop). Es sprich RDP statt RFB, unterstützt Wayland-Sessions nativ und lässt sich via grdctl oder GNOME-Settings konfigurieren. Für das Teilen einer aktiv laufenden Wayland-Session ist das heute der vorgesehene Weg.
VNC-Viewer¶
TigerVNC¶
vncviewer lässt sich sowohl per GUI als auch von der Kommandozeile aus verwenden.
Installation:
dnf --assumeyes install tigervnc
Zu einem VNC-Server auf Display 3 verbinden:
vncviewer $VNCSERVER:3
Wie oben, aber über einen SSH-Tunnel verbinden (Auf- und Abbau des SSH-Tunnels passiert automatisch):
vncviewer -via $USER@$VNCSERVER:3
Best Practices¶
Nie ohne Transport-Sicherung exponieren:
SecurityTypes=NoneoderVncAuthnur hinter SSH-Tunnel oder TLS-VPN betreiben. Für direkte Verbindung mindestensX509Vncmit eigenem Zertifikat.Passwort-Begrenzung von VncAuth beachten: 8 Zeichen sind tatsächlich das harte Limit aus dem Key-Schedule von DES. Kein Grund, trotzdem ein kurzes Wort zu nehmen - aber weit jenseits von „modernen Passwort-Richtlinien“.
Display ``:0`` und ``:1`` freilassen: Display
:0(Port 5900) entspricht konventionell der physikalischen Konsole,:1ist bei Red Hat für System-Dienste reserviert. Admin- und User-Sessions konsequent ab:2anlegen, damit sich parallel laufende Tools (x11vnc, Xorg-Eigentum, automatische Reservierungen) nicht in die Quere kommen.Sessions nicht hinter unbekanntem Login-Manager lassen: Xvnc-Sessions bleiben stehen, bis sie explizit beendet werden. Ein
systemctl stop vncserver@:2am Feierabend (oder per systemd-Timer) vermeidet endlose, vergessene Sessions.Monitoring: mit Icinga/Nagios ein einfacher TCP-Check auf 590x reicht zur Verfügbarkeitsprüfung. Für die Session selbst ist kein standardmässiger Health-Check vorgesehen.
Unterschiede RHEL / Debian¶
Paketname: RHEL
tigervnc-server(inkl.vncserver@.service-Template), Debian/Ubuntutigervnc-standalone-server(ohne mitgeliefertes Systemd-Template).User-Mapping: RHEL verwaltet User/Display in
/etc/tigervnc/vncserver.users; Debian überlässt dies dem Admin.PAM: Beide Seiten haben einen PAM-Stack
/etc/pam.d/vnc(bei Debian ist er oft nicht vorinstalliert, Link aufloginanlegen).firewalld vs. ufw:
firewalldkennt den Servicevnc-server(Ports 5900-5903). Unter Ubuntu/Debian mitufwwerden die Ports manuell geöffnet (ufw allow 5902/tcp).