2009-11-09 7 views
7

다음과 같이 내가 Valgrind의를 실행하고 있습니다 : -어떻게 슈퍼 유저 비트가있는 프로세스에 valgrind를 실행합니까?

/usr/지방/빈/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 "process_name"

-을 - 다음과 같이 -R-SR-XR-X/usr/지방/빈/Valgrind의

내 처리 허용은

플랫폼 : 리눅스 VMLINUX3 2.6.9-78.0.22.ELsmp (RHEL)

Valgrind의 버전 : Valgrind의-3.5.0이에 어떤 도움을 이해할 수있을 것이다

답변

3

FUSE 파일 시스템을 개발하는 사람들에게는 영구적 인 문제입니다. This link may help (단 하나의 대답으로 통합하는 것은 너무 문자 그대로입니다). 해결 방법으로는 fusermount와 (옵션에 따라) 어린이를 추적하지 못하도록 valgrind에 대한 몇 가지 추가 옵션을 적시에 교체해야합니다.

는 사실, Valgrind의 아래에 내 FS를 실행하는 경우, 당신은이 출력을 얻을 (예, 충분한 사람들은 I가 실제로 시작 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 .... 

을 가장 쉬운 방법 할 일은 루트로 실행되는 일회용 VM에서 디버깅을하는 것입니다. 여기서 setuid 비트를 버리고 완료하면됩니다. 코드을 누출 또는 위반이 없도록 테스트하십시오. 퓨즈를 사용하지 않는 링크 된 라이브러리 코드를 테스트하기에 충분히 쉽습니다. 'valgrind-clean'을 빌드하고 문서에서 그렇게했는지 확인하십시오.

그런 다음 valgrind/valgrind.h의 비트를 찾아서 감지하고 어쨌든이를 실행하는 사람들을위한 짧은 메시지를 보여줍니다. 해킹은 루트 협력을 요구하며 솔직히 샌드 박스에서 훨씬 쉽게 할 수 있습니다.

setuid 비트가 설정된 valgrind에서 실행을 거부하기가 쉽기 때문에 사람들이 을 해제하려는 유용한 메시지를 표시하고 실제로 수행하고 싶다면을 해제하십시오.

-1

실행 Valgrind의 명령 루트 (또는 set-uid 사용자가 누구인지)로 설정하면 프로그램은 uid를 설정할 필요가 없습니다.

+0

실행하기 위해 파마를 변경하는 것입니다, 그건 그냥 불가능 : –

+0

일이있을 때이도 발생 루트 사용자로 실행 :) 가장 좋은 방법은 perms를 "s"를 제거하도록 변경하고 –

1

--trace-children = no로 실행 해 본다고 가정합니다. 루트 액세스 권한이있는 경우 here 해결 방법이있는 것으로 보입니다.

3

디버깅 중에 setuid/setgid 비트를 제거하는 것이 가장 간단한 해결책이라고 가정합니다. 물론 프로그램에 실제로 루트 권한이 필요한 경우 루트로 valgrind를 실행하거나 valgrind 자체가 루트로 setuid 된 것처럼 보이기 때문에 루트 권한을 사용해야합니다. root. 그 후에 valgrind를 실행하면 루트 권한을가집니다 (자식 프로세스 인 디버그 된 프로세스도 마찬가지입니다).

그러면 해당 응용 프로그램에서 valgrind를 실행할 수 있어야합니다.

시스템에 큰 보안 구멍이 생기므로주의하십시오. 안전한 솔루션은 valgrind를 실행하고 (setuid) 실행할 수 있어야하는 사용자에게만 특수 그룹을 만드는 것입니다.

+0

을 실행하는 것입니다. 모든 경우에 그렇게 단순하다면 실행하십시오. FUSE는 setuid 도우미에 의존합니다.이 도우미는 디버깅을 위해 기본 사용자가 설정을 해제 할 수 없으므로 FUSE 파일 시스템에서 메모리 누수를 감지하기가 매우 어렵습니다. 그러나, 바로 가까이에있는 주제에 대한 좋은 대답은, 탄젠트에서 벗어나서 미안하지만, 이것은 나의 일상적인 좌절감 중 하나입니다 :) –

+0

(거의) 항상 예외가 있지만, 일반적으로이 접근법은 트릭을해야합니다. – Stan

0

이 일을 루트 사용자로 실행 한 경우에도 발생 : 가장 좋은 방법은 "S"를 제거하고, 때로는