Bezpieczeństwo GRUB-a. cd. BootloaderMając bezpośredni dostęp do powłoki GRUB, możemy bez problemu zmienić w systemie hasło konta root bez znajomości dotychczasowego.
Poniżej ciąg dalszy materiału opublikowanego z Linux+ który znajdziecie TU. Wystarczy modyfikacja parametrów przekazywanych do jądra (dodanie init=/bin/sh na końcu linijki kernel). Poza tym polecenie cat tejże powłoki nie respektuje ustawionych w systemie plików uprawnień i pokaże bez szemrania dowolnej osobie np. /etc/passwd czy /etc/shadow.
ZABEZPIECZENIE Należałoby więc program rozruchowy zabezpieczyć. GRUB daje możliwość ustawienia własnego hasła, co pozwala na zarezerwowanie opcji interaktywnych wyłącznie dla administratora. Robimy z hasła skrót (hash) md5: <<LISTING lang=C++ posx=11;0l posy=b fit=W grow=H>> Listing 6. Hasła skrótu (hash) md5 # grub grub> md5crypt Password: *********** Encrypted: $1$mVk4b1$1ocssU8DMrqa.Fqh3lwZX0 grub> quit Otrzymany skrót wstawiamy do sekcji globalnej (gdzieś na początek) pliku menu.lst: password --md5 $1$mVk4b1$1ocssU8DMrqa.Fqh3lwZX0 <</LISTING>> Dodatkowo hasło możemy sprawdzać także przed uruchomieniem określonego wpisu. W tym przykładzie Linux będzie dostępny tylko dla zaufanej osoby: <<LISTING lang=C++ posx=12;0l posy=t fit=W grow=H>> Listing 7. Wprowadzenie drugiego hasła default 1 timeout 3 password --md5 $1$mVk4b1$1ocssU8DMrqa.Fqh3lwZX0 title Linux lock # (ta linijka wymusza podanie hasła przed uruchomieniem wpisu; powinna być # zawsze zaraz za title) root (hd0,0) kernel /vmlinuz ro title Windows rootnoverify (hd0,1) makeactive chainloader +1 <</LISTING>>
SPLASHIMAGE GRUB zamiast standardowego menu pozwala na wyświetlenie tzw. splashimage, czyli obrazka w rozdzielczości 640x480 w 14 kolorach. Sprawdźmy, czy nasza wersja posiada obsługę splashimage: Pomysł przeszukiwania stage2 zaczerpnięty ze skryptu Luisa Rodrigueza. # grep -iaq splashimage /boot/grub/stage2 && echo OK Powinno wyświetlić się OK. Zwykłą grafikę jpg można przekonwertować do wymaganej postaci łatwo dzięki ImageMagick: $ convert obrazek.jpg -resize 640x480 -colors 14 obrazek.xpm Sposób ten może jednak dawać niezadowalające rezultaty (szczególnie, jeżeli chodzi o kolory). Wtedy zaleca się użycie programu gimp (menu Obraz->tryb->indeksowany, opcja wygenerowana optymalna paleta, ustawić kolory na 14, dithering kolorów i dithering przezroczystości wyłączone). Teraz kompresujemy programem gzip i umieszczamy we właściwym katalogu: $ gzip obrazek.xpm # cp obrazek.xpm.gz /boot/grub/ Dodajemy odpowiedni wpis do menu.lst (sekcja globalna): splashimage=(hd0,0)/grub/obrazek.xpm.gz Mamy do dyspozycji jeszcze dwie dodatkowe opcje: ustawienie koloru napisów (foreground) i cienia (background).
TRYB INTERAKTYWNY Większość opisanych słów kluczowych pliku konfiguracyjnego może być zastosowana w trybie interaktywnym GRUB-a. Standardowo po załadowaniu programu rozruchowego wyświetla się menu (chyba, że zostało schowane opcją hiddenmenu lub wystąpił błąd). Dowolny klawisz przerwie odliczanie czasu przed uruchomieniem domyślnego wpisu (opcja timeout). Strzałkami góra-dół wskazujemy kolejne wpisy, naciśnięcie enter powoduje uruchomienie, klawiszem 'e' przejdziemy do trybu edycji. W trybie tym możemy poprawić ustawienia zdefiniowane w pliku menu.lst. Pełną interaktywność uzyskujemy naciskając 'c'. Posługując się znanymi już opcjami uruchamiamy jądro: <<LISTING lang=C++ posx=14;0l posy=b fit=W grow=H>> Listing 8. Uruchamianie jądra grub> root (hd0,0) Filesystem type is ext2fs, partition type 0x83 grub> kernel /vmlinuz root=/dev/hda1 ro [Linux-bzImage, setup=0x1400, size=0x10a952] grub> initrd /initrd.img [Linux-initrd @ 0xbac2000, 0x41e000 bytes] grub> boot <</LISTING>>
BŁĘDY Co robić, gdy system przestał się uruchamiać? Posiadacze GRUB-a są często w lepszej sytuacji – gdyż bywa, że sam program rozruchowy ładuje się prawidłowo; z jego poziomu zaś możemy sterować uruchomieniem systemu operacyjnego. Najlepiej jednak zawsze posiadać dyskietkę rozruchową (uruchomieniową) z GRUB-em, wykonaną w opisany wcześniej sposób. W sytuacjach awaryjnych zaoszczędzi nam nerwów. Błędy zgłaszane przez GRUB możemy podzielić na trzy grupy – błędy stage1, stage1.5 oraz stage2. Po ukazaniu się błędu stage1 pozostaje nam tylko jedno – Ctrl+Alt+Del. Program rozruchowy nie załadował najbardziej podstawowej składowej. Sprawdzamy, czy problem nie jest natury sprzętowej (odpowiednio podłączone taśmy dysków, dobre ustawienia w BIOS-ie) i restarujemy. Jeżeli nie pomoże, to musimy użyć dyskietki ratunkowej lub płyty live-cd. Komunikaty błędów tego etapu: Hard Disk Error – podczas wczytywania Stage1.5 lub Stage2 nie powiodła się próba pobrania podstawowych informacji o dysku – wielkości i geometrii; Floppy Disk Error – błąd określenia wielkości i geometrii dyskietki, także podczas odczytu Stage1.5 lub Stage2; Read Error – błąd odczytu Stage1.5 lub Stage2; Geom Error – błąd geometrii – oznacza, że Stage1.5 lub Stage2 leży poza obszarem dysku, z którego może czytać bezpośrednio BIOS; rozwiązaniem może być np. ustawienie LBA w BIOS-ie lub przeniesienie partycji /boot na początek dysku. Lista błędów Stage1.5 i Stage2 jest wspólna. Tutaj sytuacja wygląda odrobinę lepiej, gdyż mamy bardziej szczegółowe informacje o przyczynie błędu. Czasem jest możliwa dalsza praca GRUB-a. Komunikaty i ich znaczenie: - Filename must be either an absolute filename or blocklist – podana nazwa pliku zawiera błąd składniowy; - Bad file or directory type – zamiast regularnego pliku wskazaliśmy katalog, link symboliczny, nazwany potok, itp.; - Bad or corrupt data while decompessing file – błąd podczas dekompresji pliku, prawdopodobnie jest uszkodzony; - Bad or incomptabile header in compressed file – błąd w nagłówku skompresowanego pliku; plik uszkodzony lub nieobsługiwany format kompresji; - Partition table invalid or corrupt – błąd integralności tablicy partycji; - Mismatched or corrupt version stage1/stage2 – wyłącznie podczas procesu instalacji, informuje o nieodpowiednich obrazach stage1 i stage2; w rzeczywistości nie jest w stanie stwierdzić uszkodzenia, lecz co najwyżej niezgodność wersji; - Loading below 1MB is not supported – najniższy adres w jądrze jest poniżej granicy 1MB; - Kernel must be loaded before booting – zanim polecisz uruchomić sekwencję rozruchową (komenda boot) musisz wskazać jądro (komenda kernel); - Unkown boot failure – podczas próby rozruchu (boot) wystąpił błąd o nieznanej przyczynie; - Unsupported Multiboot features requested – pojawia się, gdy nagłówek Multiboot wczytywanego jądra wymaga pewnych rozwiązań, których GRUB jeszcze nie obsługuje; - Unrecognized device string – błąd składni w nazwie urządzenia; - Invalid device requested – składnia nazwy urządzenia w porządku, jednak wystąpił inny błąd, np. urządzenie nie istnieje; - Invalid or unsupported executable format – podany plik (polecenie kernel) jest w nieobsługiwanym formacie; powinien być typu Multiboot lub być jądrem Linux zImage, Linux bzImge, FreeBSD lub NetBSD; - Filesystem comptability error, can't read whole file – GRUB implementuje niektóre systemy plików tak, że występuje ograniczenie wielkości pliku; właśnie próbujesz odczytać z takiego systemu plik większy niż ograniczenie; - File not found – najczęstszy wśród początkujących błąd – określone urządzenie i partycja są poprawne, jednak plik nie istnieje; najczęściej zła nazwa po kernel, initrd lub złe ścieżki, ewentualnie źle wskazana partycja, do której ścieżki się odnoszą (polecenie root); - Inconsistent filesystem structure – struktura systemu plików okazuje się inna, niż się spodziewano – zwykle oznacza uszkodzenie danego systemu plików; - Cannot mount selected partition – wskazana partycja istnieje, lecz GRUB nie potrafi obsłużyć znajdującego się na niej systemu plików – także częsty błąd, zwykle oznacza źle wskazaną partycję główną (polecenie root i rootnoverify); do partycji z np. NTFS zamiast root warto używać rootnoverify; - Selected cylinder exceeds maximum supported by BIOS – adres liniowy odczytywanego bloku wypada poza obszarem obsługiwanym przez BIOS; zwykle pomaga utworzenie partycji /boot na początku dysku, a przynajmniej poniżej jego ósmego gigabajta; - Linux kernel must be loaded before initrd – użyto komendy initrd przed wskazaniem jądra za pomocą polecenia kernel; - Multiboot kernel must be loaded before modules – użyto komendy modules przed wczytaniem jądra Multiboot; - Selected disk does not exist – podano nazwę urządzenia, jego części (np. partycji) lub pliku, która odnosi się do urządzenia w danej chwili nierozpoznawalnego przez BIOS (np. urządzenie fizycznie nie istnieje); - No such partition – podana nazwa odnosi się do nieistniejącej na określonym dysku partycji; - Error while parsing number – GRUB spodziewał się liczby, dostał inne dane; - Attempt to acces block outside partition – liniowy adres odnosi się do bloku, który wypada poza partycją – możliwe przyczyny to uszkodzenie systemu plików lub błąd w implementacji tego systemu w GRUB-ie; - Disk read error – błąd odczytu z dysku; - Too many symbolic links – obecnie obsługiwanych jest pięć głębokości zapętlenia w linkach symbolicznych; została przekroczona ta liczba; - Unrecognized command – podana komenda nie istnieje, przyczyną może być np. literówka w pliku konfiguracyjnym; - Selected item cannot fit into memory – dane nie mieszczą się w pamięci (np. plik jądra, initrd); - Disk write error – błąd zapisu na dysku, występuje właściwie wyłącznie podczas instalacji GRUB-a (poleceniem setup, install) lub uaktywnienia partycji (makeactive); - Invalid argument – komenda wymaga innego argumentu, niż podano; - File is not sector aligned – plik wskazany przez zapis blokowy (np. w poleceniu install) nie jest w jednym kawałku; jeżeli używasz systemu plików reiserfs powinieneś montować go z opcją notail (mount -o notail); - Must be authenticated – nieuprawniony dostęp do zablokowanego (opcją lock) wpisu; musisz podać poprawne hasło; - Serial device not configured – występuje podczas próby zmiany terminala na szeregowy przed inicjalizacją urządzenia szeregowego; - No spare sectors on the disk – brak wolnej przestrzeni na dysku; np. stage1.5 jest domyślnie zapisywany w nieużywanych standardowo sektorach bezpośrednio za MBR, jednak w egzotycznych sytuacjach może się zdarzyć, że ten obszar jest przez coś wykorzystywany.
PODSUMOWANIE GRUB posiada jeszcze więcej możliwości, np. uruchamianie komputera przez sieć, czy wykorzystanie terminala szeregowego. Wszystkie są wzorowo udokumentowane. Nawet jeżeli jesteśmy zadowoleni z obecnego systemu, warto zapoznać się z tym rozbudowanym programem rozruchowym. Poświęcony czas na naukę konsoli GRUB-a zaprocentuje w sytuacjach awaryjnych. Wówczas poradzimy sobie dalece łatwiej, niż użytkownicy LILO, a dzięki splashimage, nasze menu wyboru systemów będzie bardziej reprezentacyjne i o wiele ładniejsze. --- Autor: Adam Becmer
|