Linuxin ytimen asettaminen kaatopaikaksi

Linuxin Ytimen Asettaminen Kaatopaikaksi

Mikä on 'Core Dump' Linuxissa?

Kun prosessi päättyy odottamatta, se jättää usein jälkeensä 'ydinkaapin' järjestelmääsi. Tähän sisältyy asiaankuuluva viesti. Ydin toimii virheenkorjaustyökaluna ja on muistikuva, joka sisältää myös virheenkorjaustiedot. Jos olet käyttäjä, joka ei halua tehdä ohjelman virheenkorjausta, voit vain poistaa ytimen:

$ rm ydin

Voit myös jättää sen koskematta, koska vanha ydin korvataan, jos uusi hylätään. Voit myös deaktivoida ydinpoiston seuraavalla komennolla:







$ vähentää -c 0

Voimme luoda ydinvedoksia pyynnöstä (esimerkiksi debuggerin kautta) tai ne voidaan tuottaa automaattisesti lopettamisen yhteydessä. Ydin käynnistää ydinvedoksia ohjelman äkillisen poistumisen seurauksena. Ne voidaan lähettää johonkin muuhun ohjelmaan (kuten systemd-coredump) lisätoimintoja varten.



Kuten yleensä, on olemassa kompromissi tietojen keräämisen parempaa vakautta ja vianetsintää varten sekä arkaluonteisten tietojen paljastamisen välillä virheenkorjaustiedoista.



Mitä katamme?

Tässä artikkelissa näemme, kuinka ydinvedosten sijainti asetetaan Ubuntu 20.04 -käyttöjärjestelmässä. Aloitetaan nyt.





Ydinvedosten luominen

Katsotaanpa ensin, kuinka voimme luoda ydinvedon. Tätä varten käytämme Linux kill -komentoa. Etsi ensin prosessin PID ja lähetä sitten tapposignaali. Aloitetaan esimerkiksi nukkumisprosessi ja lopetetaan se sen PID:llä:

$ nukkua 500

$ tappaa -s SIGTRAP $ ( ote nukkua )



Nyt kun olet oppinut luomaan ydinvedoskirjan, voit käyttää sitä seuraavissa myöhemmissä osissa.

Minne he menevät?

Ydinvedostiedosto on oletusarvoisesti nimeltään core.pid, ja se luodaan sovelluksen työhakemistoon. Tässä pid on prosessin tunnus.

Ulimit-työkalulla voit saada tai muuttaa järjestelmän resurssirajoituksia nykyiselle ja sen jälkeen tuleville komentotulkeille. Voit tarkistaa tai määrittää tiedostokoon ydinrajoituksen käyttämällä seuraavaa komentoa:

$ vähentää -c

Jotta vältetään ydintiedoston rajaaminen tai katkaiseminen, varmista, että raja on maailmanlaajuisesti asetettu 'unlimited' [1]. Tämä voidaan tehdä tiedostossa /etc/security/limits.conf lisäämällä seuraava rivi:

root - core rajoittamaton

* - ydin rajoittamaton

Kirjaudu nyt vain ulos ja takaisin sisään, jotta istuntoon sovelletaan rajoituksia.

Ydinkaapin sijainnin mukauttaminen

Komentoa 'sysctl kernel.core_pattern' tai '/proc/sys/kernel/core_pattern' käytetään yleensä määrittämään sijainti, johon ydinvedostiedostot menevät.

Anna seuraava komento nähdäksesi nykyisen ydinkuvion asetukset:

$ kissa / proc / sys / ydin / core_pattern

Yleensä löydät oletusarvon lueteltuna 'ydin'.

Käytä '/proc/sys/kernel/core_pattern' määrittääksesi ydinvedospaikan

Ohjataan ydinvedokset väliaikaisesti uuteen paikkaan, esimerkiksi /tmp/dumps/core, käyttämällä tiedostoa '/proc/sys/kernel/core_pattern' [2] [3]. Noudata nyt seuraavia vaiheita:

Vaihe 1 . Tee ensin hakemisto ydinvedosten tallentamiseksi:

$ mkdir -s / tmp / kaatopaikka / ytimet /

Vaihe 2 . Anna tarvittavat käyttöoikeudet tälle hakemistolle:

$ chmod a+x / tmp / kaatopaikka / ytimet /

Vaihe 3 . Aseta nyt väliaikaisesti ydinvedospolku:

$ kaiku '/tmp/dump/cores/core' | sudo tee / proc / sys / ydin / core_pattern

Jälleen globaalisti aseta raja rajattomaan.

Täällä voimme liittää tiedoston nimeen joitain muita tietoja seuraavassa esitetyllä tavalla:

$ kaiku '/tmp/dump/cores/core_%e.%p_%t' | sudo tee / proc / sys / ydin / core_pattern

Jokainen tässä käytetty parametri voidaan määrittää seuraavasti:

% ja: varten suoritettava tiedosto nimi

% p: varten prosessi id tai pid.

% t: varten aikaleiman lisääminen

Vaihe 4 . Seuraavaksi meidän on muutettava '/etc/sysctl.conf'-tiedostoa, jotta aiemmat asetukset otetaan pysyvästi käyttöön. Avaa tämä tiedosto:

$ sudo nano / jne / sysctl.conf

Lisää nyt seuraava rivi tähän tiedostoon:

kernel.core_pattern = / tmp / kaatopaikka / ytimet / ydin

Tämän rivin sijasta voit myös lisätä tämän:

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

Se on kaikki mitä meidän on tehtävä. Luo nyt ydinvedos 'Ydinvedoskirjan luominen' -osiossa mainitulla tavalla. Tämän jälkeen voimme tarkistaa, onko ydintiedostomme luotu vai ei:

$ ls -l / tmp / kaatopaikka / ytimet /

Sysctl-komennon avulla Core Dump Location

Kuten aiemmin mainittiin, voimme käyttää myös sysctl-komentoa samaan tarkoitukseen. Muutetaan ydinvedospaikkaa ja ydintiedoston muotoa:

Vaihe 1 . Luo uusi hakemisto ja anna tarvittavat käyttöoikeudet:

$ mkdir -s / tmp / mydomps

$ chmod a+rwx / tmp / mydomps

Vaihe 2 . Suorita nyt vain seuraava komento:

$ sudo sysctl -sisään kernel.core_pattern= / tmp / mydomps / ydin_ % ja. % p_ % t

Vaihe 3 . Luo nyt jälleen ydinvedos kuten teimme aiemmin. Tarkista tämän jälkeen, onko ydintiedosto luotu vai ei:

$ ls -l / tmp / mydomps /

Ubuntu-järjestelmissä ydinvedostiedostot lähetetään usein Apportille. Red Hat -pohjaisissa järjestelmissä se voidaan välittää automaattiseen virheilmoitustyökaluun (ABRT). Aluksi minulla oli ongelma ydinvedospaikan määrittämisessä, joten minun piti poistaa Apport kokonaan käytöstä Ubuntu 20.04:ssä. Ehkä näin voi olla myös Red Hatin ja muiden kohdalla.

Johtopäätös

Tässä artikkelissa olemme nähneet, kuinka voimme mukauttaa ydinvedosten sijaintia Ubuntu 20.04 -käyttöjärjestelmässä. Ydinvedosten avulla voit selvittää, mikä on vialla, mutta ne ovat kauheita arkaluonteisten tietojen vuotamisen vuoksi. Sydänvedot tulee poistaa käytöstä aina, kun niitä ei tarvita, ja ottaa käyttöön vain, kun se on ehdottoman välttämätöntä. Varmista tällaisessa tilanteessa, että tiedostot on tallennettu turvallisesti, jotta tavalliset käyttäjät eivät pääse käsiksi tietoihin. Lisäksi päätöksestäsi riippumatta sinun tulee aina testata kokoonpanosi varmistaaksesi, että se toimii tarkoitetulla tavalla.

Eri käyttöjärjestelmät käsittelevät ydinvedoksia ja oletuskokoonpanoja eri tavalla. Viime aikoina useimmat Linux-järjestelmät ovat ottaneet käyttöön systemd:n, mikä on tuonut mukanaan pieniä sääntömuutoksia. Riippuen siitä, miten järjestelmäsi on määritetty, saatat joutua etsimään ydinvedoksia.