2014-09-29 3 views
3

Название в значительной степени говорит обо всем. Я пытаюсь отлаживать программу, для которой установлен бит setgid для другой группы (назовем ее группой A). Я выполняю gdb как член группы B. Для аргумента предположим, что я не могу просто быть добавлен в группу A. Это обе группы non root/sudo.Как запустить GDB как группу с битом GID

Когда я запускаю программу через командную строку, она правильно выполняется с разрешениями группы А, но когда я запускаю gdb, программа вызывает getegid, что показывает, что я все еще запущен как группа B. Есть ли способ изменить это так, что я могу запустить gdb как группу A? Опять же, группа A имеет бит setgid, поэтому, не следует ли gdb запускать его как группу A?

ответ

0

В большинстве систем GDB использует ptrace для контроля, изучения и изменения целевого процесса.

Как подробно описано в execve man page, Setuid и setgid биты исполняемого файла, не будет иметь никакого эффекта, если процесс находится в стадии ptraced:

Если бит Set-User-ID установлен на программный файл указал по имени файла, а основная файловая система не установлена ​​nosuid (флаг MS_NOSUID для mount (2)), , и вызывающий процесс не обрабатывается, тогда эффективный идентификатор пользователя вызывающего процесса изменяется на владелец файла программы. Аналогично, когда бит set-group-ID файла программы установлен, эффективный идентификатор группы вызывающего процесса устанавливается в группу файла программы.

[Это не совсем так. Если вызывающий процесс подвергается ptraced и работает от имени root, биты setuid и setgid будут соблюдены.]

Это ограничение не почитания битов setuid и setgid на ptraced-процессах уже давно является свойством систем Unix, как меры безопасности, чтобы пользователи не использовали ptrace для изменения поведения привилегированных процессов.

Если вы хотите, чтобы биты setuid и setgid вступили в силу в отслеживаемых процессах, в общем случае процесс отладчика должен выполняться с правами root или иметь возможность CAP_SYS_PTRACE.

+0

Как добавить функцию 'CAP_SYS_PTRACE' в' gdb' ?. –

Смежные вопросы