2009-11-09 21 views
7

我運行的valgrind如下: -我如何運行valgrind到一個擁有超級用戶位的進程?

在/ usr/local/bin目錄/ Valgrind的 「PROCESS_NAME」

excecution它給我下面的錯誤後

==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

任何幫助可以理解

回答

3

這是開發FUSE文件系統的人員的永久性問題。 This link may help(在一個單一的答案中合併太過分了)。解決方法是及時更換fusermount,並(取決於)valgrind的一些附加選項,以防止其跟蹤兒童。

事實上,如果你下的valgrind運行我的FS,你得到這個輸出(是的,足夠多的人有,我實際檢測的valgrind上啓動了這一問題,顯示的鏈接):

[email protected]:~ # 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下運行,如果他們真的想要這樣做,則會顯示一條有用的消息讓人們將其變爲關閉

-1

運行Valgrind的命令作爲根(或任何set-uid用戶),那麼程序將不必使用設置uid。

+0

有時候,這是不可能的:) – 2009-11-12 17:07:14

+0

出現這種情況,即使事情是以root用戶身份運行:)最好的方法是更換perms以刪除「s」,然後運行 – 2014-06-06 11:43:00

1

我假設你試着用--trace-children = no來運行它?如果你有root權限,似乎有一個解決方法here

3

我想最簡單的答案是在調試時刪除setuid/setgid位。當然,如果程序真的需要root權限,你將不得不以root身份運行valgrind,或者因爲valgrind本身似乎是setuid,只是將其命名爲root:root。如果在此之後執行valgrind,它將具有root權限(其子進程也將被調試)。

然後,您應該能夠在該應用程序上運行valgrind。

請小心,因爲您將在您的系統中引入大的安全漏洞。更安全的解決方案是隻爲那些應該能夠運行(setuid)valgrind並從那裏開始的用戶創建特殊組...

+0

如果在所有情況下都這麼簡單。 FUSE依賴於setuid幫助程序,它不能由underpriv用戶取消調試,因此在FUSE文件系統中檢測內存泄漏非常困難。然而,對於手頭的話題很好的回答,對不起,切線下車,這是我的日常挫折之一:) – 2009-11-09 15:56:46

+0

誠然,(幾乎)總是有例外,但通常這種方法應該做的伎倆。 – Stan 2009-11-09 16:04:44

0

出現這種情況,即使事情root身份運行的用戶:) 最好的辦法是改變燙髮刪除「S」,並運行

相關問題