So gelingt die Systemrettung

Hilfe! Das System läuft nicht mehr! Ursachen dafür gibt es viele: Der Bootloader will nicht mehr. Das Filesystem verweigert den Dienst, es startet fehlerhaft oder nur teilweise auf. Und vieles mehr. Wie weiter? Der Systemrettungs-Tipp von Fachbereichsleiter & Trainer Michi Zaugg zeigt einen Weg auf.

Autor Michi Zaugg
Datum 21.04.2015
Lesezeit 12 Minuten

Hilfe! Das System läuft nicht mehr! Ursachen dafür gibt es viele: Der Bootloader will nicht mehr. Das Filesystem verweigert den Dienst, es startet fehlerhaft oder nur teilweise auf. In der Hitze des Gefechts hat man das Post-it mit dem Root-Passwort verlegt. Das Administrator-Kennwort von diesem merkwürdigen Fenster-OS will nicht mehr … Wie weiter? Der Systemrettungs-Tipp von Fachbereichsleiter & Trainer Michi Zaugg zeigt einen Weg auf.

Systemrettung mit «Boardmitteln»

Je nachdem, wo genau das Problem liegt, kann mit den «Linux-Boardmitteln» sehr gut ausgeholfen werden. Das heisst, ich brauche 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 man Konsolen-Zugriff hat. Ebenfalls bedingt es, dass der Grub keinen Passwortschutz konfiguriert hat (es sei denn, ich kenne das Passwort). Ohne dieses kann der Systemstart, so wie er konfiguriert ist, nicht beinflusst werden.

Single User Mode

Der sogenante Single-User-Modus ist ein spezieller Runlevel (Zustand, in dem das System startet), bei dem «nur» der Root-User existiert. Bei den meisten Distributionen kann in diesem Runlevel gestartet werden, ohne dass man das Root-Passwort kennt. Deshalb kann sich der Single-User-Modus gut eignen, um das vergessene Passwort neu zu setzen.

Wie kommt man in den Single User Mode?

Wenn beim Systemstart der Bootloader erscheint (normalerweise Grub), kann mit e für Edit die entsprechende Startkonfiguration bearbeitet werden. Der Runlevel wird als Kernel-Argument mitgegeben, d.h. er wird auf 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 kann nun gestartet werden (siehe auch die Hilfe unten am Bildschirm). Falls Grub2 im Einsatz ist, kann es sein, dass der Bootloader während des Startvorgangs nicht erscheint; wenn während des Startprozesses die Shift-Taste gedrückt gehalten wird, erscheint er. Diese Änderung 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) kann mit init 3 (Server-Modus) oder init 5 (Workstation bzw. mit grafischer Oberfläche) normal gestartet oder mit init 6 ein Neustart eingeleitet werden.

init=/bin/sh

Es gibt jedoch Distributionen, die im Single-User-Modus dennoch das Root-Passwort verlangen. Dies kann eine Sicherheit sein, wenn physischer Zugriff auf diese Maschine möglich sein könnte. Als Ausweg für dieses Dilemma kann anstelle des Single-User-Modus dem Init mitgeteilt werden, 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; wir befinden uns in keinem richtigen «Runlevel». Ausser der Root-Partition sind keine weiteren eingebunden. Dies stört aber nur, wenn man mehrere Partitionen angelegt hat 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 kann entweder das ro entfernt oder wenn man dies vergessen hat, mittels

mount -o remount,rw /

die Root-Partition zum Schreiben eingebunden werden. Nachdem man auf dies Weise gestartet hat, kann man alle Änderungen vornehmen – man ist ja root. Allenfalls sollte dies beachtet werden, 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 sollte man 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 sollte es korrigiert bzw. auf disabled gestellt werden.

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 man diese Rettungsdistribution verwenden möchte, muss man erst einmal das Image herunterladen (siehe obenstehender 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 der Stick angeschlossen wurde,

dmesg

eingeben. Dort findet man 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

CD brennen

Wenn auf einer Linux-Maschine ein Laufwerk zum Brennen von Medien vorhanden ist, kann man entweder direkt über die Kommandozeile eine CD anfertigen oder über ein grafisches Tool. Sehr umfangreich ist k3b; es ist sehr leicht zu bedienen und bietet alles, was ein Brenn-Programm können muss. Alternativ kann direkt in der Kommandozeile gebrannt werden:

cdrecord systemrescue....iso

cdrecord (Wenn noch nicht installiert: apt-get install dvd+rw-tools bzw. yum install cdrecord) ist das Brennprogramm für die Konsole.

Verwendung

Beim Starten muss darauf geachtet werden, ob man ein 32- oder 64bit-System retten will. Je nachdem muss man 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 Standard-Prozedere 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 man es mit einer Rescue-CD machen könnte.

Mounten

Nach dem Start der Live-CD müssen zuerst die Partitionen von der Harddisk montiert werden. 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 /usrPartitionen 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 man nicht mehr genau weiss, wo welche Partitionen montiert wurden, kann erst mal nur die «Root-Partition» eingebunden und die fstab (hier /mnt/root/etc/fstab) angesehen werden. Ein fdisk -l kann auch helfen; dort sieht man 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 Neusetzen 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 soviel 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-Passswort» auf der Harddisk neu gesetzt, nicht auf dem Live-System.

Demontieren

Nach den Rettungsarbeiten verlässt man die Chroot-Umgebung mit exit oder logout und demontiert die Filesysteme:

sync
umount /mnt/root/sys
umount /mnt/root/dev
umount /mnt/root/proc
umount /mnt/root/usr
umount /mnt/root/boot
umount /mnt/root

Falls beim Demontieren die Meldung «target is busy» erscheint, sind wir (bzw. eine andere Shell/ Fenster/Prozess) noch auf den montierten Partitionen drauf. cd / beispielsweise sollte das Problem lösen.

Windows-Passwort neu setzen

Wenn wir schon beim Thema Passwörter zurücksetzen sind: Selbstverständlich kann man 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 wird das Rescue-System gestartet (das funktioniert übrigens z.B. auch mit einer UbuntuLive-CD. Dort muss aber das chntpw-Packet noch installiert werden mittels aptget install chntpw). Dannach muss die Windows-Partition eingebunden werden:

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. Dannach 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.

Andere

Für eine Systemrettung kann eigentlich jedes beliebige Live-System verwendet werden. 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 vorinstallieren Tools bereit und eignen sich daher gut. Knoppix, aber auch die Distributoren-Rettungssysteme (meist gleich auf den Installationsmedien auswählbar) sind gute Kandidaten. Heute muss einzig darauf geachtet werden, dass man die korrekte Architektur verwendet, sprich jene, die auf der Festplatte installiert wurde.

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 Betriebssystemem.. It’s kool Linux…


Über den Autor

Michi Zaugg

Michi Zaugg ist Fachbereichsleiter Linux und Unix bei Digicomp. Er arbeitet seit 12 Jahren in der Informatikbranche. Als Netzwerk- und Sicherheitsadministrator leitete er ein Netzwerkteam und studiert derzeit berufsbegleitend Informatik an der Hochschule Rapperswil (Informatik Ing. FH.). Zudem verfügt er über die LPI-Zertifizierung.