Как я могу обеспечить, чтобы моя программа Linux не выдавала дампы ядра?

У меня есть программа, которая хранит конфиденциальную информацию (например, закрытые ключи) в памяти, поскольку она использует их в течение всего жизненного цикла программы. Производственные версии этой программы устанавливают RLIMIT_CORE на 0, чтобы гарантировать, что дамп ядра, который может содержать эту конфиденциальную информацию, никогда не создается.

Однако, хотя это не упоминается в man-странице core(8), apport-документация по вики Ubuntu утверждает,

Обратите внимание, что даже если ulimit установлен на отключенные файлы ядра (путем выбора размер файла ядра равен нулю, используя ulimit -c 0), apport все равно будет захватывать авария.

Есть ли способ в моем процессе (т.е. не полагаться на конфигурацию внешней системы), что я могу гарантировать, что основной дамп моего процесса никогда не генерируется?

Примечание. Я знаю, что существует множество методов (например, упомянутых в комментариях ниже), где пользователь с правами root или владельца процесса может все еще обращаться к конфиденциальным данным. Здесь я стараюсь предотвратить непреднамеренное обнаружение конфиденциальных данных, сохраняя их на диске, отправляя их в систему отслеживания ошибок Ubuntu или что-то в этом роде. (Спасибо Basile Starynkevitch за это явное.)

Ответ 1

В соответствии с спецификацией POSIX, дампы ядра происходят только в ответ на сигналы, действие которых является действием по умолчанию и действие по умолчанию которого заключается в "завершении процесс ненормально с дополнительными действиями".

Итак, если вы прокрутите вниз до списка в описании signal.h, все с "A" в разделе "Действие по умолчанию" column - это сигнал, о котором вам нужно беспокоиться. Используйте sigaction, чтобы поймать их всех и просто вызвать exit (или _exit) в обработчике сигналов.

Я считаю, что это единственные способы, с помощью которых POSIX позволяет генерировать дамп ядра. Разумеется, для этой цели у Linux могут быть и другие "задние двери"; к сожалению, мне не хватает эксперта ядра, чтобы быть уверенным...