Поиск по сайту:

Настройка Linux Core для расположения дампа


Что такое «дамп ядра» в Linux?

Когда процесс неожиданно завершается, он часто оставляет после себя «дамп ядра» в вашей системе. Существует соответствующее сообщение, которое включено в это. Ядро служит инструментом отладки и представляет собой образ памяти, который также включает информацию об отладке. Если вы пользователь, который не хочет отлаживать программу, вы можете просто удалить ядро:

$ rm core

Вы также можете оставить его нетронутым, так как старое ядро затирается, если когда-либо сбрасывается новое. Вы также можете деактивировать дамп ядра с помощью следующей команды:

$ ulimit -c 0

Мы можем генерировать дампы ядра по запросу (например, через отладчик) или они могут создаваться автоматически по завершении. Ядро инициирует создание дампа ядра как следствие внезапного выхода программы. Их можно отправить какой-либо другой программе (например, systemd-coredump) для дополнительных операций.

Как это обычно бывает, существует компромисс между сбором данных для повышения стабильности и устранения неполадок и риском раскрытия конфиденциальной информации из отладочных данных.

Что мы покроем?

В этой статье мы увидим, как установить расположение дампов ядра в ОС Ubuntu 20.04. Давайте начнем сейчас.

Создание дампа ядра

Давайте сначала посмотрим, как мы можем создать дамп ядра. Для этого мы используем команду kill в Linux. Сначала найдите PID процесса, а затем отправьте сигнал уничтожения. Например, давайте запустим процесс сна, а затем завершим его с помощью его PID:

$ sleep 500

kill -s SIGTRAP $(pgrep sleep)

Теперь, когда вы узнали, как создать дамп ядра, вы можете использовать его в следующих разделах.

Куда они идут?

Файл дампа ядра по умолчанию называется core.pid и создается в рабочем каталоге приложения. Здесь pid — это идентификатор процесса.

С помощью инструмента ulimit вы можете получить или изменить ограничения системных ресурсов для текущей оболочки и любых оболочек, следующих за ней. Чтобы проверить или настроить предельный размер основного файла, используйте следующую команду:

$ ulimit -c

Чтобы избежать разграничения или усечения основного файла, убедитесь, что ограничение глобально установлено на «неограниченно» [1]. Это можно сделать в /etc/security/limits.conf, добавив следующую строку:

root - core unlimited

* - core unlimited

Теперь просто выйдите из системы и войдите снова, чтобы ограничения были применены к вашему сеансу.

Настройка расположения дампа ядра

Команда «sysctl kernel.core_pattern» или «/proc/sys/kernel/core_pattern» обычно используется для установки места, куда помещаются дампы ядра.

Введите следующую команду, чтобы просмотреть настройки текущего шаблона ядра:

$ cat /proc/sys/kernel/core_pattern

Обычно вы найдете значение по умолчанию, указанное здесь как «ядро».

Использование «/proc/sys/kernel/core_pattern» для установки местоположения основного дампа

Давайте временно перенаправим дампы ядра в новое место, скажем, /tmp/dumps/core, используя файл «/proc/sys/kernel/core_pattern» [2][3]. Теперь выполните следующие действия:

Шаг 1. Сначала создайте каталог для хранения дампов ядра:

$ mkdir -p /tmp/dump/cores/

Шаг 2. Дайте необходимые разрешения для этого каталога:

$ chmod a+x  /tmp/dump/cores/

Шаг 3. Теперь временно установите путь к дампу ядра:

$ echo '/tmp/dump/cores/core' | sudo tee /proc/sys/kernel/core_pattern

Опять же, глобально установите ulimit на неограниченный.

Здесь мы можем добавить некоторую другую информацию к имени файла, как показано ниже:

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

Каждый используемый здесь параметр может быть определен следующим образом:

%e: for executable file name

%p: for process id or pid.

%t: for adding a timestamp

Шаг 4. Затем мы должны изменить файл «/etc/sysctl.conf», чтобы навсегда применить предыдущие настройки. Откройте этот файл:

$ sudo nano /etc/sysctl.conf

Теперь добавьте в этот файл следующую строку:

kernel.core_pattern = /tmp/dump/cores/core

Также вместо этой строки можно добавить вот это:

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

Это все, что нам нужно сделать. Теперь создайте дамп ядра, как указано в разделе «Создание дампа ядра». После этого мы можем проверить, сгенерирован ли наш основной файл или нет:

$ ls -l /tmp/dump/cores/

Использование команды «Sysctl» для установки местоположения основного дампа

Как упоминалось ранее, мы также можем использовать команду sysctl для той же цели. Давайте изменим расположение дампа ядра и формат файла ядра:

Шаг 1. Создайте новый каталог и дайте необходимые разрешения:

$ mkdir -p /tmp/mydumps

$ chmod a+rwx /tmp/mydumps

Шаг 2. Теперь просто запустите следующую команду:

$ sudo sysctl -w kernel.core_pattern=/tmp/mydumps/core_%e.%p_%t

Шаг 3. Теперь снова сгенерируйте дамп ядра, как мы делали ранее. После этого проверьте, сгенерирован ли файл ядра:

$ ls -l /tmp/mydumps/

В системах Ubuntu дампы ядра часто отправляются в Apport. Для систем на основе Red Hat он может быть перенаправлен в средство автоматического создания отчетов об ошибках (ABRT). Изначально я столкнулся с проблемой настройки расположения дампа ядра, поэтому мне пришлось полностью отключить Apport в Ubuntu 20.04. Возможно, это также может быть в случае с Red Hat и другими.

Заключение

В этой статье мы увидели, как мы можем настроить расположение дампов ядра в ОС Ubuntu 20.04. Дампы ядра могут помочь вам понять, что не так, но они ужасны из-за утечки конфиденциальных данных. Дампы ядра следует отключать всякий раз, когда они не требуются, и включать их только в случае крайней необходимости. В такой ситуации убедитесь, что файлы надежно сохранены, чтобы обычные пользователи не могли получить доступ к данным. Кроме того, независимо от вашего решения, вы всегда должны тестировать свою конфигурацию, чтобы убедиться, что она работает должным образом.

Дампы ядра и конфигурации по умолчанию обрабатываются разными операционными системами по-разному. В последнее время большинство систем Linux перешли на systemd, что привело к некоторым незначительным корректировкам правил. В зависимости от того, как настроена ваша система, вам может потребоваться поиск дампов ядра.

Статьи по данной тематике: