12

私は次のように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

これに関する任意の助けをいただければ幸いです

4

5 に答える 5

4

これは、FUSE ファイル システムを開発する人々にとって永遠の問題です。このリンクが役立つ場合があります(1つの回答にまとめるのは文字通り多すぎます)。この回避策には、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 として実行されている使い捨ての VM ですべてのデバッグを行うことです。ここでは、setuid ビットを削除するだけで完了できます。コードをテストして、リークや違反がないことを確認してくださいヒューズを使用していないリンクされたライブラリ コードをテストするのは簡単です。ビルドを「valgrind-clean」に手渡し、ドキュメンテーションでそうしたことに注意してください。

次に、それを検出するためにいくつかのビットを取得し、valgrind/valgrind.h先に進んで実行する人のために短いメッセージを表示します。これを回避するためのハッキングにはルートの協力が必要であり、率直に言って、サンドボックスでも同様にはるかに簡単に実行できます。

また、setuid ビットをオンにして valgrind の下で実行することを拒否するのも簡単です。本当に実行したい場合はオフにするように人々に役立つメッセージを表示します。

于 2009-11-09T15:48:46.437 に答える
4

最も簡単な答えは、デバッグ中に setuid/setgid ビットを削除することだと思います。もちろん、プログラムに root 権限が本当に必要な場合は、おそらく valgrind を root として実行するか、valgrind 自体が setuid されているように見えるので、root:root に chown する必要があります。その後 valgrind を実行すると、root 権限が与えられます (そして、子 - デバッグされたプロセスも同様です)。

その後、そのアプリケーションで valgrind を実行できるようになります。

システムに大きなセキュリティホールを導入することになるため、注意してください. より安全な解決策は、valgrind を実行 (setuid) してそこから移動できるユーザー専用の特別なグループを作成することです...

于 2009-11-09T15:41:45.883 に答える
1

--trace-children=no? で実行しようとしたと思いますか? root アクセス権がある場合は、ここに回避策があるようです。

于 2009-11-09T15:40:33.297 に答える
-1

root (または set-uid ユーザー) として valgrind コマンドを実行すると、プログラムは uid の設定を使用する必要がなくなります。

于 2009-11-09T15:37:39.173 に答える
-1

これは、root ユーザーとして実行された場合でも発生します:) 最善の方法は、パーマを変更して「s」を削除し、実行することです

于 2014-06-06T11:40:44.667 に答える