porozumět a konfigurovat výpis jádra v systému Linux

každý systém potřebuje běžící procesy, aby splnil svůj primární cíl. Ale někdy se věci pokazí a proces může selhat. V závislosti na konfiguraci systému je vytvořen výpis jádra. Jinými slovy, je uložen paměťový snímek havarovaného procesu. Termín jádro ve skutečnosti odkazuje na starou paměť magnetického jádra ze starších systémů. Přestože se tento typ paměti již nepoužívá, tento termín stále používáme v systémech Linux. Dost pro historii, pojďme nakonfigurovat náš systém Linux tak, aby správně zpracovával skládky jádra.

Obsah

Linux a základní výpisy

Většina Linuxových systémů core skládky ve výchozím nastavení povolena. Jako vždy je zde kompromis. Na jedné straně chceme shromažďovat data pro lepší stabilitu a řešení problémů. Na druhé straně chceme omezit ladicí data a zabránit úniku citlivých dat.

první možnost je vhodná pro stroje, kde je třeba zkoumat nestabilní programy, jako je pracovní stanice vývojáře. Druhá možnost je vhodnější pro výrobní systémy ukládání nebo zpracování citlivých dat.

zakázat výpisy jádra

má smysl zakázat všechny výpisy jádra v systému Linux ve výchozím nastavení pro všechny vaše systémy. Je to proto, že soubory zabírají místo na disku a mohou obsahovat citlivá data. Pokud tedy pro účely řešení problémů nepotřebujete skládky jádra, je jejich deaktivace bezpečnou volbou.

Možnost 1: ulimit pomocí konfiguračního souboru

Chcete-li zakázat skládky jádra, musíme nastavit hodnotu ulimit. To se provádí pomocí / etc / security / limits.soubor conf a definuje některá omezení specifická pro shell.

je dobré vědět, že existují měkké a tvrdé limity. Pevný limit je něco, co nikdy nelze přepsat, zatímco měkký limit může být použitelný pouze pro konkrétní uživatele. Pokud bychom chtěli zajistit, aby žádný proces nemohl vytvořit výpis jádra, můžeme je oba nastavit na nulu. Ačkoli to může vypadat jako boolean (0 = False, 1 = True), ve skutečnosti označuje povolenou velikost.

* měkké jádro 0
* tvrdé jádro 0

hvězdička znamená to platí pro všechny uživatele. Druhý sloupec uvádí, zda chceme použít tvrdý nebo měkký limit, následovaný sloupci uvádějícími nastavení a hodnotu.

Možnost 2: konfigurace ulimit přes profil

hodnoty pro ulimit lze také nastavit pomocí /etc/profile nebo vlastní soubor v /etc/profile.adresář d. Ten je výhodný, pokud je k dispozici. Například vytvořením souboru s názvem /etc/profile.d/disable-coredumps.sh.

echo „ulimit -c 0 > /dev/null 2>&1“ > /etc/profile.d / disable-coredumps.sh

tento příkaz přidá nastavení do nového souboru a nastaví měkký i tvrdý limit na nulu. Každý uživatel získá tuto hodnotu při přihlášení.

Kromě nastavení ulimit je třeba zvážit také nastavení jádra. Takže výběr jedné z možností je prvním krokem.

možnost 3: Zakázat přes systemd

pokud používáte systemd a službu systemd-coredump, změňte coredump.soubor conf. Tento soubor je s největší pravděpodobností umístěn na adrese /usr/lib/sysctl.d / 50-jar.conf. Protože systemd má sadu souborů, zkontrolujte ostatní jako:

Nastavte nastavení Úložiště na „žádné“. Poté nakonfigurujte Processizemax tak, aby omezil maximální velikost na nulu.

Úložiště=žádná
ProcessSizeMax=0

Obvykle je dostačující jen znovu načíst systemd konfigurace.

systemctl daemon-reload

pokud to stále vytváří výpis jádra, restartujte systém.

Zakázat procesy setuid dumpingové jejich paměť

Procesů se zvýšenými oprávněními (nebo setuid bit), může být stále schopen provést core dump, v závislosti na vaše další nastavení. Protože tyto procesy mají obvykle větší přístup, mohou obsahovat citlivější datové segmenty v paměti. Takže je čas to také změnit. Chování lze změnit pomocí klíče sysctl nebo přímo prostřednictvím systému souborů / proc. Pro trvalé nastavení se obvykle používá příkaz sysctl a konfigurace. Nastavení se nazývá „klíč“, který má k němu připojenou související hodnotu(také známý jako pár klíč-hodnota).

Chcete-li zakázat program s bitem setuid na výpis, nastavte fs.suid_dumpable na nulu.

echo "fs.suid_dumpable=0" >> /etc/sysctl.conf

znovu načtěte konfiguraci sysctl s příznakem-p a aktivujte všechny provedené změny.

sysctl -p

jen chcete testovat bez trvalých změn? Použijte sysctl -w a potom klíč=hodnota.

Tip: pomocí sysctl můžete vyladit systém a je to dobrý způsob, jak ztvrdnout Linuxové jádro.

povolit skládky jádra

primárním důvodem pro povolení skládek jádra je řešení problémů. Dumpingová paměť procesu může být použita pro ladění problémů, obvykle zkušenějšími vývojáři. Dodavatel softwaru může požádat o povolení skládek jádra. Obvykle zjistit, proč proces havaroval na prvním místě a najít související rutinu, která ji způsobila.

povolení skládek jádra v systému Linux je podobné jejich deaktivaci, kromě toho, že by mělo být nakonfigurováno několik konkrétních podrobností. Pokud například potřebujete pouze podrobnosti z konkrétního programu, můžete použít měkké limity. To se provádí pomocí -S, což znamená, že se jedná o měkký limit. -c označuje velikost výpisu jádra.

ulimit -S -c 0

dalším krokem je povolit pouze „my-program-to-Poradce při potížích“ vytvořit výpis jádra.

ulimit -S -c unlimited my-program-to-troubleshoot

Pokud chcete povolit všechny procesy použít jádro skládky, použijte linku výše bez programu, nebo nastavit systém omezit v /etc/security/limits.conf

* měkké jádro neomezený

řešení Potíží setuid binárních souborů

Binární soubory, které mají setuid bit nastaven, může běžet s právy uživatele root. Tento zvláštní typ přístupu je třeba co nejvíce omezit. Také pro vytvoření základních skládek musí být správně nakonfigurován. To se provádí pomocí sysctl fs.suid_dumpable klíč.

  • 0 – disabled
  • 1 – povoleno
  • 2 – povoleno s omezeními

Takže, pokud se vám líbí řešení programů s setuid bit nastaven, můžete dočasně změnit fs.suid_dumpable na 1 nebo 2. Nastavení na 2 je výhodné, protože to dělá jádro skládky čitelné pouze pro uživatele root. To je dobrá alternativa pro systémy s citlivými daty. Nastavení možnosti na 1 je vhodnější pro systémy osobního rozvoje.

vytvořte normální soubory výpisu

jednou z velkých záhad se systémy Linux je umístění základních skládek. Linux má trik, jak zachytit skládky jádra. Toto konkrétní nastavení se provádí pomocí jádra sysctl.nastavení core_pattern nebo /proc / sys / kernel / core_pattern. Většina systémů bude mít v tomto nastavení trubku (|), která indikuje, že se program musí starat o generovaná data. Takže pokud vás zajímá, kam vaše jádro skládka jde, následovat potrubí!

základní výpisy v systémech Ubuntu se obvykle chystají Apportovat. Pro systémy založené na Red Hat může být přesměrován na Automatický nástroj pro hlášení chyb (ABRT).

toto nastavení můžete dočasně změnit opakováním „core“ do tohoto souboru nebo pomocí nástroje sysctl.

sysctl -w kernel.core_pattern=core

důležitou poznámkou je, že tato změna nemusí stačit. Záleží také na vašem fs.suid_dumpable nastavení. Pokud tomu tak je, bude do vašeho loggeru jádra zaznamenáno varování.

Sep 06 15: 51: 18 kalení jádra: Nebezpečný core_pattern používá se suid_dumpable=2. Pipe handler nebo plně kvalifikovaný core dump cesta nutná.

podle potřeby nastavit core_pattern úplnou cestu, volitelně s proměnnými, určující, kdo ji řídí, PID, atd.

sysctl-w jádro.core_pattern=/var/crash/core.%u. % e. % p

v tomto příkladu budou naše skládky obsahovat id uživatele, název programu a ID procesu.

Systemd core dumps

při použití moderní distribuce Linuxu budete pravděpodobně mít systemd povolen. Možná budete muset přepsat nastavení pomocí /etc / sysctl.d / 50-jar.conf a definujte, jak a kam chcete ukládat své hlavní skládky.

pomocí systemd-coredump

jádro.core_pattern může být definován pro použití nástroje systemd-coredump. Výchozí cesta, kde jsou uloženy základní skládky, je pak v /var / lib / systemd / coredump.

testování konfigurace

většina ostatních výukových programů vám dává nastavení, která mají být nakonfigurována. Ale jak byste věděli, že věci fungují podle očekávání? Budete to muset vyzkoušet!

Vytvořte výpis jádra

Možnost 1: Vytvořte nestabilní program

Pojďme vytvořit jednoduchý program. Jeho primárním cílem je selhání při spuštění a poté volitelně vytvoření výpisu jádra. Nainstalujte gcc do systému a vytvořte selhání souboru.c ve vašem domovském adresáři.

int main(){ return 1/0;}

tento program spustí hlavní funkci a vrátí celočíselnou hodnotu (číslo). Je však děleno 1 nulou, což není povoleno a zhroutí se. Dalším krokem je sestavení našeho malého buggy programu.

Naše nestabilní malý program,

I kompilátor ukazuje náš program obsahuje závažný problém, a zobrazí upozornění o tom. Teď to projdeme a uvidíme, jestli tomu tak je.

pěkný pád!

z tohoto jediného řádku se můžeme skutečně naučit pár věcí. Za prvé, že to skončí s výjimkou, konkrétně s odkazem na plovoucí body. Toto je formát desetinných čísel pro programy, takže to může znamenat, že se něco stalo při nějaké matematice. Dalším závěrem je, že jádro je dumpingové kvůli (jádrovému dumpingu) přidání na konci. Pokud by byly vypnuty základní skládky, neobjevilo by se to.

skvělé, takže s touto havárií Výše máme nyní dumpingový Soubor, že? Ne tak docela. V závislosti na distribuci Linuxu věci nemusí být tak jednoduché, jak to vypadá. Každá distribuce se zabývá různými skládkami jádra a výchozím nastavením. Nejnovější distribuce Linuxu nyní také používají systemd a pravidla se s tím také mírně změnila. V závislosti na konfiguraci budete možná muset vyhledat základní skládky. Zde je několik tipů, jak zajistit, aby bylo vše správně nakonfigurováno.

možnost 2: zabít běžící proces

namísto použití testovacího programu můžete také ukončit existující proces. To se provádí pomocí SIGSEGV, což je zkratka pro narušení segmentace a také známá jako chyba segmentace.

kill -s SIGSEGV PID

Pokud jste nahradit PID „$$“ aktuální program (s největší pravděpodobností váš shell) spadne. Všechno pro vědu, že?

Možnost 3: použití gdb

Pokud máte vývojka ladící nástroj gdb nainstalován, pak se připojit k procesu výběru pomocí jeho ID procesu (PID).

gdb -p 1234

Pak, když v gdb řádku, vytvořit core dump vyvoláním generovat-core-file instrukce. Po použití tohoto příkazu by vám měl vrátit výstup.

uloženo jádro corefile.1234

zkontrolujte nastavení ulimit

nastavení ulimit definuje, co se může stát při selhání programu. Je tedy bezpečné to nejprve zkontrolovat, a to jak pro root, tak pro normálního neprivilegovaného uživatele.

Zkontrolujte, zda pevný limit pro core skládky:

ulimit -H -c

Zkontrolujte soft limit, stejně:

ulimit -S -c

Podívejte se na hlavní vzor

Použití systému souborů /proc získat hodnotu a změňte ji dočasně během testování. Pokud dáváte přednost použití sysctl, pak dotaz na jádro.klíč core_pattern.

cat /proc/sys/kernel/core_pattern

To by mohlo ukázat něco jako je tohle:

|/usr/share/apport/apport %p %s %c %P

V tomto případě, havárie bude odváděna do apport utility. Takže to znamená, že havárie budou analyzovány Apportem. Obvykle se pády nacházejí v/var /crash, ale mohou být také v/var /spool nebo/var/lib/systemd / coredump na jiných distribucích Linuxu.

zkontrolujte deník (systemd)

v našem případě journalctl ukazuje naši havárii, takže je to začátek.

po kontrole všech těchto nastavení byste měli být schopni vytvořit pěkný výpis jádra.

závěr

základní skládky mohou být užitečné pro řešení problémů, ale katastrofa pro únik citlivých dat. Zakažte skládky jádra, pokud je to možné, a povolte je pouze tehdy, když je to skutečně potřeba. V takovém případě zkontrolujte, zda jsou soubory uloženy bezpečně, takže normální uživatelé nemohou vidět data. A nezávisle na tom, jakou volbu jste provedli, vždy otestujte, zda vaše konfigurace funguje přesně tak,jak očekáváte.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.

Previous post Průvodce Aucuba Japonica: jak pěstovat a pečovat o rostliny „zlatého prachu“
Next post Brunch v Rochester MN | Nejlepší Brunch v Rochester MN