Nastavenie umiestnenia výpisu pre jadro Linuxu

Nastavenie Umiestnenia Vypisu Pre Jadro Linuxu



Čo je to „Core Dump“ v Linuxe?

Keď sa proces neočakávane ukončí, často zanechá vo vašom systéme „výpis jadra“. Súčasťou je relevantná správa. Jadro slúži ako nástroj na ladenie a je obrazom pamäte, ktorý obsahuje aj informácie o ladení. Ak ste používateľom, ktorý nechce ladiť program, môžete jednoducho odstrániť jadro:

$ rm jadro

Môžete ho tiež nechať nedotknuté, pretože staré jadro sa prepíše, ak sa niekedy vyhodí nové. Dumping jadra môžete tiež deaktivovať pomocou nasledujúceho príkazu:







$ znížiť -c 0

Výpisy jadra môžeme generovať na požiadanie (napríklad pomocou debuggera) alebo sa môžu vytvárať automaticky po ukončení. Jadro spúšťa výpisy jadra v dôsledku náhleho ukončenia programu. Tieto môžu byť odoslané do nejakého iného programu (napríklad systemd-coredump) na ďalšie operácie.



Ako zvyčajne, existuje kompromis medzi zberom údajov pre lepšiu stabilitu a riešením problémov a rizikom odhalenia citlivých informácií z údajov ladenia.



Čo budeme pokrývať?

V tomto článku uvidíme, ako nastaviť umiestnenie výpisov jadra na OS Ubuntu 20.04. Začnime teraz.





Generovanie Core Dump

Najprv sa pozrime, ako môžeme vygenerovať výpis jadra. Na tento účel používame príkaz Linux kill. Najprv nájdite PID procesu a potom pošlite signál zabíjania. Začnime napríklad proces spánku a potom ho zabite pomocou jeho PID:

$ spať 500

$ zabiť -s SIGTRAP $ ( priľnavosť spať )



Teraz, keď ste sa naučili generovať výpis jadra, môžete ho použiť v nasledujúcich nasledujúcich častiach.

Kde idú?

Súbor výpisu jadra má štandardne názov core.pid a je vytvorený v pracovnom adresári aplikácie. Tu je pid id procesu.

Pomocou nástroja ulimit môžete získať alebo zmeniť limity systémových prostriedkov pre aktuálny shell a všetky shelly, ktoré prídu po ňom. Ak chcete overiť alebo nakonfigurovať limit veľkosti súboru jadra, použite nasledujúci príkaz:

$ znížiť -c

Aby ste sa vyhli oddeľovaniu alebo skráteniu základného súboru, uistite sa, že limit je globálne nastavený na „neobmedzený“ [1]. Môžete to urobiť v /etc/security/limits.conf pridaním nasledujúceho riadku:

root - core neobmedzene

* - jadro neobmedzené

Teraz sa jednoducho odhláste a znova prihláste, aby sa limity aplikovali na vašu reláciu.

Prispôsobenie umiestnenia jadrovej skládky

Príkaz „sysctl kernel.core_pattern“ alebo „/proc/sys/kernel/core_pattern“ sa bežne používa na nastavenie umiestnenia, kam sa ukladajú výpisy jadra.

Zadajte nasledujúci príkaz, aby ste videli nastavenia pre aktuálny vzor jadra:

$ kat / proc / sys / jadro / vzor_jadra

Zvyčajne tu nájdete predvolenú hodnotu uvedenú ako „core“.

Pomocou „/proc/sys/kernel/core_pattern“ nastavte umiestnenie Core Dump

Dočasne presmerujeme výpisy jadra na nové miesto, povedzme /tmp/dumps/core, pomocou súboru „/proc/sys/kernel/core_pattern“ [2] [3]. Teraz postupujte podľa nasledujúcich krokov:

Krok 1 . Najprv vytvorte adresár na uloženie výpisov jadra:

$ mkdir -p / tmp / skládka / jadrá /

Krok 2 . Udeľte požadované povolenia tomuto adresáru:

$ chmod a+x / tmp / skládka / jadrá /

Krok 3 . Teraz dočasne nastavte cestu výpisu jadra:

$ ozvena '/tmp/dump/cores/core' | sudo tričko / proc / sys / jadro / vzor_jadra

Opäť globálne nastavte ulimit na neobmedzené.

Tu môžeme k názvu súboru pridať niektoré ďalšie informácie, ako je uvedené nižšie:

$ ozvena '/tmp/dump/cores/core_%e.%p_%t' | sudo tričko / proc / sys / jadro / vzor_jadra

Každý parameter, ktorý sa tu používa, možno definovať takto:

% a: pre spustiteľný súbor názov

% p: pre proces id alebo pid.

% t: pre pridanie časovej pečiatky

Krok 4 . Ďalej musíme zmeniť súbor „/etc/sysctl.conf“, aby sa natrvalo uplatňovali predchádzajúce nastavenia. Otvorte tento súbor:

$ sudo nano / atď / sysctl.conf

Teraz do tohto súboru pridajte nasledujúci riadok:

kernel.core_pattern = / tmp / skládka / jadrá / jadro

Namiesto tohto riadku môžete pridať aj toto:

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

To je všetko, čo musíme urobiť. Teraz vygenerujte výpis jadra, ako je uvedené v časti „Generovanie výpisu jadra“. Potom môžeme skontrolovať, či je náš hlavný súbor vygenerovaný alebo nie:

$ ls -l / tmp / skládka / jadrá /

Pomocou príkazu „Sysctl“ nastavte umiestnenie výpisu jadra

Ako už bolo spomenuté, na rovnaký účel môžeme použiť aj príkaz sysctl. Zmeňme umiestnenie výpisu jadra a formát súboru jadra:

Krok 1 . Vytvorte nový adresár a udeľte požadované povolenia:

$ mkdir -p / tmp / mydumps

$ chmod a+rwx / tmp / mydumps

Krok 2 . Teraz stačí spustiť nasledujúci príkaz:

$ sudo sysctl -v kernel.core_pattern= / tmp / mydumps / jadro_ % a. % p_ % t

Krok 3 . Teraz znova vygenerujte výpis jadra, ako sme to urobili predtým. Potom skontrolujte, či je vygenerovaný súbor jadra alebo nie:

$ ls -l / tmp / mydumps /

Na systémoch Ubuntu sa výpisy jadra často odosielajú do služby Apport. V prípade systémov založených na Red Hat môže byť preposlaný do nástroja Automatic Bug Reporting Tool (ABRT). Spočiatku som čelil problému pri konfigurácii umiestnenia výpisu jadra, takže som musel úplne zakázať Apport na Ubuntu 20.04. Možno to môže byť aj prípad Red Hat a ďalších.

Záver

V tomto článku sme videli, ako môžeme prispôsobiť umiestnenie výpisov jadra v OS Ubuntu 20.04. Základné výpisy vám môžu pomôcť zistiť, čo je zlé, ale sú hrozné pre únik citlivých údajov. Výpisy jadra by sa mali deaktivovať vždy, keď sa nevyžadujú, a povoliť len vtedy, keď je to absolútne nevyhnutné. V takejto situácii skontrolujte, či sú súbory bezpečne uložené, aby sa k nim bežní používatelia nedostali. Okrem toho, bez ohľadu na vaše rozhodnutie, vždy by ste mali otestovať svoju konfiguráciu, aby ste sa uistili, že funguje podľa plánu.

Výpisy jadra a predvolené konfigurácie sú v rôznych operačných systémoch spracované odlišne. V poslednej dobe väčšina linuxových systémov prijala systemd, čo prinieslo určité menšie úpravy pravidiel. V závislosti od toho, ako je váš systém nakonfigurovaný, možno budete musieť vyhľadať výpisy jadra.