Technologieführer

LTSP Thinclient: DHCP, Windows-Freigaben und Kerberos-SSH

7 min read Systemadministration Aktualisiert 22 Oct 2025
LTSP: Thinclient, DHCP, Freigaben & Kerberos
LTSP: Thinclient, DHCP, Freigaben & Kerberos

Inhaltsübersicht

  • DHCP-Server-Einstellungen
  • Thinclient-Einrichtung und Theme-Verteilung
  • Windows-Freigaben beim Login automatisch mounten
  • Entfernen der Freigaben beim Logout mit pam_script
  • Passwortloses SSH mittels Kerberos
  • Probleme und Lösungen
  • Wichtige Hinweise, Sicherheit und Checkliste für Rollouts
  • Wann es nicht funktioniert und Alternativen
  • 1-Zeilen-Glossar
  • Zusammenfassung

DHCP-Server-Einstellungen

Folgende Einstellungen müssen Sie vornehmen, damit ein Thinclient per PXE von einem Thinserver booten kann:

default-lease-time            21600;
max-lease-time                21600;

option subnet-mask            255.255.255.0;
option broadcast-address      10.255.255.255;
option routers                10.0.0.1;
option domain-name-servers    10.0.0.10
option domain-name            "domain.internal";
option root-path              "/opt/ltsp/i386";

host thinclient1 {
        next-server             10.0.0.10;
        hardware ethernet       00:AA:BB:CC:DD:EE;
        fixed-address           10.0.0.100;
        filename                "ltsp/i386/pxelinux.0";
        option root-path        "10.0.0.10:/opt/ltsp/i386";
}

host thinclient2 {
        next-server             10.0.0.10;
        hardware ethernet       00:BB:CC:DD:EE:FF;
        fixed-address           10.0.0.101;
        filename                "ltsp/i386/pxelinux.0";
        option root-path        "10.0.0.10:/opt/ltsp/i386";
}

Wichtig: Passen Sie IP-Adressen, MAC-Adressen und Pfade an Ihre Umgebung an. Die Option root-path verweist auf das LTSP-Root-Dateisystem, das der Thinclient per NFS oder ähnlichem mounten wird.

Thinclient-Einrichtung

Um Thinclient-Benutzern ein einheitliches Erscheinungsbild zu geben, habe ich das XPGnome-Theme installiert. Das Theme können Sie von der jeweiligen Quelle herunterladen und wie folgt verteilen:

  • Theme und zugehörige Icons zentral installieren.
  • Startmenüs anpassen, falls nötig.
  • Zusätzliche Anwendungen wie Adobe Reader 9 oder Skype lokal installieren oder über Paketmanagement bereitstellen.

Ich hatte ein Problem, dass das Symbol “Abmelden” (Log Out) nicht angezeigt wurde. Lösung: Ein 48×48-Icon aus dem Internet heruntergeladen und mit GIMP auf 32×32, 24×24, 22×22 und 16×16 skaliert. Das Ergebnis wurde als system-log-out.png in die entsprechenden Icon-Ordner kopiert:

/usr/share/icons/GnomeXP/{icon size}/actions

Das Endergebnis sieht so aus:

Thinclient-Desktop mit angepasstem XPGnome-Theme

Hinweis zur Standardverteilung: Kopieren Sie aus dem Home-Verzeichnis des Benutzers, der das Theme installiert hat, die Ordner .config, .gconf, .icons, .local und .themes nach /etc/skel. Neue Benutzer erhalten so diese Standardeinstellungen. Wenn Sie Änderungen global verteilen möchten, wiederholen Sie den Kopiervorgang oder verwenden Sie ein Konfigurationsmanagement-Tool.

Windows-Freigaben beim Login mounten

Es gibt mehrere Wege, Windows-Freigaben beim Login unter Linux einzubinden (autofs, pam_mount, systemd-mount). In dieser Anleitung verwende ich eine Kombination aus Bash- und Perl-Skripten sowie Ubuntus “Startup Applications”, weil sie flexibel anpassbar ist.

Vorbereitung: Stellen Sie sicher, dass die NETLOGON-Freigabe des Domänencontrollers auf thinserver gemountet ist. Beispiel: Ein generischer Domain-Account namens “public” mit Passwort “password” darf nur das AD auflisten.

Erstellen Sie den Mountpunkt:

sudo mkdir /mnt/logon

Tragen Sie die NETLOGON-Freigabe in /etc/fstab ein:

//dc.domain.internal/netlogon      /mnt/logon           cifs   username=public,password=password 0  0

Mounten Sie die Einträge:

sudo mount -a

Konzept: Jeder Benutzer hat eine eigene Batch-Datei (.bat) im NETLOGON-Verzeichnis, z. B. jdoe.bat. Diese Datei listet die Netzlaufwerke, die der Benutzer benötigt. Ein Perl-Skript erzeugt daraus dynamisch im Home-Verzeichnis des Benutzers zwei Shell-Skripte: .mount.sh und .umount.sh. .mount.sh wird beim Login ausgeführt und mountet die Freigaben per CIFS mit Kerberos (sec=krb5). .umount.sh wird beim Logout ausgeführt und unmountet die Freigaben.

Beispiel einer Benutzer-Batch-Datei jdoe.bat:

@echo off
NET USE S: \\server\common
NET USE T: \\server\IT

Erstellen Sie das Skript win_share.sh unter /usr/local/bin/:

#!/bin/sh
# Check to see if .mount.sh and .umount.sh exist, if so delete them!

if [ -f /home/$USER/.mount.sh ]; then
   rm /home/$USER/.mount.sh
fi

if [ -f /home/$USER/.umount.sh ]; then
   rm /home/$USER/.umount.sh
fi

# Create the .mount.sh and .umount.sh scripts from users batch file

/usr/local/bin/mount.pl $USER

# Mount network shares when logging on.
/home/$USER/.mount.sh

Das Perl-Skript mount.pl in /usr/local/bin/ erzeugt die beiden Skripte basierend auf der Batch-Datei des Benutzers:

#!/usr/bin/perl
# Build dynamic ~user/.mount.sh based on logon.bat

$user = $ARGV[0];
$file = "/mnt/logonbat/$user.bat";  # <-- Change this from $user to the name of the batch script if you only use one.

die if ! $user;
die if ! -e $file;

open (PAM_CONF, ">/home/$user/.mount.sh");
open (LOGOFF, ">/home/$user/.umount.sh");

print PAM_CONF qq{#!/bin/sh
if [ ! -d /home/$user/Home ]; then
mkdir /home/$user/Home
fi
mount.cifs //server/$user /home/$user/Home -o username=$user,sec=krb5
};

print LOGOFF qq{#!/bin/sh
if [ "`cat /proc/mounts | grep /home/$user/Home | wc -l`" -ge "1" ]; then 
umount.cifs /home/$user/Home 
fi \n};

my(@arr)=`cat /mnt/logonbat/$user.bat`;
$mounts = parse_batfile(\@arr);
foreach $mount (@$mounts) {
  chomp($mount);
  ($server,$share) = $mount =~ /\\\\(.*)\\(.*)/;
  $share =~ tr/\cM//d;
  $mnt = $share;

  # skip AUDIT.  It's for PCs only
  next if $mnt =~ /AUDIT/;

  # skip personal shares.  
  next if lc("$mnt") eq lc("$user");
  next if ! $mnt;

  #strip dollar sign from mount point
  $mnt =~ s/\$\$//;

  # make sure mount point is unique
  $mnt .= "-$server"  if $seen{$mnt}++;

  # upshift first letter of mnt point
  $mnt =~ s/^(.) (.*)/\u$1$2/g;

#  print PAM_CONF "volume $user cifs $server $share  /home/$user/$mnt  - - -\n";
  print PAM_CONF qq{if [ ! -d /home/$user/$mnt ]; then
mkdir /home/$user/$mnt
fi
mount.cifs //$server/$mnt /home/$user/$mnt -o username=$user,sec=krb5 \n};

  print LOGOFF qq{if [ "`cat /proc/mounts | grep /home/$user/$mnt | wc -l`" -ge "1" ]; then 
umount.cifs /home/$user/$mnt 
fi \n};
}

close PAM_CONF;
close LOGOFF;
system ("chown $user:16777729 /home/$user/.mount.sh");   #  16777729 is my GID for "Domain Users"
system ("chown $user:16777729 /home/$user/.umount.sh");  #  16777729 is my GID for "Domain Users"
system ("chmod +x /home/$user/.mount.sh");
system ("chmod +x /home/$user/.umount.sh");

# All done

sub parse_batfile {
  my($file) = @_;
  my(@mounts);
  foreach $line (@$file) {
    (@val) = split / /,$line;
    if (uc($val[0]) eq "NET" && uc($val[1]) eq "USE") {
       push (@mounts,$val[3]);
    }
    if ($val[0] eq "CALL") {
      my($match) = $val[1]  =~ /\\\\.*\\NETLOGON\\(.*)/ ;
      if ($match) {
        chop($match);
        my(@arr)=`cat /mnt/logonbat/$match`;
        $mounts = parse_batfile(\@arr);
        unshift @mounts, @$mounts;
      }
    }
  }
  return \@mounts;
}

Beispielinhalt der generierten Datei .mount.sh für den Benutzer jdoe:

#!/bin/sh
if [ ! -d /home/jdoe/Home ]; then
mkdir /home/jdoe/Home
fi
mount.cifs //server/jdoe /home/jdoe/Home -o username=jdoe,sec=krb5
if [ ! -d /home/jdoe/common ]; then
mkdir /home/jdoe/common
fi
mount.cifs //server/common /home/jdoe/common -o username=jdoe,sec=krb5 
if [ ! -d /home/jdoe/IT ]; then
mkdir /home/jdoe/IT
fi
mount.cifs //server/IT /home/jdoe/IT -o username=jdoe,sec=krb5 

Um die automatische Ausführung beim Login zu starten, legen Sie im Menü “Einstellungen -> Autostart-Anwendungen” (Preferences/Startup Applications) einen neuen Eintrag an, der /usr/local/bin/win_share.sh ausführt.

Einstellungen für Autostart-Anwendungen

Entfernen der Freigaben beim Logout

Zum sauberen Entfernen der Freigaben beim Abmelden empfehle ich pam_script.so. Der Grund, warum pam_script nicht für das Login verwendet wurde: Module laufen als root, und die win_share.sh- sowie mount.pl-Skripte benötigen die Umgebungsvariable $USER.

Installieren Sie libpam-script (Paketname kann je nach Distribution abweichen):

sudo dpkg -i libpam-script_1.1.4-1_i386.deb

Beispiel einer automatisch erzeugten .umount.sh für jdoe:

#!/bin/sh
if [ "`cat /proc/mounts | grep /home/jdoe/Home | wc -l`" -ge "1" ]; then 
umount.cifs /home/jdoe/Home 
fi 
if [ "`cat /proc/mounts | grep /home/jdoe/common | wc -l`" -ge "1" ]; then 
umount.cifs /home/jdoe/common 
fi 
if [ "`cat /proc/mounts | grep /home/jdoe/IT | wc -l`" -ge "1" ]; then 
umount.cifs /home/jdoe/IT 
fi 

Erstellen Sie /usr/share/libpam-script/pam_script_ses_close mit folgendem Inhalt:

#!/bin/sh
# pam_script_ses_close script to remove windows shares

/home/$PAM_USER/.umount.sh 2>&1 >> /var/log/umount.log

Fügen Sie in /etc/pam.d/common-session die Zeile hinzu:

session     optional            pam_script.so

Testen Sie das Verhalten durch Ein- und Ausloggen und prüfen Sie /var/log/umount.log auf Fehler.

Passwortloses SSH mit Kerberos

Mit einem in die Domäne integrierten Kerberos können Sie SSH so konfigurieren, dass Benutzer sich ohne Passwort anmelden können. Voraussetzungen: Kerberos-Tickets auf Client und Server, und beide Systeme sind korrekt in der Domäne konfiguriert.

Auf dem Thinserver in /etc/ssh/sshd_config setzen:

# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UseDNS yes

Auf dem Workstation-Client in /etc/ssh/ssh_config setzen:

GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes

Testen mit:

ssh -v thinserver

Bei erfolgreicher Kerberos-Authentifizierung sehen Sie eine Debug-Meldung ähnlich:

*debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
debug1: Delegating credentials
debug1: Delegating credentials
debug1: Authentication succeeded (gssapi-with-mic).*

Wenn die Anmeldung nicht funktioniert, prüfen Sie /var/log/auth.log, klist auf dem Client (zeigt das Kerberos-Ticket), sowie DNS- und Uhrzeitsynchronisation (Kerberos ist zeitkritisch).

Probleme und Lösungen

Hier einige beobachtete Probleme und Lösungen, verkürzt zusammengefasst:

PROBLEM : LTSP-Client authentifiziert sich, loggt sich aber sofort aus SOLUTION: gconftool-2 –direct –config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory –type string –set /desktop/gnome/session/required_components/windowmanager metacity

PROBLEM : Kein VNC auf Thinclients SOLUTION: Siehe Bootpolish-Dokumentation zur Installation von X11VNC auf LTSP

PROBLEM : Login-Screen anpassen SOLUTION: Ubuntu/Edubuntu FAQ und Dokumentation zur Anpassung der Anzeige

PROBLEM : Root-Passwort auf Thinclient setzen SOLUTION: Edubuntu/Ubuntu-Dokumentation zur Benutzer- und Rootverwaltung

PROBLEM : Logout-Icon fehlt SOLUTION: Ubuntu-Foren: Symbol-Datei in passenden Größen anlegen und installieren

Wichtige Hinweise

Important: Stellen Sie sicher, dass Zeit (NTP) auf allen beteiligten Servern und Clients synchronisiert ist. Kerberos funktioniert nur korrekt, wenn Uhrzeiten nahe beieinander liegen.

Notes:

  • Verwenden Sie für produktive Umgebungen keine hartcodierten Passwörter in /etc/fstab. Nutzen Sie stattdessen credential-Dateien mit passenden Berechtigungen oder andere sichere Mechanismen.
  • Testen Sie Änderungen zuerst mit einem Pilot-Benutzer, bevor Sie global verteilen.

Sicherheit und Datenschutz

  • Kerberos reduziert Passwortübertragung im Netzwerk. Dennoch müssen Ticket-Management und Host-TGTs sicher sein.
  • CIFS-Mounts mit sec=krb5 erfordern korrekt konfigurierte Kerberos- und Samba/AD-Einstellungen.
  • Vermeiden Sie das Einbetten von Passwörtern in fstab. Nutzen Sie credential-Dateien (root-only lesbar) oder Kerberos-Authentifizierung.
  • Log-Dateien können sensitive Pfadinformationen enthalten. Beschränken Sie Zugriff und rotieren Sie Logs regelmäßig.
  • Prüfen Sie für Ihre Organisation die datenschutzrechtlichen Anforderungen (z. B. DSGVO) bevor Sie Benutzerdaten zentral bereitstellen.

Wann es nicht funktioniert (Gegenbeispiele)

  • Keine Kerberos-Tickets: Wenn Benutzer kein gültiges Kerberos-Ticket haben, schlägt der CIFS-Mount mit sec=krb5 fehl.
  • DNS-Fehler: SSH GSSAPI-Authentifizierung kann fehlschlagen, wenn DNS falsch konfiguriert ist (UseDNS beeinflusst Verhalten).
  • Nicht übereinstimmende UID/GID-Mapping-Probleme: Wenn Home-Verzeichnisse oder Dateirechte nicht korrekt gemappt sind, können Benutzer keine Dateien schreiben.
  • Alt: Wenn Sie ausschließlich Windows-Profile verwenden, sind manche LTSP-Mechanismen nicht optimal.

Alternativen und Erweiterungen

  • autofs/systemd.automount: Automatisches Mounten on-demand statt per Login-Skript.
  • pam_mount: PAM-Module, die Mounts direkt beim Session-Start durch PAM verwalten können (läuft als PAM-Modul; Unterschiede zur hier gezeigten Lösung sind Rechtekontext und Flexibilität).
  • sssd/winbind: Unterschiedliche Ansätze für Domänenintegration; sssd ist modern und bietet viele Features.
  • Konfigurationsmanagement: Ansible/Chef/Puppet für verteilte Änderungen an /etc/skel, SSH- und PAM-Konfiguration.

Checkliste für den Rollout

  • Zeit- und NTP-Synchronisation testen
  • DNS-Auflösung und Reverse-DNS auf Servern prüfen
  • Kerberos-Realm- und Keytab-Konfiguration überprüfen
  • CIFS/SMB-Server für sec=krb5 konfigurieren
  • Testbenutzer mit .bat in NETLOGON anlegen
  • Skripte (/usr/local/bin/*) auf Skriptrechte und Ownership prüfen
  • pam_script und PAM-Konfiguration testen
  • Autostart-Eintrag auf Thinclients anlegen
  • Pilotgruppe testen, Logs prüfen, Fehler beheben
  • Änderungen dokumentieren und Backup von /etc/skel erstellen

1-Zeilen-Glossar

  • LTSP: Linux Terminal Server Project — Thinclient-Server-Umgebung.
  • CIFS: Common Internet File System — Protokoll für Windows-Freigaben.
  • Kerberos: Netzwerk-Authentifizierungsprotokoll, verwendet Tickets.
  • PAM: Pluggable Authentication Modules — Authentifizierungs-Framework in Linux.
  • NETLOGON: Freigabe in Windows-Domänen für Logon-Skripte und Gruppenrichtlinien-Dateien.

Zusammenfassung

Diese Anleitung zeigt einen bewährten Weg, LTSP-Thinclients mit DHCP, verteilten Desktop-Einstellungen, automatischem Mounten von Windows-Freigaben und passwortlosem SSH via Kerberos zu betreiben. Die vorgestellte Kombination aus Bash- und Perl-Skripten eignet sich besonders, wenn Sie per-Benutzer-Batch-Dateien (NETLOGON) als Quellen nutzen. Für produktive Umgebungen sollten Sie Sicherheit (keine Klartextpasswörter), Zeit-Synchronisation und Pilot-Tests priorisieren.

Wichtige nächste Schritte: Pilot-Deployment, Monitoring der Logs, Dokumentation der Veränderungen und Evaluation alternativer Automount-Mechanismen wie autofs oder pam_mount, falls der Betrieb das erfordert.

Autor
Redaktion

Ähnliche Materialien

Podman auf Debian 11 installieren und nutzen
DevOps

Podman auf Debian 11 installieren und nutzen

Apt-Pinning: Kurze Einführung für Debian
Systemadministration

Apt-Pinning: Kurze Einführung für Debian

FSR 4 in jedem Spiel mit OptiScaler
Grafikkarten

FSR 4 in jedem Spiel mit OptiScaler

DansGuardian + Squid (NTLM) auf Debian Etch installieren
Netzwerk

DansGuardian + Squid (NTLM) auf Debian Etch installieren

App-Installationsfehler auf SD-Karte (Error -18) beheben
Android

App-Installationsfehler auf SD-Karte (Error -18) beheben

Netzwerkordner mit KNetAttach in KDE
Linux Netzwerk

Netzwerkordner mit KNetAttach in KDE