Co to jest „zrzut rdzenia” w Linux?
Kiedy proces nieoczekiwanie wychodzi, często pozostawia „zrzut rdzenia” w twoim systemie. Istnieje odpowiednia wiadomość, która jest zawarta z tym. Rdzeń służy jako narzędzie do debugowania i jest obrazem pamięci, który obejmuje również informacje o debugowaniu. Jeśli jesteś użytkownikiem, który nie chce debugować programu, możesz po prostu usunąć rdzeń:
rdzeń $ rm
Możesz również pozostawić go nietknięte, ponieważ stary rdzeń jest zastępowany, jeśli nowy jest zrzucony. Możesz także dezaktywować zrzucenie rdzenia następującym poleceniem:
$ ulimit -c 0
Możemy wygenerować podstawowe zrzuty na żądanie (na przykład za pośrednictwem debuggera) lub mogą być tworzone automatycznie po zakończeniu. Jądro inicjuje zrzuty podstawowe w wyniku nagłego wyjścia programu. Można je wysłać do innego programu (takiego jak Systemd-Coredump) w celu uzyskania dodatkowych operacji.
Podobnie jak zwykle, istnieje kompromis między pobieraniem danych w celu lepszej stabilności i rozwiązywania problemów a ryzykiem ujawnienia poufnych informacji z danych debugowania.
Co obejmiemy?
W tym artykule zobaczymy, jak ustawić lokalizację zrzutów podstawowych na Ubuntu 20.04 OS. Zacznijmy teraz.
Generowanie zrzutu podstawowego
Najpierw zobaczmy, jak możemy wygenerować zrzut rdzenia. W tym celu używamy polecenia Linux Kill. Najpierw znajdź PID procesu, a następnie wyślij sygnał zabójstwa. Na przykład zacznijmy proces snu, a następnie zabij go PID:
$ sleep 500
$ Kill -s sigtrap $ (sleep pgrep)
Teraz, gdy nauczyłeś się generować zrzut rdzenia, możesz go użyć w kolejnych kolejnych sekcjach.
Dokąd oni poszli?
Plik zrzutu podstawowego nazywa się Core.PID domyślnie i jest tworzony w katalogu roboczym aplikacji. Tutaj PID to identyfikator procesu.
Dzięki narzędzia UliMit możesz uzyskać lub zmienić limity zasobów systemowych dla bieżącej powłoki i wszelkich powłok, które pojawiają się po nim. Aby zweryfikować lub skonfigurować limit rozmiaru pliku podstawowego, użyj następującego polecenia:
$ ulimit -c
Aby uniknąć ograniczania lub obcięcia pliku podstawowego, upewnij się, że limit jest na całym świecie ustawiony na „nieograniczony” [1]. Można to zrobić w/etc/bezpieczeństwo/limity.Conf, dodając następujący wiersz:
root - Core Unlimited
* - Core Unlimited
Teraz po prostu wyloguj się i zaloguj się, aby ograniczenia mają zastosowanie do sesji.
Dostosowywanie lokalizacji zrzutu podstawowego
„Jądro sysctl.Core_pattern ”lub„/proc/sys/jądro/kernel/core_pattern ”jest zwykle używane do ustawienia lokalizacji, w której zrzuty rdzenia idą.
Wprowadź następujące polecenie, aby zobaczyć ustawienia bieżącego wzorca rdzenia:
$ cat/proc/sys/jądro/core_pattern
Zwykle znajdziesz wartość domyślną wymienioną jako „rdzeń” tutaj.
Używając „/proc/sys/jądro/core_pattern”, aby ustawić lokalizację zrzutu rdzenia
Tymczasowo przekierujmy zrzuty rdzenia do nowej lokalizacji, powiedz/tmp/zrzut/rdzeń, używając pliku „/proc/syss/kernel/core_pattern” [2] [3]. Teraz wykonaj następujące kroki:
Krok 1. Najpierw zrób katalog do przechowywania zrzutów podstawowych:
$ mkdir -p/tmp/zrzut/rdzenie/
Krok 2. Podaj wymagane uprawnienia do tego katalogu:
$ chmod a+x/tmp/zrzut/rdzenie/
Krok 3. Teraz tymczasowo ustaw podstawową ścieżkę zrzutu:
$ echo '/tmp/zrzut/rdzenie/rdzeń' | sudo tee/proc/sys/jądro/core_pattern
Ponownie, globalnie ustaw Ulimit na nieograniczoną liczbę.
Tutaj możemy dołączyć inne informacje do nazwy pliku, jak pokazano następująco:
$ echo '/tmp/zrzut/rdzenie/core_%e.%p_%t '| sudo tee/proc/sys/jądro/core_pattern
Każdy używany tutaj parametr można zdefiniować w następujący sposób:
%e: dla nazwy pliku wykonywalnego
%P: W przypadku identyfikatora procesu lub PID.
%T: Do dodania znacznika czasu
Krok 4. Następnie musimy zmienić „/etc/sysctl.plik conf ”, aby na stałe zastosować poprzednie ustawienia. Otwórz ten plik:
$ sudo nano /etc /sysctl.conf
Teraz dodaj następujący wiersz do tego pliku:
jądro.core_pattern =/tmp/zrzut/rdzenie/rdzeń
Ponadto, zamiast tej linii, możesz to dodać:
jądro.core_pattern = '/tmp/zrzut/rdzenia/core_%e.%p_%t '
To wszystko, co musimy zrobić. Teraz wygeneruj zrzut rdzenia, jak wspomniano w sekcji „Generowanie zrzutu rdzenia”. Następnie możemy sprawdzić, czy nasz plik podstawowy jest generowany, czy nie:
$ ls -l/tmp/zrzut/rdzenie/
Korzystanie z polecenia „SysCtl” do ustawienia lokalizacji zrzutu rdzenia
Jak wspomniano wcześniej, możemy również użyć polecenia sysctl w tym samym celu. Zmieńmy lokalizację zrzutu podstawowego i format pliku podstawowego:
Krok 1. Utwórz nowy katalog i podaj wymagane uprawnienia:
$ mkdir -p /tmp /mydumps
$ chmod a+rwx /tmp /mydumps
Krok 2. Teraz po prostu uruchom następujące polecenie:
$ sudo sysctl -w jądro.core_pattern =/tmp/mydumps/core_%e.%p_%t
Krok 3. Teraz ponownie wygeneruj zrzut rdzenia, tak jak wcześniej. Następnie sprawdź, czy plik podstawowy jest generowany, czy nie:
$ ls -l/tmp/mydumps/
W systemach Ubuntu zrzuty rdzeniowe są często wysyłane do Apport. W przypadku systemów opartych na Red Hat można go przekazać do automatycznego raportowania błędów (ABRT). Początkowo miałem problem w konfiguracji lokalizacji zrzutu podstawowego, więc musiałem całkowicie wyłączyć Aplikację na Ubuntu 20.04. Być może może to być również w przypadku Red Hat i innych.
Wniosek
W tym artykule widzieliśmy, w jaki sposób możemy dostosować lokalizację zrzutów podstawowych na Ubuntu 20.04 OS. Zrzuty podstawowe mogą pomóc ci dowiedzieć się, co jest nie tak, ale są okropne dla wycieku wrażliwych danych. Zrzuty podstawowe powinny być wyłączone, gdy nie są wymagane i włączone tylko wtedy, gdy jest to absolutnie konieczne. W takiej sytuacji potwierdź, że pliki są bezpiecznie przechowywane, aby zwykli użytkownicy nie mogli uzyskać dostępu do danych. Ponadto, niezależnie od decyzji, zawsze powinieneś przetestować konfigurację, aby upewnić się, że działa ona zgodnie z przeznaczeniem.
Zrzuty podstawowe i domyślne konfiguracje są obsługiwane inaczej przez różne systemy operacyjne. W ostatnim czasie większość systemów Linux przyjęła SystemD, co spowodowało pewne niewielkie korekty reguł. W zależności od sposobu skonfigurowania systemu, może być konieczne wyszukiwanie zrzutów podstawowych.