如何在具有超级用户位的进程中运行 valgrind?

问题描述 投票:0回答:6

我按如下方式运行 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

对此的任何帮助将不胜感激

linux memory valgrind setuid
6个回答
4
投票

对于开发 FUSE 文件系统的人来说,这是一个永恒的问题。 此链接可能会有所帮助(实际上太多了,无法合并到一个答案中)。解决方法包括及时更换 fusionmount,以及(视情况而定)valgrind 的一些附加选项以防止其追踪儿童。

事实上,如果你在 valgrind 下运行我的 FS,你会得到这个输出(是的,有足够多的人遇到这个问题,我实际上在启动时检测到了 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

中获取一些位来检测它,并为那些继续运行它的人显示一条简短消息。解决这个问题的黑客需要根合作,坦率地说,在沙箱中也更容易完成。


在 setuid 位打开的情况下拒绝在 valgrind 下运行也很容易,如果人们确实想要这样做,则会显示一条有用的消息来将其关闭

我想最简单的答案是在调试时删除 setuid/setgid 位。当然,如果程序确实需要root权限,您可能必须以root身份运行valgrind,或者因为valgrind本身似乎是setuid,只需将其chown为root:root。如果您之后执行 valgrind ,它将拥有 root 权限(它的子进程 - 调试进程也将如此)。

4
投票
然后您应该能够在该应用程序上运行 valgrind。

请小心,因为您将在系统中引入一个巨大的安全漏洞。更安全的解决方案是仅为应该能够运行(setuid)valgrind 并从那里开始的用户创建特殊组...

我假设您尝试使用 --trace-children=no 运行它?如果您有 root 访问权限,似乎有一个解决方法

1
投票

我尝试了上述所有建议,但没有一个真正适合我。

0
投票
最后我执行了“sudo chmod 777

”并允许系统上的所有用户读取、写入和执行文件或目录。这是最宽松的设置,但可能并不建议在所有情况下使用它,因为它可能会产生安全漏洞。通常建议尽可能使用更具限制性的权限。

命令“sudo chmod 777

”用于修改文件或目录的权限。以下是该命令的详细说明: “sudo”:代表“超级用户do”,用于以管理权限执行以下命令。它允许您执行需要 root 或超级用户权限的操作。 “chmod”:它是用于更改文件或目录权限的命令。 “777”:这是正在应用的权限设置。三位数中的每一位数字代表不同用户组的权限:所有者、组和其他。

第一个数字(7)代表文件所有者的权限。在这种情况下,所有者将拥有读取、写入和执行权限 (4+2+1 = 7)。

第二个数字(7)代表文件所属组的权限。在这种情况下,该组还将具有读取、写入和执行权限。

第三个数字(7)代表其他人的权限,即既不是所有者也不是组中的用户。在这种情况下,其他人也将拥有读取、写入和执行权限。

以root身份(或任何set-uid用户)运行valgrind命令,那么程序就不必使用设置uid。

-1
投票

即使以 root 用户身份运行也会发生这种情况:) 最好的方法是更改权限以删除“s”,然后运行

-1
投票

© www.soinside.com 2019 - 2024. All rights reserved.