Niedawno dowiedziałem się, że jeśli edytuję GRUB przed uruchomieniem i dodam, rw init=/bin/bash
to skończę z rootem.
Będąc w stanie, że chcę zrozumieć wszystko, chciałbym wiedzieć, dlaczego tak się dzieje. To znaczy, czy to błąd? czy to jest funkcja? czy jest to po to, aby pomóc administratorom naprawić rzeczy, ponieważ działa to tylko wtedy, gdy masz fizyczny dostęp do komputera?
Czy jest dostarczany przez GRUBa czy faktyczne jądro?
Odpowiedzi:
Jest to funkcja służąca do konserwacji systemu: pozwala administratorowi systemu odzyskać system z pomieszanych plików inicjujących lub zmienić zapomniane hasło.
Ten post na liście mailingowej Red Hat wyjaśnia kilka rzeczy:
Zatem niczego nie wykorzystujesz, po prostu używasz standardowej funkcji jądra.
Poza tym, jak zauważono w komentarzu,
rw
flaga jest oddzielna odinit=
, po prostu mówi systemowi, aby zamontował główny system plików jako odczyt-zapis (abyś mógł np. Edytować źle skonfigurowany plik lub zmienić hasło).źródło
rw
jest całkowicie oddzielny odinit=
. Pierwszy z nich mówi po prostu kernelowi, aby zamontował główny system plików do odczytu i zapisu.Twój system ma mechanizmy uruchamiania i debugowania (takie jak parametr init) i prawdopodobnie ma mechanizmy bezpieczeństwa, aby powstrzymać niechcianych użytkowników przed skorzystaniem z nich. To są funkcje, a nie błędy.
Program rozruchowy jest odpowiedzialny za uruchomienie systemu operacyjnego. Bezpieczeństwo systemu operacyjnego oczywiście nie ma wtedy zastosowania. Możesz po prostu załadować inne jądro, initrd, root fs lub ustawić różne opcje (np. Ścieżkę init). Jeśli chcesz powstrzymać użytkowników przed zrobieniem tego, musisz to zrobić przy bootloaderze.
Twój system (prawdopodobnie komputer PC, więc BIOS) ładuje program ładujący, a więc oczywiście zabezpieczenia programu ładującego nie mają do niego zastosowania. Jeśli chcesz powstrzymać użytkowników przed uruchomieniem systemu BIOS z USB lub podobnego, musisz to zrobić na tym poziomie.
Twój system może być gdzieś na biurku. Jeśli chcesz uniemożliwić użytkownikom otwieranie komputera przenośnego i zamianę dysku twardego na jeden z nich lub usunięcie napędu w celu zamontowania go na komputerze, musisz to zrobić na poziomie fizycznym. I to nie powstrzyma ich przed podniesieniem całego biurka i odjechaniem w ich furgonetce ...
Taki jest sposób bezpieczeństwa. Słonie na całej długości.
źródło
Po uruchomieniu komputer uruchamia program o nazwie „init”, zwykle znajdujący się w
/bin/init
lub/sbin/init
. Ten program jest odpowiedzialny za uruchomienie całego systemu i stworzenie użytecznego środowiska.Podanie
init=/bin/bash
informuje jądro, aby/bin/bash
zamiast tego uruchomiło się (co jest powłoką). Podanierw
informuje jądro, aby uruchomiło się z dyskiem twardym w trybie odczytu-zapisu zamiast w trybie tylko do odczytu. Tradycyjnie jądro uruchamia się z dyskiem w trybie tylko do odczytu, a później proces sprawdza integralność dysku przed przejściem do odczytu i zapisu.źródło
Złożone razem z kernel.org :
źródło
Jest to cecha jądra: pozwala „wywołującemu”, tj. Programowi ładującemu, dużą elastyczność. Grub zapewnia ci możliwość skorzystania z tej elastyczności podczas uruchamiania, ale także umożliwia ograniczenie tego rodzaju manipulacji . Ma to szczególne znaczenie w przypadkach, w których nieautoryzowani użytkownicy mogą wziąć udział w procesie rozruchu, ale w innym przypadku odmawiają dostępu do samego dysku twardego.
źródło
init=
może przyjąć dowolny plik wykonywalnyinit=
może pobierać dowolny plik wykonywalny, w tym skrypty powłoki .Tutaj na przykład pokazuję, jak utworzyć dowolną skompilowaną minimalną kompilację C
init
: Jak stworzyć niestandardową dystrybucję Linuksa, która uruchamia tylko jeden program i nic więcej?Dlaczego więc nie akceptuje
/bin/bash
wszystkich rzeczy, które są zwykłym plikiem wykonywalnym i mogą być przydatne? :-)Następnie powinieneś również spróbować zrozumieć, jakie będą kompromisy ze swoim regularnym,
init
takim jak systemd lub Busybox ”Zasadniczo za pomocą raw
/bin/bash
:init
istniałKontrola zadań może zostać przywrócona przy inicjalizacji Busybox i innych podobnych inicjacjach z wiodącym
-
winittab
:Bardziej normalne
inittab
wpisy, które używają loginu i kontynuują odradzanie powłok, jeśli wykonasz Ctrl + D to:które używają
getty
pliku wykonywalnego, ale DO ZROBIENIA: Nie byłem w stanie odrodzić ich sam bez Busyboxinit
: getty start z linii poleceń?Możesz użyć tego ustawienia, aby się z nim bawić i dojść do powyższych wniosków.
źródło