Linux mit VNC-Login

Für einige Anwendungsgebiete kann es sehr nützlich sein, sich mit einer grafischen Oberfläche auf einem Linux-System einzuloggen. Das X-Protokoll bietet dafür sogar direkten Support, allerdings unterstützt z.B. Windows kein X. VNC wiederum läuft mit minimaler Installation wirklich plattformunabhängig. Hier daher eine Anleitung, um sich grafisch an einem System mit dem GDM (Gnome Display Manager) anzumelden.

Zielvorstellung

Ein Benutzer kann mittels einem beliebigen VNC-Client ein anderes Linux-System verwenden. Die Anmeldung geschieht wie im lokalen Fall per GDM, es ist also ein Linux-Benutzer erforderlich. Verschlüsselung der Verbindung geschieht nicht.

Vorgehensweise

1. XDMCP aktivieren

In der /etc/X11/gdm/gdm.conf muss

[xdmcp]
Enable=true

gesetzt werden. Dies kann auch grafisch über Systemeinstellungen - Anmeldebildschirm geschen.

Das XDMCP-Protokoll (X Display Manager Control Protocol) ist das eigentliche netzwerktransparente X-Protokoll, so dass man sich eben auch an anderen Rechnern per X einloggen kann. Allerdings braucht man in der Firewall des Zielrechners nicht die X-Ports freischalten, da der VNC-Server ja auf dem Zielrechner läuft.

2. neues Protokoll definieren

Damit der xinetd nicht meckert, muss folgende Zeile in die /etc/services aufgenommen werden.

vnc             5900/tcp                        # VNC server

3a. xinetd Konfiguration

Unter Fedora Core 4 wird der xinetd standardmäßig nicht mit installiert und muss daher (z.B. per yum) noch hinzugefügt werden.

3b. xinetd Konfiguration

Damit der VNC-Server auch gestartet wird, bietet sich eine Konfiguration über den xinetd an. Dazu die Datei /etc/xinetd.d/vncserver mit folgendem Inhalt anlegen:

service vnc
{
    protocol = tcp
    socket_type = stream
    wait = no
    user = nobody
    server = /usr/bin/Xvnc
    server_args = -inetd -query localhost -once -geometry 1024x768 -depth 16 SecurityTypes=None
    # only_from = XXX.XXX.XXX.XXX 127.0.0.1
    port = 5900
}

Der geometry-Parameter kann natürlich beliebig geändert werden. Durch securitytypes=none wird keinerlei VNC-Authentifizierung durchgeführt, da GDM dies macht.

4. xinetd und GDM neu starten

Damit auch alle Änderungen wirksam werden, müssen xinetd und GDM neu gestartet werden. Ein init 3, init 5 sollte das eigentlich tun, ev. hilft auch ein Neustart. xinetd-Fehler stehen im allgemeinen Syslog. Der Zielrechner muss auch standardmäßig in den grafischen Login booten (Eintrag id:5:initdefault: in /etc/inittab).

5. VNC in der Firewall freischalten

Sollte eine Firewall (besser: ein Paketfilter) aktiviert sein, muss beim Zielrechner VNC erlaubt sein, was ich mitttels system-config-securitylevel mache ("Andere Ports: 5900:tcp") und sonst halt händisch erledigt werden muss.

6. Zugriff auf lokale Geräte für VNC-Benutzer (optional)

Standardmäßig haben Benutzer unter Linux keinen Zugriff auf diverse Geräte (z.B. USB-Scanner, Brenner etc.). Unter Fedora/CentOS gibt es aber das Modul pam_console, das nach während der Passwortüberprüfung aufgerufen wird und die Rechte so setzt, dass ein physisch anwesender Benutzer die lokalen Geräte benutzen kann. Dabei wird zwischen lokalen Anmeldungen (Konsole, lokaler GDM) und entfernten Anmeldungen (z.B. SSH) unterschieden.

Glücklicherweise kann man pam_console so konfigurieren, dass auch Anmeldungen über VNC als "lokal" angesehen werden. Dies hat zur Folge, dass ein Benutzer z.B. Sounds abspielen, CDs brennen oder auch Bilder von einer USB-Digitalkamera herunterladen kann.

/etc/security/console.handlers

console consoledevs tty[0-9][0-9]* vc/[0-9][0-9]* :[0-9]\.[0-9] :[0-9] workstation:[0-9]

/etc/security/console.perms

<console>=tty[0-9][0-9]* vc/[0-9][0-9]* :[0-9]\.[0-9] :[0-9] workstation:[0-9]

workstation ist dabei der Hostname des Rechners, auf dem der VNC-Server läuft. Außerdem muss noch dann noch die Datei "hostname:displaynummer" (z.B. "workstation:1") im Verzeichnis /dev mit dem Eigentümer root existieren.

Bei Fedora Core gibt es noch das Problem, dass das /dev-Verzeichnis durch udev bei jedem Neustart neu erzeugt wird, so dass auch die entspr. Dateien neu angelegt werden müssen. Bevor pam_console aber das /dev-Verzeichnis konsultiert, prüft es erst das aktuelle Arbeitsverzeichnis, doch ich weiß nicht genau, welches das ist.

Für die Fehlersuche ist es nützlich, pam_console in den debug-Modus zu schalten. Dies geschieht für VNC/GDM-Logins in der /etc/pam.d/gdm und für SSH-Logins in der /etc/pam.d/login mit folgendem Eintrag

session    optional     pam_console.so debug

Ob ein Benutzer durch pam_console erweiterte Rechte bekommen hat, sieht man daran, ob die Dateien /var/run/console/console.lock (Inhalt ist der Benutzername) und /var/run/console/<benutzername> existieren.

Allerdings sollte bei VNC-Logins beachtet werden, dass nur der zuerst angemeldete erste Benutzer die erweiterten Rechte bekommt (und nach dessen Abmeldung derjenige, der sich als nächstes anmeldet).

Offene Probleme

  • Ein Benutzer kann den Zielrechner nicht per VNC ausschalten. Dies ist im GDM Quelltext so angelegt und müsste erst entsprechend geändert werden.
  • Wenn man aus Versehen den VNC-Viewer beendet, werden alle noch offenen Programme geschlossen, man kann die X-Session nicht später wieder fortsetzen. Hier gab es ein Prototyp-Projekt von Redhat-Mitarbeitern, das aber AFAIK nicht weiter geführt wurde.
  • Wenn man mit VNC eingeloggt ist, kann man auch nach erfolgreicher Eingabe des Root-Passworts keine Systemkonfigurations-Programme starten, weil diese sich nicht mit localhost.localdomain verbinden können.
  • Die Datei im /dev-Verzeichnis muss ständig neu angelegt werden.

Hinweise

Natürlich ist diese Anleitung nicht alleine auf meinem Mist gewachsen - im Internet gibt es viele Seiten, die ähnliche Konfigurationen beschreiben oder Hinweise in eine Richtung geben. Nachdem aber bei mir vieles nicht richtig funktioniert hat, habe ich hier meine persönliche Anleitung zusammengestellt.