IServ-Linux-Client per LTSP an festplattenlose Rechner ausliefern

In diesem Blog-Artikel werde ich erläutern, wie man einen zuvor in VirtualBox über die IServ-Softwareverteilung installierten Linux-Client über einen LTSP an festplattenlose Clients ausliefert, sodass man in einem PC-Raum dann nur noch das VirtualBox-Image pflegen muss und mit den Clients keinerlei Aufwand mehr hat.

Dieser Artikel setzt voraus, dass ein LTSP mit zwei Netzwerkkarten, so wie in diesem Beitrag beschrieben, vorhanden ist.

Prinzipielle Netzwerktopologie mit einem LTSP und einem IServ-Schulserver

Diese LTSP-Installation muss man nun verändern, damit man das in VirtualBox installierte IServ-Client-Image verwenden kann. Die LTSP-Standardinstallation geht davon aus, dass die Nutzer auf dem LTSP-Server vorhanden sind und dass deren user homes über sshfs vom Server auf die Clients eingebunden werden. Das ist bei uns nicht der Fall, da die user homes auf dem IServ liegen. Aus diesem Grund muss diese Funktion des LTSP-Servers (pamltsp) deaktiviert werden. Dieses geschieht, indem man folgende leere Datei anlegt (die Ordner client und init müssen dabei erst noch manuell mit mkdir angelegt werden) und danach ltsp initrd aufruft (beides als root).

nano /etc/ltsp/client/init/54-pam.sh
ltsp initrd

Jetzt muss noch der Export der user homes über sshfs deaktiviert werden:

ltsp nfs -h1

Jetzt ist der Server vorbereitet, um unser IServ-Linux-Image auszuliefern. Es ist an der Zeit, in VirtualBox ein solches zu erstellen. Dabei ist wichtig, dass man als Festplattentyp VMDK mit fester Größe (10 GB reichen) wählt. Zudem muss man in den Netzwerkeinstellungen auswählen, dass eine Netzwerkbrücke verwendet werden soll. Die dort angezeigte MAC-Adresse kann man dann in die IServ-Geräteverwaltung eintragen und dort auswählen, dass auf dem Client Ubuntu installiert werden soll. Beim Start der virtuellen Maschine muss dann F12 gedrückt werden, um auswählen zu können, dass diese über das Netzwerk booten soll. Hat man das gemacht, so startet automatisch die Installation des Linux-Clients.

Nach der erfolgreichen Installation des Clients in VirtualBox müssen wir diesen nun noch etwas bearbeiten, damit wir ihn über unseren LTSP ausliefern können. Wenn der Client nun von einem festplattenlosen Rechner vom LTSP gestartet wird, gibt der LTSP dem Client einen neuen Hostnamen, der auf der IP-Adresse basiert, den der festplattenlose Rechner vom LTSP bekommt. Nun muss dieser Rechner beim Hochfahren mit dem jeweiligen Hostnamen der IServ-Domäne beitreten, andernfalls ist er nicht nutzbar und man kann sich nicht anmelden. Diesen Domänenbeitritt beim Hochfahren habe ich über eine systemd service unit mit dem Namen „join.service“ realisiert (als root ausführen):

nano /etc/systemd/system/join.service
[Unit]
Description=Join Domain
After=network-online.target winbind.service

[Service]
Type=simple
ExecStart=/usr/local/bin/join-domain.sh

[Install]
WantedBy=multi-user.target

Korrekte Berechtigungen setzen:

chmod 755 /etc/systemd/system/join.service

Dann muss die Unit aktiviert werden:

systemctl enable join.service 

Jetzt muss das eigentliche Skript angelegt werden, was den Domänenbeitritt bewerkstelligt:

nano /usr/local/bin/join-domain.sh
#!/bin/sh
echo -n 'passwd' | net rpc join -U administrator

Dieses Skript enthält das Passwort eines IServ-Domänen-Administrators im Klartext, was natürlich unschön ist. Leider habe ich noch keine andere Möglichkeit gefunden, um diesen Domänenbeitritt anders zu bewerkstelligen. „administrator“ ist hier durch den Benutzernamen eines IServ-Domänen-Administrators zu ersetzen. Da dieses Skript das Passwort des Domänen-Administrators enthält, ist es um so wichtiger, die Berechtigungen so zu setzen, dass nur root dieses Skript lesen kann:

chmod 700 /usr/local/bin/join-domain.sh

Normale Nutzer können das Skript nicht lesen oder ausführen. Ferner ist es nur im VirtualBox-Client-Image vorhanden, was auf dem Server liegt. Ein Angriffsszenario, bei dem beispielsweise Linux im Single User Mode gestartet wird, ist auch nicht möglich, da die Clients keine Festplatten haben.

Jetzt ist die virtuelle Maschine fertig vorbereitet und sie kann heruntergefahren und auf den LTSP kopiert werden (z. B. per scp). Nach dem Kopieren der Datei „TestClient5-flat.vmdk“ auf den LTSP muss man folgende Befehle ausführen:

ln -s "/home/user/TestClient5-flat.vmdk" /srv/ltsp/TestClient5.img
ltsp image TestClient5
ltsp ipxe
ltsp initrd

Wenn man jetzt einen Client, der mit der internen Netzwerkkarte des LTSP verbunden ist, über pxe-Boot startet, sollte man „TestClient5“ im pxe-Menü auswählen und den Client starten können. Jetzt hat man einen normalen IServ-Linux-Client, der per pxe-Boot über den LTSP ausgeliefert wird. Damit gehört das umständliche Installieren und Aktualisieren aller Clients der Vergangenheit an, da nur noch das VirtualBox-Image gepflegt werden muss. Nach jedem Update des Image muss dieses wieder auf den LTSP kopiert und „ltsp image TestClient5“ ausgeführt werden.