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.
Odpowiedzi:
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.
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 -9
należ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:
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.
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.
źródło
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.
źródło
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ć.
źródło