Erstellen Sie einen Core-Dump, wenn Sie ein Programm mit Sudo ausführen.

2598
Catskul

Kerne werden offenbar nicht entleert, wenn die Verwendung sudotrotz ulimit -cunbegrenzt eingestellt werden. Gibt es einen Weg, um das zu umgehen?

1

2 Antworten auf die Frage

3
Ambroz Bizjak

sudo setzt die Core-Dump-Einstellungen zurück, wie bei vielen anderen Umgebungsbedingungen. Sie können das Programm über einen Helfer ausführen, der zuerst Core-Dumps aktiviert und dann das Programm ausführt. Erstellen Sie zum Beispiel einen Wrapper /usr/local/bin/coredumpund dann chmod +x:

$ cat /usr/local/bin/coredump  #!/bin/sh ulimit -c unlimited exec "$@" 

Dann

sudo /usr/local/bin/coredump /your/crashing/program 
Ich habe festgestellt, dass selbst wenn ulimit -c auf unbegrenzt gesetzt ist, Sudo su bis root noch keinen Kern produzieren wird. Catskul vor 12 Jahren 0
Ja, ich habe bereits erwähnt, was Sudo für die Einstellung des Core Dumps benötigt. Sie müssen "ulimit -c unlimited" nach dem Sudo ausführen. Ambroz Bizjak vor 12 Jahren 0
Das habe ich gesagt. Wenn Sie Sudo su verwenden und dann das Kernlimit auf "unbegrenzt" setzen, würde es immer noch keinen Kern erzeugen. Dies ist nach der Verwendung von sysctl kein Problem mehr, aber obwohl das Verhalten von suid_dumpable gut dokumentiert ist, scheint es aus irgendeinem Grund in der Praxis nicht so konsistent zu sein. Catskul vor 12 Jahren 0
0
Catskul

Es scheint, es kann mit der Option -s wie folgt durchgeführt werden:

sudo -s "ulimit -c unlimited; ./segfaultProg" 

Jedoch 2 Vorbehalte:

  1. Möglicherweise müssen Sie den suid_dumpableParameter mit einstellensysctl -w kernel.suid_dumpable=2
  2. Möglicherweise müssen Sie einen alten Kern aus dem Weg räumen. Anscheinend gibt es spezielle Regeln, nach denen es sich weigern kann, einen Kern zu schreiben, wenn das suid-Bit gesetzt ist, und dort ist bereits ein Kern.

Einzelheiten finden Sie im Folgenden:

http://www.randombugs.com/linux/core-dumps-linux.html