SystemRescueCD over SSH

Czym ratować system?

SystemRescueCd - to mini dystrybucja LiveCD bazująca na Gentoo Linux(jądro Linux 2.6.29, serwer X.org w wersji 1.5.3 i odchudzone Xfce), przeznaczona głównie do odzyskiwania danych z uszkodzonych systemów typu Linux, oraz ich „naprawy”.

Oprogramowanie wydawane jest w dwóch wersjach: dla komputerów PC (x86) oraz PowerPC (PPC), cała dystrybucja obsługuje kodowanie znaków UTF-8 (wszystkie programy zostały skompilowane z USE=”unicode”), pozwala na zdalne użytkowanie przy pomocy VNC-server, obsługuje rozszerzone opcje bootowania pozwalające na zaawansowaną konfigurację sieci.

Dystrybucja standardowo obsługuje wiele systemów plików: ext2, ext3, ReiserFS, XFS, JFS, NTFS (ntfs3g), VFAT, btrfs, ISO9660

SystemRescueCD zawiera oprogramowanie niezbędne do naprawy systemu, nadpisania mbr, lub przywrócenia danych najczęściej wykorzystywane pewnie będą narzędzia:

  • GParted - program z GUI do edycji partycji

  • GNU-Parted - konsolowy program do edycji partycji

  • Sfdisk - odmiana fdiska, pozwala zapisać i odczytać obraz tablicy partycji do pliku

  • TestDisk - odszukuje zaginione (usunięte itp.) partycje. Obsługuje ReiserFS, NTFS, FAT32, ext2, ext3

  • Partimage - pozwala na zapisanie i wczytanie obrazu całej partycji

  • FSArchiver - pozwala duplikować partycje (NTFS także)

  • Midnight Commander - menedżer plików

  • Clam AntiVirus - program antywirusowy

  • NTFS-3G - sterownik do obsługi systemu plików NTFS (odczyt i zapis)

  • rsync - narzędzie pozwalające przesyłać pliki przez sieć

  • MemTest+ - program do testowania pamięci

Niedawno została wydana nowa wersja oznaczona numerkiem 1.20, całość jest uruchamiana z dysku CD (obraz ISO zajmuje ~230MB) lub można przygotować PenDrive bootowalny.

Opcje bootowania

SystemRescueCD podczas uruchamiania pozwala na dodanie dodatkowych opcji:

  • docache - Załaduje cały system do pamięci RAM - dzięki temu, można wyjąć płytę z napędu (znacznie przyspiesza działanie)

  • rootpass - Opcja ta pozwala zdefiniować hasło administratora systemu - użyteczne w połączeniu z ssh (czyli coś co nas interesuje - demon SSH jest uruchamiany na starcie systemu)

  • dodhcp - Opcja wymusza próbę pobrania adresu dla karty sieciowej z serwera DHCP

  • ethx=x.x.x.x - Pozwala ustawić adres IP statycznie

  • gateway=x.x.x.x - Pozwala ustawić adres IP serwera DNS

Więcej opcji rozruchowych można podejrzeć naciskając przycisk «F2». Użycie parametrów bootowania wygląda następująco:

rescuecd rootpass=password docache

Personalizowanie SystemRescueCD

Jeżeli mamy serwer w zdalnej lokacji, a nie mamy do niego dostępu poprzez KVM, a o dostępie fizycznym możemy tylko pomarzyć (ale mamy tam kogoś kto potrafi włożyć i wyjąć płytkę z napędu CD, ew. zmienić kolejność bootowania) możemy spróbować utworzyć spersonalizowaną wersję SystemRescueCD pozwalającą nam na uruchomienie systemu w taki sposób, żeby można było na niego się zalogować po SSH.

Na zrobienie własnego obrazu płyty SystemRescueCD są tak naprawdę dwa sposoby, jeden prosty i jeden trudny:

  • prosty - Wykorzystać samo LiveCD SystemRescue jakąś maszynę wirtualną (Sun xVM VirtualBox) i narzędzia na dostępne na płycie

  • skomplikowany - Wykorzystać obecny system operacyjny i rozpakować obraz ze squashfs - w moim przypadku się to nie udało, bo w Debianie jest po prostu stara paczka (gałąź stabilna) squashfs-tools i nie mogłem rozpakować obrazu z systemem plików

Ale wracając do samego sedna postu, by uczynić SystemRescueCD bootowalne bez dodatkowej interwencji i od razu ze startującym serwerem ssh i znanym hasłem, mamy znów dwie opcje.

  1. Korzystamy z kluczy SSH

  2. Wpisujemy hasło roota na stałe i je pamiętamy (rozwiązanie prostsze, lecz mniej bezpieczne)

Jeśli masz mało czasu

Zobacz na końcu artykułu jak to zrobić w wersji «quick and dirty»

Personalizacja

Ja do całego procesu użyłem VirtualBoxa i zestawi skryptów dostępnych na livecd. Ustawienia maszyny wirtualnej to:

  • Dysk twardy: 3GB

  • Pamięć: 1GB

Po uruchomieniu systemu należy wykonać:

  1. Partycjonowanie dysku:fdisk /dev/sda i nacisnąć:

    • n - utwórz nową partycję

    • p - typu primary

    • 1 - nr partycji

    • [enter] [enter] - ustawienia początku partycji i końca (domyślne)

  2. Utworzenie systemu plików na dysku:

mkfs.xfs -f /dev/sda1
  1. A później:

% mount /dev/sda1 /mnt/custom
% sysresccd-custom extract

Skoro mamy już rozpakowany system root, można zająć się częścią właściwą:

Montowanie, chrootowanie i proc

# mount -o bind /proc /mnt/custom/customcd/files/proc
# chroot /mnt/custom/ /bin/bash

Generowanie kluczy serwera i wyłączenie ich generowania na starcie

Uwaga: Tak naprawdę ten krok jest opcjonalny, służy tylko przyspieszeniu startu systemu.

$ ssh-keygen -t rsa1 -b 1024 -f /mnt/custom/customcd/files/etc/ssh/ssh_host_key
$ ssh-keygen -d -f /mnt/custom/customcd/files/etc/ssh/ssh_host_dsa_key
$ ssh-keygen -t rsa -f /mnt/custom/customcd/files/etc/ssh/ssh_host_rsa_key

Dodanie kluczy ssh

mkdir /root/.ssh
ssh-keygen -t dsa
cp /root/.ssh/id_dsa.pub /root/.ssh/authorized_keys

Jeśli klucze są umieszczone w katalogu /root/.ssh to wszystko ;).

Podpowiedź

Znacznie lepiej by było stworzyć dedykowanego użytkownika do logowania się po ssh, a rootowi zabronić tego - no ale to niech każdy sobie sam zrobi.

Spakowanie obrazu squashfs i iso

Należy wyjść się z chroota i odmontować niepotrzebne systemy plików: umount /mnt/custom/customcd/files/proc oraz rozpocząć tworzenie pliku z głównym systemem plików (squashfs) - to potrwa chwilkę

/usr/sbin/sysresccd-custom squashfs

Po zakończeniu zostanie utworzony plik /mnt/custom/customcd/isoroot/sysrcd.dat.

Dodawanie dodatkowych narzędzi, skryptów, itp.

W tej chwili można dodać do płyty dodatkowe narzędzia i skrypty, wystarczy je skopiować do katalogu /mnt/custom/customcd/isoroot/. Tylko nie należy przesadzić (płyta ma tylko 700MB pojemności - du -sh /mnt/custom/customcd/).

Dodatkowe informacje jak np automatyczne uruchamianie narzędzi użytkownika są dostępne na stronie projektu.

Ja ze swojej strony polecam skopiowanie kluczy ssh do głównego katalogu nośnika:

cp -a /mnt/custom/customcd/files/root/.ssh /mnt/custom/customcd/isoroot/ssh-keys

Wybór klawiatury

By system starował bez interwencji użytkownika trzeba wybrać domyślną klawiaturę poleceniem:

sysresccd-custom setkmap pl

Generowanie obrazu iso

/usr/sbin/sysresccd-custom isogen mojeRescue

Wersja «quick and dirty»

Edycja opcji bootowania

Obraz squashfs rozpakowujemy tak samo tylko nie wykonujemy chrootowania i generacji kluczy. Zamiast generowania całego obrazu kopiujemy go z obecnej płyty:

cp /mnt/cdrom/sysrescd.* /mnt/custom/customcd/isoroot/

A następnie edytujemy plik /mnt/custom/customcd/isoroot/isolinux/isolinux.cfg Umieszczając w nim taką dodatkową treść (zmieniając pierwszy wpis):

default rescuecd
append inintrd=initram.igz rootpass=password setkeymap=pl

Następnie należy wygenerować obraz iso: /usr/sbin/sysresccd-custom isogen my_srcd.

Inne sposoby stworzenia SystemRescueCd z dostępem ssh

  • Wykorzystanie właściwości autorun płyty SystemRescuCD - czyli napisanie skryptu podmieniającego klucze ssh (nie powinno być trudne)

  • Zmiana hasła roota w chrootowanym systemie oraz wyłączenie możliwości jego generowania na starcie - robienie rzeczy na około

Inne narzędzia pomagające odtworzyć system

Jeśli okazało się, że awaria dotyczy dysku twardego, polecam skorzystanie z narzędzia Recovery Is Possible dostępnego tutaj - narzędzie to zawiera chyba większość programów umożliwiających odtworzenie zawartości dysku po jego uszkodzeniu.

Comments

comments powered by Disqus