Jaki to ma wpływ na serwer, gdy zabijasz wszystkie procesy rootowania?

9

Byli inni zalogowani jako root, których chciałem wykopać.

Więc wydałem

pkill -KILL -u root

Potem zdałem sobie sprawę, że prawdopodobnie zabiłem wszystkie rodzaje procesów root.

Czy uszkodziłem mój system? Nie mogę teraz skontaktować się z SSH.

AKTUALIZACJA: Serwer WWW nadal działa. Ale nie mogę teraz połączyć się przez SSH. Nie mam pojęcia co zrobiłem.

Buttle Butkus
źródło
1
Prawie na pewno będziesz musiał go ponownie uruchomić. Jeśli możesz, wyślij mu sygnał wyłączenia ACPI zamiast po prostu wyciągając wtyczkę.
Skyhawk
1
Iain, IME to nie do końca prawda. Muszą zacząć od roota, aby połączyć się z uprzywilejowanymi portami, ale następnie rozdzielić całą gamę procesów należących do dowolnego skonfigurowanego użytkownika nieprywatnego, aby rozdzielić uprawnienia. Jednak w przypadku apache zazwyczaj na samym początku stoi jeden proces rootowania. Ale zgadzam się z tobą, że wszystkie procesy obsługujące rzeczywistą obsługę stron internetowych nie są własnością root.
MadHatter
5
Popełnianie błędów to najlepszy sposób na naukę . Proszę nie głosować po prostu dlatego, że ktoś popełnił poważny błąd. To pytanie jest kontrowersyjne, ale nie powinno być zamknięte. Zamiast tego wzywam cię do głębszego zapoznania się z myślą stojącą za pytaniem i wyjaśnienia: co się stanie, gdy zabiję wszystkie procesy rootowania? Dlaczego gospodarz wciąż żyje? Dlaczego SSHD nie może obsługiwać żądań, a serwer WWW może? Jak to możliwe, że serwer WWW w ogóle żyje? Nie uważamy, że mamy dobrą kanoniczną odpowiedź na tego rodzaju pytania. Odpowiedzi mogą dostarczyć cennych wyjaśnień na temat działania Uniksa.
Stefan Lasiewski
2
Dziękuję Stefanowi, że używałeś głowy i serca, a nie przymusowego klikania przycisku głosowania, tak jak wielu innych. Jeśli nikt nigdy nie zamieszcza pytań na temat swoich błędów na stronach stackexchange, w obawie przed odrzuceniem, ŻADNY z nich się nie nauczy. Pomagam ludziom z moim pytaniem i nie powinienem być za to karany.
Buttle Butkus
1
Głosowałem za tym pytaniem, ponieważ było dobre dla śmiechu, bez obrazy. To tak, jakby oglądać wideo kogoś, kto wpadł do dziury podczas pisania wiadomości.
UncaAlby

Odpowiedzi:

15

Szybką odpowiedzią jest to, że zabiłeś sshd (a lord wie co jeszcze) i nie będziesz mógł zalogować się ponownie do systemu za pomocą SSH. O ile nie masz innej metody uzyskania dostępu do systemu (takiej jak zdalna konsola, IPMI itp.), Będziesz musiał ponownie uruchomić system, który przywróci usługę SSH i inne usługi.

Mamy nadzieję, że masz fizyczny dostęp do skrzynki, w którym to przypadku prawdopodobnie wystarczy nacisnąć przycisk zasilania. Uświadom sobie, że zabiłeś wiele procesów i bądź przygotowany na zepsucie. Linux został zaprojektowany do odzyskiwania po awarii systemu i spowodowałeś awarię „manualną”. Większość rzeczy powinna wrócić do normy po ponownym uruchomieniu. W plikach dziennika mogą znajdować się różnego rodzaju interesujące komunikaty o błędach.


Długa odpowiedź:

To świetny eksperyment myślowy i dobre pytanie do rozmowy kwalifikacyjnej. „Co się stanie, jeśli zrobiłeś X ...” To fajna rzecz, aby wypróbować na swojej prywatnej maszynie wirtualnej, ale nigdy nie powinno się jej robić na prawdziwym pudełku. Wszyscy popełniają błędy. Pamiętaj i ucz się na swoim błędzie. Popełnianie błędów to najlepszy sposób na naukę. Popełnianie błędów przy produkcji to bolesna lekcja, która zdarza się czasami w twojej karierze.

pkill -KILL -u root

To polecenie wyśle ​​„SIGKILL” (np kill -9. KILL jest aliasem dla SIGKILL) do wszystkich procesów należących do roota. Jest to bardzo zła rzecz do zrobienia w systemie. kill -9należy unikać, chyba że w ostateczności.

Twoje polecenie agresywnie zabiło cały proces należący do roota, procesy zostały zabite natychmiast i nie dano szansy na oczyszczenie. Aby dowiedzieć się, co zabiłeś, zaloguj się do zdrowego systemu Linux i wypisz procesy należące do roota, używając polecenia takiego jak jeden z nich. Zwykle nie trzeba być rootem, aby uruchomić następujące polecenia:

$ pgrep -u root -l
$ ps aux | grep root

Być może zabiłeś Init (PID # 1), który odradza nowe procesy. Twój system może nie być w stanie utworzyć nowych procesów. Może więc nadal działać, ale jest chory i należy go naprawić jak najszybciej. Z biegiem czasu system będzie coraz bardziej chory. Im dłużej będziesz czekać, tym gorzej będzie.

AKTUALIZACJA: Serwer WWW nadal działa. Ale nie mogę teraz połączyć się przez SSH. Nie mam pojęcia co zrobiłem.

Zgaduję, że używasz Apache. Wygląda na to, że procesy potomne serwera WWW nadal działają, ponieważ nie są własnością użytkownika „root”. Jednak proces nadrzędnego serwera WWW jest zwykle własnością root, a ty go zabiłeś. W rezultacie nowe procesy potomne nie pojawią się. Przez jakiś czas będzie to w porządku, ponieważ prawdopodobnie masz wystarczającą liczbę procesów potomnych do obsługi żądań i zazwyczaj te procesy potomne będą się utrzymywać, dopóki nie zostaną zabite lub ulegną awarii. Ponownie najszybszym rozwiązaniem jest ponowne uruchomienie komputera.

Stefan Lasiewski
źródło
Nie mam fizycznego dostępu, ale coś wymyślę. Byłem mile zaskoczony, widząc, że Apache wciąż działa. Więc maszyna ma się dobrze bez rootowania. PS, jeśli przegłosowałeś pytanie, poprawiłem tytuł.
Buttle Butkus
1
@ButtleButkus Nie głosowałem za pytaniem. Zacząłem odpowiadać na pytanie, a potem zainteresowałem się, dlaczego wszystko działa tak, jak oni.
Stefan Lasiewski
1
Stefan, dziękuję za twoją odpowiedź. Jest to jedyna odpowiedź, którą głosowałem od samego początku, ponieważ miała sens. Ponownie uruchomiłem system w ciągu około 10 minut i od tego czasu wszystko działa cudownie.
Buttle Butkus
4

Najprawdopodobniej będziesz musiał ponownie uruchomić system, ponieważ zabiłeś prawie każdą krytyczną usługę na nim. To, jak to zrobisz, zależy od tego, jakie masz narzędzia lub jaki transport musisz dostać się do centrum danych.

użytkownik9517
źródło
Właściwie to nie wygląda na to, że zabiłem wszystkie krytyczne procesy. W przeciwnym razie, dlaczego serwer WWW nadal wyświetlałby doskonałe strony internetowe?
Buttle Butkus
@ButtleButkus: Twój serwer WWW nie będzie działał jako root.
user9517
@lain Gdyby nawet jedna „krytyczna” usługa została zabita, myślę, że spowodowałoby to awarię całego serwera. Wygląda na to, że polecenie faktycznie nie zabiło żadnej krytycznej usługi. Zabił jednak wygodną usługę: sshd.
Buttle Butkus
2
To, że usługa krytyczna została zabita, nie oznacza, że ​​maszyna natychmiast się wyłączy. Rozważałbym np., Że mój demon sterowania wentylatorem jest krytyczny - gdy wzrasta użycie procesora, chcę, aby wentylator obracał więcej. Mógłbym zabić usługę i mieć niskie zużycie procesora przez kilka dni, a potem nagle 1000 osób wchodzi na moją stronę, a moja jednostka centralna zapala się. I istnieje wiele innych mniej zauważalnych sposobów wyrządzania szkód ...
młot
3

System działa, ponieważ jądro działa. Nie możesz uzyskać dostępu do sshd, ponieważ zabiłeś demona. Prawdopodobnie init również został zakończony, co oznacza, że ​​nie można tworzyć nowych procesów. Dlatego nowe połączenia apache mogą nie zostać ustanowione (zastosowane parametry konfiguracyjne;)).

Nie możesz wysłać sygnału do wątków jądra, dlatego system działa, ale usługi należące do roota zostały zakończone i dla normalnego wskrzeszenia powinieneś go zrestartować.

Soham Chakraborty
źródło
Dzięki za ciekawe szczegóły. Dałem ci głos, ale zaznaczam Stefana.
Buttle Butkus