Ubuntu, когда дамп ядра не происходит, когда программа запускается от имени пользователя root (sudo) - PullRequest
2 голосов
/ 28 октября 2009

когда я запустил программу, которая вызывает ошибку сегментации от имени пользователя root, ядро ​​не выгружается .. Я проверил ulimit -c и он не ограничен ... Но если я запустился как обычный пользователь, программа выдает дамп ядро ..

    suresh@suresh-desktop:~$ ulimit -c
    unlimited
    suresh@suresh-desktop:~$ ./main 
    Segmentation fault (core dumped)
    suresh@suresh-desktop:~$ sudo ./main 
    Segmentation fault
    suresh@suresh-desktop:~$ 








    root@suresh-desktop:~# ulimit -c unlimited
    root@suresh-desktop:~# ./main 
    Segmentation fault


    //main.c

        main()
        {

        *((int *)0xb80000) = 123;
        }   

root@suresh-desktop:~# ulimit -a -S
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited










root@suresh-desktop:~# ulimit -a -H
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Ответы [ 5 ]

2 голосов
/ 13 сентября 2011

Мне кажется, у меня была такая же проблема. Мне удалось правильно сгенерировать основные файлы под sudo, изменив файл /etc/security/limits.conf, добавив следующую строку:

root   soft   core   unlimited

Похоже, что при запуске sudo создается новая оболочка для пользователя root с ограничением ядра, равным 0. Это изменение «исправляет» эту проблему, хотя я уверен, что это открывает некоторый пот

2 голосов
/ 28 октября 2009

Просто быстрый запрос. Основной файл, принадлежащий пользователю suresh, все еще существует, когда вы запускаете от имени пользователя root (и каковы его разрешения)?

Может случиться так, что система не перезапишет существующий дамп ядра, если разрешения защищают его (несмотря на предполагаемые суперсилы root).

Попробуйте удалить текущий файл ядра перед запуском как root (проверьте права доступа к каталогу, чтобы убедиться, что root может создавать файлы там).

Для чего это стоит, есть длинный список причин, по которым ядро ​​не будет сброшено. Некоторые из них не применимы к вашей ситуации, но вы должны проверить их на наличие подсказок (если моя гипотеза выше неверна).

  • Ядро было бы больше, чем текущий ulimit.
  • У вас нет прав для создания дампа ядра (каталог и file).
  • Файловая система недоступна для записи и не имеет достаточно свободного места.
  • В рабочем каталоге есть подкаталог с именем core.
  • Есть файл с именем core с несколькими жесткими ссылками.
  • В исполняемом файле включен бит suid или sgid. То же самое, если у вас есть разрешения на выполнение, но нет прав на чтение файла.
  • Ошибка сегментации может быть вызвана ошибкой ядра, проверьте системные журналы.
1 голос
/ 09 ноября 2009

исполняемые файлы setuid (пример sudo) имеют некоторые ограничения, попробуйте:

$ sudo -i
# echo -n 2 > /proc/sys/fs/suid_dumpable
# exit
$ sudo ./main

Убедитесь, что предварительно удалили все старые файлы 'core' (существующий файл core не будет перезаписан)

Возможны потенциальные угрозы безопасности - поищите в сети «suid_dumpable»

0 голосов
/ 28 октября 2009

Возможно, вы захотите взглянуть на этот , чтобы понять, почему дамп ядра не записывается. Ответ, предоставленный paxdiablo, вероятно, находится на отметке. Возможно, вы захотите настроить запись дампов ядра, то есть core- {PID}, а не просто 'core'. В любом случае, это хорошая практика.

man 5 core должен содержать ту же информацию, что и на странице, на которую я ссылался.

0 голосов
/ 28 октября 2009
sudo  sh -c "ulimit -c unlimited; ./main"
Segmentation fault (core dumped)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...