Przygotowanie środowiska chroot do pracy

Spis treści

Linuxy mają tę właściwość, że bardzo ciężko jest stracić do któregoś z nich dostęp, nawet w przypadku kompletnego zawału systemu. Jeżeli dysponujemy jakimś alternatywnym środowiskiem w postaci płytki live cd/dvd czy pendrive albo też posiadamy gdzieś zainstalowanego innego linuxa, to istnieje spore prawdopodobieństwo, że uda się nam reanimować nasz główny system. Wszystko za sprawą narzędzia jakim jest chroot , przy którego to pomocy możemy zmienić główny katalog systemu plików ( / ) dla wykonywanych procesów bez potrzeby przechodzenia całej skomplikowanej procedury uruchamiania systemu operacyjnego. Jeśli tylko uda nam się uzyskać dostęp do shella, to nie ma takiej możliwości by system nie stanął na nogi.

Katalogi niezbędne wewnątrz chroot

Sam chroot na nic nam się zda bez przygotowania odpowiednich katalogów i chodzi tutaj o te, bez których system jest praktycznie bezużyteczny. W ich skład wchodzą te poniższe:

  • /proc/ -- tu kernel przechowuje głównie informacje o uruchomionych procesach oraz parametrach pracy systemu operacyjnego, dotyczące procesora, pamięci, czy przerwań systemowych.
  • /sys/ -- mniej więcej to samo co u poprzednika za wyjątkiem procesów. Generalnie rzecz biorąc, jest to nowsza i bardziej strukturalna wersja katalogu /proc/ , w której znajdują się informacje na temat urządzeń, sterowników, magistral i ich wzajemnych powiązań.
  • /dev/ -- tutaj są zlokalizowane pliki wszystkich wykrytych urządzeń w systemie, do których procesy mają dostęp i z którymi mogą się porozumiewać.
  • /dev/pts/ -- ten katalog zawiera jedynie pliki urządzeń pseudo terminali, tak by procesy były w stanie przesyłać dane na wyjście i pobierać dane wejściowe w tym samym czasie bez nieporozumień i by było wiadomo, np. które dane wyjściowe należą do jakiego programu.

Wszystkie powyższe katalogi są generowane automatycznie podczas każdego startu systemu, a ich zawartość jest przechowywana w pamięci RAM. Jeśli teraz podnosimy system za pomocą chroot, to w tym środowisku nie ma obecnych tych wszystkich plików, a one są potrzebne do prawidłowej pracy systemu, dlatego też musimy je pierw zamontować zanim zaczniemy operować wewnątrz takiego systemu.

Przykład zastosowania chroot

Zakładając, że nasz padnięty system znajduje się na partycji sdb2 , montujemy ją na samym początku, np. w katalogu /mnt/ :

# mount /dev/sdb2 /mnt/

Następnie przy pomocy narzędzia mount z opcją bind odpowiadającą za możliwość zamontowania jednego zasobu w wielu lokalizacjach, montujemy poszczególne pozycje wewnątrz struktury katalogów w folderze /mnt/ :

# mount -o bind /proc /mnt/proc
# mount -o bind /sys /mnt/sys
# mount -o bind /dev /mnt/dev
# mount -o bind /dev/pts /mnt/dev/pts

Dobrze jest także przekopiować plik resolv.conf ale to tylko na wypadek gdybyśmy nie mieli połączenia z internetem wewnątrz środowiska chroot:

# cp /etc/resolv.conf /mnt/etc/resolv.conf

Po tych działaniach możemy w końcu przejść do swojego głównego systemu:

# chroot /mnt/ /bin/bash

Parametr /bin/bash jest opcjonalny, używany jedynie w przypadku ustawienia konkretnej powłoki systemowej. I to cały proces odzyskiwania kontroli nad systemem. Oczywiście pozostaje nam jeszcze jego naprawa ale teraz już powinno być z górki.

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.