gdb может отладить корневые программы suid?

  1. Поскольку они не существовали первоначально, и поведение по умолчанию назад совместимо. Кроме того, потому что они не существуют на всех вариантах Unix, и поведение по умолчанию совместимо с другими вариантами Unix.
  2. Для многих инструментов, потому что они предназначаются, чтобы быть parseable другими инструментами. Это редко имеет место для ls, но анализируя вывод du или df относительно распространено. (Следите, для df, необходимо использовать df -P при парсинге.)
  3. Поскольку некоторые люди предпочитают 37 550 836 форматов, потому что, когда Вы видите набор таких чисел, их относительный размер визуально ясен (количество цифр).
16
01.07.2011, 03:03
2 ответа

Можно только отладить setuid или setgid программу, если отладчик работает как корень. Ядро не позволит Вам звонить ptrace на программе, работающей с дополнительными полномочиями. Если бы это сделало, то Вы смогли бы заставить программу выполнить что-либо, которое эффективно означало бы, что Вы могли, например, выполнять корневую оболочку путем обращения к отладчику /bin/su.

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

Если необходимо отладить программу, когда она не запускается корнем, запустите программу за пределами Gdb, сделайте ее паузой некоторым способом прежде, чем добраться до неприятной части, и attach процесс в Gdb (at 1234 где 1234 является идентификатором процесса).

22
27.01.2020, 19:48
  • 1
    Да я попробовал это, но процесс запускается как корень, и gdb должен быть запущен как корень также, чтобы смочь присоединить процесс корня. –  jyz 01.07.2011, 03:07
  • 2
    @jyzuz Да, как я пишу Вам, должен запустить gdb как корень. Или если Вы хотите Вас, может использовать удаленную отладку и работать просто gdbserver как корень и подключение к нему как обычный пользователь. Из Вашего комментария кажется, что Вам не удалось сделать это простой путь (работающий gdb как корень), но я не понимаю то, что пошло не так, как надо, таким образом, я не могу помочь. –  Gilles 'SO- stop being evil' 01.07.2011, 09:51

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

echo $BASHPID; kill -STOP $BASHPID; exec sudo -u unpriviledged_user -g the_group_if_not_primary command

Сделайте то выполнение в фоновом режиме.

Затем запустите gdb, и присоедините к pid, который был распечатан.

Необходимо будет ступить через exec команда с gdb, но Вы сможете отладить с самого начала.

7
27.01.2020, 19:48

Теги

Похожие вопросы