Ustawianie Linux Core lokalizacji zrzutu

Ustawianie Linux Core Lokalizacji Zrzutu



Co to jest „Core Dump” w systemie Linux?

Gdy proces nieoczekiwanie kończy działanie, często pozostawia po sobie „zrzut pamięci” w systemie. Do tego dołączona jest odpowiednia wiadomość. Rdzeń służy jako narzędzie debugowania i jest obrazem pamięci, który zawiera również informacje debugowania. Jeśli jesteś użytkownikiem, który nie chce debugować programu, możesz po prostu usunąć rdzeń:

$ rm rdzeń

Możesz również pozostawić go nietkniętym, ponieważ stary rdzeń zostanie nadpisany, jeśli nowy zostanie kiedykolwiek zrzucony. Możesz także dezaktywować zrzut rdzenia za pomocą następującego polecenia:







$ zmniejszać -c 0

Zrzuty pamięci możemy generować na żądanie (na przykład za pomocą debuggera) lub automatycznie po zakończeniu. Jądro inicjuje zrzuty pamięci w wyniku nagłego zamknięcia programu. Mogą one zostać wysłane do innego programu (takiego jak systemd-coredump) w celu wykonania dodatkowych operacji.



Jak to zwykle bywa, istnieje kompromis między gromadzeniem danych w celu uzyskania lepszej stabilności i rozwiązywania problemów a ryzykiem ujawnienia poufnych informacji z danych debugowania.



Co omówimy?

W tym artykule zobaczymy, jak ustawić lokalizację zrzutów pamięci w systemie operacyjnym Ubuntu 20.04. Zacznijmy teraz.





Generowanie zrzutu pamięci

Najpierw zobaczmy, jak możemy wygenerować zrzut pamięci. W tym celu używamy polecenia kill systemu Linux. Najpierw znajdź PID procesu, a następnie wyślij sygnał zabicia. Na przykład rozpocznijmy proces uśpienia, a następnie zabijmy go za pomocą jego PID:

$ spać 500

$ zabić -s SIGTRAP $ ( chwyt spać )



Teraz, gdy nauczyłeś się generować zrzut pamięci, możesz go użyć w kolejnych sekcjach.

Dokąd oni poszli?

Plik zrzutu pamięci ma domyślnie nazwę core.pid i jest tworzony w katalogu roboczym aplikacji. Tutaj pid jest identyfikatorem procesu.

Za pomocą narzędzia ulimit możesz uzyskać lub zmienić limity zasobów systemowych dla bieżącej powłoki i wszystkich powłok, które następują po niej. Aby zweryfikować lub skonfigurować podstawowy limit rozmiaru pliku, użyj następującego polecenia:

$ zmniejszać -c

Aby uniknąć ograniczania lub obcinania pliku podstawowego, upewnij się, że limit jest globalnie ustawiony na „nieograniczony” [1]. Można to zrobić w pliku /etc/security/limits.conf, dodając następujący wiersz:

root - rdzeń nieograniczony

* - rdzeń nieograniczony

Teraz po prostu wyloguj się i zaloguj ponownie, aby zastosować limity do sesji.

Dostosowywanie lokalizacji zrzutu pamięci

Komenda „sysctl kernel.core_pattern” lub „/proc/sys/kernel/core_pattern” jest zwykle używana do ustawienia lokalizacji, do której trafiają zrzuty pamięci.

Wprowadź następujące polecenie, aby wyświetlić ustawienia dla bieżącego wzoru rdzenia:

$ kot / proc / sys / jądro / rdzeń_wzór

Zwykle tutaj znajdziesz domyślną wartość wymienioną jako „rdzeń”.

Używanie „/proc/sys/kernel/core_pattern” do ustawienia lokalizacji zrzutu pamięci

Tymczasowo przekierujmy zrzuty pamięci do nowej lokalizacji, powiedzmy /tmp/dumps/core, używając pliku „/proc/sys/kernel/core_pattern” [2] [3]. Teraz wykonaj następujące kroki:

Krok 1 . Najpierw utwórz katalog do przechowywania zrzutów pamięci:

$ mkdir -p / tmp / wysypisko / rdzenie /

Krok 2 . Nadaj wymagane uprawnienia do tego katalogu:

$ chmod a+x / tmp / wysypisko / rdzenie /

Krok 3 . Teraz tymczasowo ustaw ścieżkę zrzutu pamięci:

$ Echo '/tmp/dump/rdzenie/rdzeń' | Sudo trójnik / proc / sys / jądro / rdzeń_wzór

Ponownie globalnie ustaw ulimit na nieograniczony.

Tutaj możemy dodać inne informacje do nazwy pliku, jak pokazano poniżej:

$ Echo '/tmp/dump/cores/core_%e.%p_%t' | Sudo trójnik / proc / sys / jądro / rdzeń_wzór

Każdy użyty tutaj parametr można zdefiniować w następujący sposób:

% oraz: dla wykonywalny plik imię

% p: dla proces ID lub pid.

% t: dla dodanie znacznika czasu

Krok 4 . Następnie musimy zmienić plik „/etc/sysctl.conf”, aby na stałe zastosować poprzednie ustawienia. Otwórz ten plik:

$ Sudo nano / itp / sysctl.conf

Teraz dodaj następujący wiersz do tego pliku:

kernel.core_pattern = / tmp / wysypisko / rdzenie / rdzeń

Ponadto zamiast tej linii możesz dodać to:

kernel.core_pattern= '/tmp/dump/cores/core_%e.%p_%t'

To wszystko, co musimy zrobić. Teraz wygeneruj zrzut pamięci, jak wspomniano w sekcji „Generowanie zrzutu pamięci”. Następnie możemy sprawdzić, czy nasz podstawowy plik jest generowany, czy nie:

$ ls -l / tmp / wysypisko / rdzenie /

Używanie polecenia „Sysctl” do ustawiania lokalizacji zrzutu pamięci

Jak wspomniano wcześniej, możemy również użyć polecenia sysctl w tym samym celu. Zmieńmy lokalizację zrzutu pamięci i format pliku rdzenia:

Krok 1 . Utwórz nowy katalog i nadaj wymagane uprawnienia:

$ mkdir -p / tmp / moje zrzuty

$ chmod a+rwx / tmp / moje zrzuty

Krok 2 . Teraz po prostu uruchom następujące polecenie:

$ Sudo sysctl -w kernel.core_pattern= / tmp / moje zrzuty / rdzeń_ % oraz. % p_ % t

Krok 3 . Teraz ponownie wygeneruj zrzut pamięci, tak jak zrobiliśmy to wcześniej. Następnie sprawdź, czy plik core został wygenerowany, czy nie:

$ ls -l / tmp / moje zrzuty /

W systemach Ubuntu zrzuty pamięci są często wysyłane do Appport. W przypadku systemów opartych na systemie Red Hat może zostać przekazany do narzędzia Automatic Bug Reporting Tool (ABRT). Początkowo miałem problem z konfiguracją lokalizacji zrzutu pamięci, więc musiałem całkowicie wyłączyć Apport na Ubuntu 20.04. Być może tak samo może być w przypadku Red Hata i innych.

Wniosek

W tym artykule widzieliśmy, jak możemy dostosować lokalizację zrzutów pamięci w systemie operacyjnym Ubuntu 20.04. Zrzuty pamięci mogą pomóc ci dowiedzieć się, co jest nie tak, ale są one straszne w przypadku wycieku poufnych danych. Zrzuty pamięci powinny być wyłączane, gdy nie są potrzebne, i włączane tylko wtedy, gdy jest to absolutnie konieczne. W takiej sytuacji potwierdź, że pliki są bezpiecznie przechowywane, aby zwykli użytkownicy nie mieli dostępu do danych. Ponadto, niezależnie od podjętej decyzji, zawsze należy przetestować konfigurację, aby upewnić się, że działa ona zgodnie z przeznaczeniem.

Zrzuty pamięci i konfiguracje domyślne są obsługiwane w różny sposób przez różne systemy operacyjne. W ostatnim czasie większość systemów Linux przyjęła systemd, co przyniosło kilka drobnych zmian w regułach. W zależności od konfiguracji systemu może być konieczne wyszukanie zrzutów pamięci.