ls
, но анализируя вывод du
или df
относительно распространено. (Следите, для df
, необходимо использовать df -P
при парсинге.)Можно только отладить setuid или setgid программу, если отладчик работает как корень. Ядро не позволит Вам звонить ptrace
на программе, работающей с дополнительными полномочиями. Если бы это сделало, то Вы смогли бы заставить программу выполнить что-либо, которое эффективно означало бы, что Вы могли, например, выполнять корневую оболочку путем обращения к отладчику /bin/su
.
При выполнении Gdb как корня Вы сможете запустить свою программу, но Вы будете только наблюдать ее поведение, когда выполнено корнем.
Если необходимо отладить программу, когда она не запускается корнем, запустите программу за пределами Gdb, сделайте ее паузой некоторым способом прежде, чем добраться до неприятной части, и attach
процесс в Gdb (at 1234
где 1234 является идентификатором процесса).
Вот способ запустить процесс в остановленном состоянии, если Вы будете. Используйте сценарий удара, делающий:
echo $BASHPID; kill -STOP $BASHPID; exec sudo -u unpriviledged_user -g the_group_if_not_primary command
Сделайте то выполнение в фоновом режиме.
Затем запустите gdb
, и присоедините к pid, который был распечатан.
Необходимо будет ступить через exec
команда с gdb
, но Вы сможете отладить с самого начала.
gdbserver
как корень и подключение к нему как обычный пользователь. Из Вашего комментария кажется, что Вам не удалось сделать это простой путь (работающий gdb как корень), но я не понимаю то, что пошло не так, как надо, таким образом, я не могу помочь. – Gilles 'SO- stop being evil' 01.07.2011, 09:51