21 May 2009

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
  3. A później:
    % mount /dev/sda1 /mnt/custom
    % sysresccd-custom extract
  4. Spowodują one rozpakowanie obrazu squashfs (trochę to trwa) oraz przygotowanie struktury do utworzenia płyty cd. Jeśli coś jest niejasne zajrzyj na: stronę dokumentacji dotyczącej personalizacji SystemRescueCD.
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

Uwaga: Tutaj znajduje się dokłaadniejszy opis generacji kluczy ssh - polecam przeczytać.
$ 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 ;). Hint: 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.

No comments:

Post a Comment