Как запустить Valgrind для процесса, который имеет бит супер пользователя? - PullRequest
8 голосов
/ 09 ноября 2009

Я использую Valgrind следующим образом: -

/ usr / local / bin / valgrind "имя_процесса"

После исключения выдает следующую ошибку

==21731==
==21731== Warning: Can't execute setuid/setgid executable: 
==21731== Possible workaround: remove --trace-children=yes, if in effect
==21731==
valgrind: "process name": Permission denied

Мое разрешение от valgrind следующее: -r-sr-xr-x / usr / local / bin / valgrind

Мое разрешение процесса следующее: - -r-sr-xr-x "имя_процесса"

Платформа: Linux VMLINUX3 2.6.9-78.0.22.ELsmp (RHEL)

Версия Valgrind: valgrind-3.5.0

Любая помощь в этом будет оценена

Ответы [ 5 ]

3 голосов
/ 09 ноября 2009

Это постоянная проблема для людей, которые разрабатывают файловые системы FUSE. Эта ссылка может помочь (это слишком буквально, чтобы объединить в одном ответе). Обходной путь включает своевременную замену fusermount и (в зависимости) некоторые дополнительные опции для valgrind, чтобы предотвратить его отслеживание детей.

На самом деле, если вы запускаете мою FS под valgrind, вы получите такой вывод (да, у достаточного количества людей была такая проблема, что я фактически обнаружил valgrind при запуске и отобразил ссылку):

root@tower:~ # valgrind xsfs /xs
==9479== Memcheck, a memory error detector.
==9479== Copyright (C) 2002-2008, and GNU GPL'd, by Julian Seward et al.
==9479== Using LibVEX rev 1884, a library for dynamic binary translation.
==9479== Copyright (C) 2004-2008, and GNU GPL'd, by OpenWorks LLP.
==9479== Using valgrind-3.4.1, a dynamic binary instrumentation framework.
==9479== Copyright (C) 2000-2008, and GNU GPL'd, by Julian Seward et al.
==9479== For more details, rerun with: -v
==9479==
******** Valgrind has been detected by xsfs
******** If you have difficulties getting xsfs to work under Valgrind,
******** see the following thread:
******** http://www.nabble.com/valgrind-and-fuse-file-systems-td13112112.html
******** Sleeping for 5 seconds so this doesn't fly by ....

Самый простой способ - это все ваши отладки на одноразовой виртуальной машине, работающей от имени root, где вы можете просто отбросить бит setuid и покончить с этим. Убедитесь, что вы протестировали свой код на отсутствие утечек или нарушений, достаточно просто протестировать любой связанный код библиотеки, не используя fuse. Передайте вашу сборку 'valgrind-clean' и обратите внимание, что вы сделали это в документации.

Затем возьмите несколько битов из valgrind/valgrind.h, чтобы обнаружить его, и покажите короткое сообщение для тех, кто все равно его запускает. Для того чтобы обойти эту проблему, требуется сотрудничество с root-пользователями, и, откровенно говоря, гораздо проще сделать это в песочнице.

Также достаточно легко отказаться от работы под valgrind с включенным битом setuid, показывая полезное сообщение для людей, чтобы отключить его выключить , если они действительно хотят это сделать.

3 голосов
/ 09 ноября 2009

Полагаю, самый простой ответ - удалить бит setuid / setgid во время отладки. Конечно, если программе действительно нужны привилегии root, вам, вероятно, придется запустить valgrind от имени root или поскольку сам valgrind, похоже, настроен на установку, просто преобразуйте его в root: root. Если после этого вы выполните valgrind, у него будут привилегии суперпользователя (как и дочерние - отлаженные процессы).

После этого вы сможете запустить valgrind для этого приложения.

Только будьте осторожны, потому что вы будете вводить БОЛЬШУЮ дыру в безопасности в вашей системе. Более безопасным решением было бы создание специальной группы только для пользователей, которые должны иметь возможность запускать (setuid) valgrind и идти оттуда ...

1 голос
/ 09 ноября 2009

Я предполагаю, что вы пытались запустить его с --trace-children = no? Если у вас есть root-доступ, то здесь есть обходной путь .

0 голосов
/ 06 июня 2014

Это происходит, даже когда все запускается от имени пользователя root :) Лучше всего поменять перманент на удаление "s" и запустить

0 голосов
/ 09 ноября 2009

Запустите команду valgrind от имени root (или от того, кто является пользователем set-uid), и программе не придется использовать установку uid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...