Почему при создании приложения SUID не создается дамп ядра?

Я настраиваю свою среду для создания основного дампа всего, что сбой, однако, когда я запускаю программу с SUID, установленную другим пользователем, чем исполняющий пользователь, он не создает дамп ядра. Любая идея, почему это может быть? Я не мог найти его нигде в Интернете, я думаю, что это своего рода функция безопасности, но я бы хотел, чтобы она была отключена …

Проблема:

$ cd /tmp $ cat /etc/security/limits.conf | grep core * - core unlimited root - core unlimited $ ls -l ohai -rwsr-sr-x 1 root root 578988 2011-06-23 23:29 ohai $ ./ohai ... Floating point exception $ sudo -i # ./ohai ... Floating point exception (core dumped) # chmod -s ohai # exit $ ./ohai ... Floating point exception (core dumped) 

Изменить: чтобы он работал как можно более безопасным, теперь у меня есть следующий скрипт для настройки среды:

 mkdir -p /var/coredumps/ chown root:adm /var/coredumps/ chmod 772 /var/coredumps/ echo "kernel.core_pattern = /var/coredumps/core.%u.%e.%p" >> /etc/sysctrl.conf echo "fs.suid_dumpable = 2" >> /etc/sysctl.conf echo -e "*\t-\tcore\tunlimited" >> /etc/security/limits.conf echo -e "root\t-\tcore\tunlimited" >> /etc/security/limits.conf 

Теперь все, что осталось сделать, это добавить ACL в / var / coredumps, чтобы пользователи могли добавлять файлы и не изменять и не читать их снова. Единственным уменьшением является то, что у меня все еще будет проблема с chroot'ed приложениями, которые нуждаются в bind mount или что-то в этом роде.

  • Почему запрос пароля немного отстает после ввода имени пользователя в tty?
  • Разрешения SUID - что правильно?
  • Может ли seccomp использоваться для обеспечения детерминированного исполнения?
  • Как правильно (безопасно) подключиться к VPN с OpenVPN в Debian?
  • Простой ограниченный scp
  • Как обрабатывать агрессивные HTTP-запросы с одного и того же IP-адреса?
  • Доступ к веб-странице https через Firefox / Chrome из командной строки
  • Есть ли способ сохранить команду в вашей истории?
  • 3 Solutions collect form web for “Почему при создании приложения SUID не создается дамп ядра?”

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

    Если дамп ядра принадлежит root, я не вижу очевидной дыры в безопасности, хотя ядро ​​должно быть осторожным, чтобы не перезаписывать существующий файл.

    Linux отключает базовые дампы для программ setxid. Чтобы включить их, вам нужно выполнить хотя бы следующее (я еще не проверял, что этого достаточно):

    • Включите стандартные дампы setuid, установив fs.suid_dumpable sysctl на 2, например, с помощью echo 2 >/proc/sys/fs/suid_dumpable . (Примечание: 2, а не 1; 1 означает «Я отлаживаю систему в целом и хочу удалить всю безопасность».)
    • Вызвать prctl(PR_SET_DUMPABLE, 1) из программы.

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

    Из приведенного выше примера видно, что вы можете получить дамп ядра при работе от имени root или если вы удалите эскалацию привилегий.

    Хотя это может быть удобно (для разработчиков только метит), чтобы иметь легкий доступ к coredump из программы setuid, это дыра в безопасности, и ее следует оставить на месте.

    Я решил, что также поделюсь своим прецедентом, пока не забуду. Это может быть удобно и для будущего меня, так как я решал одну и ту же проблему несколько месяцев назад, и мне потребовалось слишком много времени, чтобы узнать еще раз. ОК. на самом деле это не ядро-дамп, а трассировка стека, которая также полезна.

    Проблема: не знаю, что там происходит:

     sudo id Segmentation fault 

    Решение: Переместить suid бит от sudo до valgrind отлично работает:

     chmod +s /usr/bin/valgrind chmod -s /usr/bin/sudo valgrind /usr/bin/sudo id 

    Если debuginfo установлен, выдается хороший backtrace.

    Linux и Unix - лучшая ОС в мире.