Systemrettung mit Linux: ein praktischer Leitfaden
Hilfe, das System läuft nicht mehr! Ursachen gibt es viele: ein defekter Bootloader, ein fehlerhaftes Filesystem oder ein vergessenes Root-Passwort. Doch was tun, wenn nichts mehr geht? In diesem Artikel zeigt Digicomp-Trainer Michi Zaugg praxisnahe Lösungen zur Systemrettung – von der Fehlerdiagnose bis zur Wiederherstellung mit Linux-Boardmitteln und der SystemrescueCD. Erfahre, wie du kritische Probleme beheben und Ihr System wieder zum Laufen bringen kannst.
Ein Systemausfall kann unerwartet auftreten – doch mit den richtigen Techniken kannst du Schlimmeres verhindern. Je nachdem, wo genau das Problem liegt, kannst du mit den «Linux-Boardmitteln» sehr gut weiterhelfen. Das heisst, du brauchst keine zusätzliche Software, CD oder Stick, um das System zu retten. Die Bedingung dafür ist jedoch, dass das System über einen funktionierenden Bootloader verfügt (in der Regel Grub bzw. Grub2) und du Konsolen-Zugriff hast. Ebenfalls setzt es voraus, dass der Grub keinen Passwortschutz konfiguriert hat (es sei denn, ich kenne das Passwort). Ohne dieses kannst du den Systemstart, so wie er konfiguriert ist, nicht beeinflussen.
Der Single User Mode
Der sogenannte Single-User-Modus ist ein spezieller Runlevel (Zustand, in dem das System startet), bei dem «nur» der Root-User existiert. Bei den meisten Distributionen kannst du in diesem Runlevel starten, ohne dass du das Root-Passwort kennst. Deshalb eignet sich der Single-User-Modus gut, um das vergessene Passwort neu zu setzen.
Wie kommt man in den Single User Mode?
Wenn beim Systemstart der Bootloader erscheint (normalerweise Grub), kannst du mit e für Edit die entsprechende Startkonfiguration bearbeiten. Der Runlevel wird als Kernel-Argument mitgegeben, d.h. er wird in der Zeile angefügt, in der der Linuxkernel erwähnt wird. In der Regel beginnt die Zeile mit kernel /vmlinuz …, dahinter wird nun das Wort «single» angefügt. Z.B.:
kernel /boot/vmlinuz-3.2.0-4-amd64 root=/dev/sda3 ro single
Mittels ESC und b wie boot kannst du nun starten (siehe auch die Hilfe unten am Bildschirm). Falls Grub2 im Einsatz ist, kann es sein, dass der Bootloader während des Startvorgangs nicht visuell erscheint; wenn du während des Startprozesses die Shift-Taste gedrückt hältst, erscheint er.
Diese Änderung (single) bleibt nicht im Grub gespeichert, d.h. sie wird nur für diesen Startvorgang benötigt. Das System startet nun, jedoch ohne Netzwerk und ohne Dienste; im Grossen und Ganzen werden nur die Partitionen montiert und eine Root-Shell zur Verfügung gestellt. Nach der «Systemrettung» (z.B. Neusetzen des Root-Passworts) kannst du mit init 3 (Server-Modus) oder init 5 (Workstation bzw. mit grafischer Oberfläche) normal starten oder mit init 6 einen Neustart einleiten, bzw. systemctl isolate multi-user bzw. graphical oder aber reboot.
init=/bin/sh
Es gibt Distributionen, die im Single-User-Modus das Root-Passwort verlangen. Das kann eine Sicherheitsmassnahme sein, wenn physischer Zugriff auf diese Maschine möglich sein könnte. Als Ausweg aus diesem Dilemma kannst du anstelle des Single-User-Modus dem Init-Daemon (bzw. systemd) mitteilen, dass er in keinen Runlevel startet, sondern lediglich eine Shell öffnen soll. D.h. es wird anstelle von single nun init=/bin/bash im Bootloader Grub geschrieben. Z.B.:
kernel /boot/vmlinuz-3.2.0-4-amd64 /dev/sda3 ro init=/bin/bash
Das «Problem» bei dieser Variante ist, dass nur unvollständig aufgestartet wird; du befindest dich in keinem richtigen «Runlevel». Ausser der Root-Partition sind keine weiteren eingebunden. Das stört jedoch nur, wenn du mehrere Partitionen angelegt hast und u.a. das /usr separiert wurde.
mount -a
Montiert allenfalls fehlende Partitionen. Bei diesem «Nicht-Runlevel» kommt hinzu, dass die Root-Partition nur read-only eingebunden wird, d.h. es kann nichts verändert werden. Um ein Root-Passwort neu zu setzen, wäre es aber praktisch, Änderungen speichern zu können. In der obenstehenden Boot-Zeile kannst du entweder das ro entfernen oder, wenn du dies vergessen hast, mittels
mount -o remount,rw /
die Root-Partition zum Schreiben eingebunden werden. Nachdem du auf diese Weise gestartet hast, kannst du alle Änderungen vornehmen – du bist ja root. Allenfalls solltest du dies beachten, wenn SELinux aktiviert ist. Dieses «Security-Enhanced-Linux»-System mag es nicht, dass in seiner «Abwesenheit» Änderungen am System vorgenommen wurden. D.h. SELinux kann bemerken, dass unsauber gestartet wurde und dies als Einbruchsversuch empfinden. Daher solltest du vor dem Neustart verifizieren, ob SELinux aktiviert ist:
grep SELINUX= /etc/selinux/config
Wenn da die Zeile
SELINUX=disabled
erscheint, sollte es keine Probleme beim Neustart geben. Ansonsten solltest du es korrigieren bzw. auf disabled stellen. Nach dem Neustarten kannst du den Wert wieder zurückstellen.
SystemrescueCD
SystemrescueCD ist eine Live-Linux-Distribution, die den Fokus auf Systemrettung legt. Sie bringt verschiedene Startkonfigurationen mit, u.a. 32 oder 64bit, mit oder ohne grafische Oberfläche. Da die Distribution auf Systemrettung ausgerichtet ist, unterstützt sie viele Hardwarekonfigurationen und Filesysteme und bringt eine ganze Menge Tools mit.
Vorbereitung
Wenn du diese Rettungsdistribution verwenden möchtest, musst du erst einmal das Image herunterladen (siehe obenstehenden Link).
Installation auf einem USB-Stick
Unter Linux: Nichts einfacher als das. Die CD wird per cp-Befehl auf den Stick kopiert (Achtung, allfällige Daten auf dem Stick werden gelöscht!!):
cp systemrescue-....iso /dev/sdb
Wobei /dev/sdb der USB-Stick sein sollte. Tipp: Wenn du den Stick angeschlossen hast,
dmesg
eingeben. Dort findest du die Kernel-Meldungen. Ganz am Schluss sollten dann auch Einträge eines Sticks zu finden sein, etwa so:
4323.163640 sd 3:0:0:0: Attached scsi generic sg1 type 0
4323.166486 sd 3:0:0:0: sdb 30375936 512-byte logical blocks: (15.5 GB/14.4 GiB)
4323.168022 sd 3:0:0:0: sdb Write Protect is off
4323.168028 sd 3:0:0:0: sdb Mode Sense: 2f 00 00 00
4323.169551 sd 3:0:0:0: sdb Write cache: disabled, read cache: enabled, doesn’t support DPO or FUA
4323.175825 sdb: sdb1 sdb2
4323.181795 sd 3:0:0:0: sdb Attached SCSI removable disk
4323.372388 ISO 9660 Extensions: Microsoft Joliet Level 3
4323.375347 ISO 9660 Extensions: RRIP_1991A
Verwendung
Beim Starten musst du darauf achten, ob du ein 32- oder 64bit-System retten willst. Je nachdem musst du die entsprechende Startkonfiguration auswählen. Das Systemrescue-Linux startet auf, fragt nach dem Tastaturlayout und stellt eine Shell zur Verfügung.
Root-Passwort neu setzen
Ein Standardprozedere ist das Neusetzen eines vergessenen Root-Passworts. Sicherlich ist es am einfachsten, dieses via Single-User-Modus zurückzusetzen (oder, falls dort nach einem Passwort gefragt wird, via init=/bin/bash). Dennoch hier ein kurzes Beispiel, wie du es mit einer Rescue-CD machen könntest.
Mounten
Nach dem Start der Live-CD musst du zuerst die Partitionen von der Harddisk montieren. Wir nehmen Folgendes an:
/dev/sda1 beinhaltet /boot
/dev/sda2 die / Partition
/dev/sda3 Swap (nicht relevant hier)
/dev/sda5 die /usr Partition
Falls es weitere Partitionen gibt (/home, /var, /opt und /tmp), können diese ebenfalls integriert werden. Für das Zurücksetzen eines Passworts sind jedoch nur die root- und allenfalls die /usr-Partitionen relevant.
Dann müssen wir einen Mounting-Point erstellen und anschliessend montieren (die «Root-Partition» beinhaltet dann die anderen «Mounting-Points»):
mkdir /mnt/root
mount /dev/sda2 /mnt/root
mount /dev/sda1 /mnt/root/boot
mount /dev/sda5 /mnt/root/usr
Falls du nicht mehr genau weisst, wo welche Partitionen gemountet wurden, kannst du erstmal nur die «Root-Partition» einbinden und die fstab (hier /mnt/root/etc/fstab) ansehen. Ein fdisk -l kann auch helfen; dort siehst du jedoch nur die Partitionen und keine Mount-Points. (Falls mit «Labels» gearbeitet wurde, kann dies z.B. mit tune2fs -l /dev/sda3 ausgelesen werden.)
Wenn z.B. der Bootloader neu installiert wird, sollten weitere Partitionen (Pseudo-Filesysteme) integriert werden (/proc, /sys und /dev). Beim Nesetzen des Root-Passworts ist dies aber nicht nötig.
mount -t proc proc /mnt/root/proc
mount -t sysfs sysfs /mnt/root/sys
mount --bind /dev /mnt/root/dev
Chrooten
Das System ist nun soweit. Mit chroot kann ich ein neues «Root-Verzeichnis» vorgeben, in unserem Fall wechseln wir in das System, das auf der montierten Harddisk installiert ist.
chroot /mnt/root /bin/bash
Was so viel bedeutet wie: Eine Shell wird in einer Umgebung mit /mnt/root als «Root-Verzeichnis» ausgeführt. Alle Kommandos, die ab jetzt abgesetzt werden, finden auf dem zu rettenden System statt. D.h. mit
passwd
wird das «Root-Passwort» auf der Harddisk neu gesetzt, nicht auf dem Live-System.
Demontieren
Nach den Rettungsarbeiten verlässt du die Chroot-Umgebung mit exit oder logout und demontierst die Filesysteme:
sync
umount /mnt/root/sys
umount /mnt/root/dev
umount /mnt/root/proc
umount /mnt/root/usr
umount /mnt/root/
Falls beim Demontieren die Meldung «target is busy» erscheint, bist du (bzw. eine andere Shell/Fenster/Prozess) noch auf den montierten Partitionen drauf. cd / beispielsweise sollte das Problem lösen.
Windows-Passwort neu setzen
Wenn du schon beim Thema Passwörter zurücksetzen bist: Selbstverständlich kannst du auch ein verlorenes Windows-Passwort mit einer Linux-Rettungs-CD neu setzen. Bei der Systemrescuecd ist ein Tool namens chntpw dabei. Damit können bis und mit Windows-8-/Windows-Server-2012-R2-Passwörter zurückgesetzt werden.
Vorgehensweise
Praktisch analog zu oben startest du das Rescue-System (das funktioniert übrigens z.B. auch mit einer Ubuntu-Live-CD. Dort muss aber das chntpw-Paket noch installiert werden mittels apt-get install chntpw). Danach musst du die Windows-Partition einbinden:
mkdir /mnt/windows
mount /dev/sda1 /mnt/windows
Angenommen, dass Windows auf der ersten Partition der ersten Festplatte zu finden ist. Mittels
cd /mnt/windows/Windows/System32/config
wird in das Verzeichnis gewechselt, in dem die SAM-Datei liegt. Danach kann chntpw verwendet werden:
chntpw -u Administrator SAM
In einem kleinen Text-Userinterface werden die Möglichkeiten wie «Passwort leer machen» oder «Neues Passwort setzen» aufgezeigt.
Alternative Systemretter
Für eine Systemrettung kannst du eigentlich jedes beliebige Live-System verwenden. Einige sind etwas praktikabler, weil sie schmaler und damit etwas schneller sind als andere (vor allem beim Aufstarten). Die meisten Live-CDs halten aber eine grosse Auswahl an vorinstallierten Tools bereit und eignen sich daher gut. Knoppix, aber auch die Distributoren-Rettungssysteme (meist gleich auf den Installationsmedien auswählbar) sind gute Kandidaten. Heute musst du einzig darauf achten, dass du die korrekte Architektur verwendest, sprich jene, die auf der Festplatte installiert wurde.
Noch ein kleiner Tipp – falls unter dem Rescuesystem KVM/libvirt zum Einsatz kommt und die Maus in der graphischen Oberfläche fast unbrauchbar ist, liegt es am fehlenden «EvTouch USB Graphical Tablet», dieses der VM zuweisen, und schon sieht es anders aus ..
Fazit
Auch wenn hier nur kurze Beispiele gemacht wurden, Live-Linux-Systeme gehören in den Sysadmin-Alltag und können viele Probleme beheben. Eine geniale Sache, bis hin zur Rettung von anderen Betriebssystemen. It’s kool Linux….