LTSP Thinclient: DHCP, Windows-Freigaben und Kerberos-SSH
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:

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/logonTragen Sie die NETLOGON-Freigabe in /etc/fstab ein:
//dc.domain.internal/netlogon /mnt/logon cifs username=public,password=password 0 0Mounten Sie die Einträge:
sudo mount -aKonzept: 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\ITErstellen 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.shDas 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.

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.debBeispiel 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.logFügen Sie in /etc/pam.d/common-session die Zeile hinzu:
session optional pam_script.soTesten 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 yesAuf dem Workstation-Client in /etc/ssh/ssh_config setzen:
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yesTesten mit:
ssh -v thinserverBei 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.
Ähnliche Materialien
Podman auf Debian 11 installieren und nutzen
Apt-Pinning: Kurze Einführung für Debian
FSR 4 in jedem Spiel mit OptiScaler
DansGuardian + Squid (NTLM) auf Debian Etch installieren
App-Installationsfehler auf SD-Karte (Error -18) beheben