как запустить valgrind для процесса, в котором есть бит super user?

Я запускаю 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 "process_name"

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

версия Valgrind: valgrind-3.5.0

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

5 ответов


это вечная проблема для людей, которые разрабатывают файловые системы предохранителей. эта ссылка может помочь (это буквально слишком много, чтобы консолидироваться в одном ответе). Работа вокруг включает в себя своевременную замену 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 и сделать с ним. Убедитесь, что вы тестируете код код, чтобы не иметь каких-либо утечек или нарушений, его достаточно легко проверить любой связанный код библиотеки, не используя предохранитель. Передайте свою сборку "valgrind-clean" и обратите внимание, что вы сделали это в документации.

затем возьмите несколько бит из valgrind/valgrind.h чтобы обнаружить его и показать короткое сообщение для тех, кто идет вперед и запускает его в любом случае. Хаки для работы вокруг него требуют корневого сотрудничества, и, честно говоря, гораздо проще сделать в песочнице.

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


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

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

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


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


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


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