Как отладить программу, которая должна запускаться как пользователь root из gdb (Eclipse) от имени пользователя (установить gdb suid root?) - PullRequest
2 голосов
/ 06 августа 2010

Мне нужно отладить программу в Linux с помощью Eclipse (gdb).Программа запускается как root и довольно большая.Бинарный файл с символами отладки имеет размер около 250 МБ и более 60 запущенных потоков после запуска.

Я думаю о лучшем решении:

  1. Использование gdbserver
  2. Запустите Eclipse от имени root
  3. Установите gdb suid

Я думаю, что номер 1 (gdbserver) будет лучшим решением, к сожалению, он не работает надежно.Соединение между GDB и GDB-сервером потеряно.Я думаю, что есть проблема с огромным объемом данных, передаваемых между eclipse <-> gdb <-> gdbserver.

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

Я не пробовал номер 3 (suid gdb).Что вы думаете об этом?Это работает вообще?Я знаю, что suid root gdb так же безопасен, как отсутствие пароля root, но машина используется только для разработки и отладки.И, конечно, может существовать сценарий «включить / отключить», который устанавливает бит suid только при необходимости.

Есть ли у вас какие-либо другие предложения?

Ответы [ 2 ]

2 голосов
/ 02 декабря 2010

Менее навязчиво (не нужно связываться с suid) - это настроить себя для запуска gdb от имени root в / etc / sudoers, а затем просто выполнить:

sudo xauth merge ~ / .Xauthority

sudo gdb

, где необходима первая команда, чтобы разрешить открытое подключение root к X-серверу

1 голос
/ 06 августа 2010

1) или 3) звучат как прекрасные решения.

Объем трафика gdb <-> gdbserver никогда не бывает очень большим. Потерянное соединение означает, что вы не используете надежный транспортный протокол (какой протокол соединения вы используете , вы использовали локальный сокет?) Или ошибка в вашей версии gdb / gdbserver (какая версия?)

Вы также можете рассмотреть вопрос 4: измените программу на , а не , в первую очередь требуются права суперпользователя. Любая большая программа будет иметь ошибки. Ошибки + suid-root => СВОЙ компьютер. Предположительно, вы отправите эту программу своим клиентам. Если они переносят СОБСТВЕННУЮ машину, они могут пойти за тобой за ущербом.

Обычно существует только очень небольшой набор операций, для которых действительно требуются полномочия root, и такие операции (если они достаточно редки) лучше всего выполнять с помощью «вспомогательного двоичного файла» (который является suid-root, но который не запускает все время и мало => меньше вероятность ошибок).

...