2009-11-09 7 views
7

Sono in esecuzione valgrind come segue: -come faccio a eseguire valgrind su un processo con bit utente super?

/usr/local/bin/valgrind "nome_processo"

Dopo excecution sua avermi dato seguente errore

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

Mio permesso valgrind è il seguente: - -r-sr-xr-x/usr/local/bin/valgrind

mio permesso processo è il seguente: - -r-sr-xr-x "nome_processo"

0.123.

Piattaforma: Linux VMLINUX3 2.6.9-78.0.22.ELsmp (RHEL)

versione Valgrind: valgrind-3.5.0

Qualsiasi aiuto su questo sarà apprezzato

risposta

3

Questo è un problema perpetuo per le persone che sviluppano i file system FUSE. This link may help (è abbastanza letteralmente troppo da consolidare in una singola risposta). La soluzione prevede una sostituzione just-in-time di fusermount e (a seconda) alcune opzioni aggiuntive a valgrind per impedirne il tracciamento dei bambini.

In realtà, se si esegue il mio FS sotto valgrind, si ottiene questa uscita (sì, abbastanza persone avuto quel problema che ho effettivamente rilevato valgrind fase di start up e visualizzato il link):

[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 .... 

Il la cosa più semplice da fare consiste nel debugging di una macchina virtuale usa e getta in esecuzione come root, in cui è possibile abbandonare il bit setuid e utilizzarlo. Assicurati di testare il tuo codice per non avere perdite o violazioni, è abbastanza facile testare qualsiasi codice di libreria collegata che non utilizza il fusibile. Distribuisci il tuo build 'valgrind-clean' e nota che lo hai fatto nella documentazione.

Quindi, prendi alcuni bit da valgrind/valgrind.h per rilevarlo e mostra un breve messaggio per quelli che vanno avanti ed eseguirlo comunque. Gli hacker per aggirare il problema richiedono una cooperazione di base, e francamente, sono molto più facili da fare in una sandbox altrettanto bene.

È anche abbastanza facile rifiutarsi di eseguire sotto valgrind con il bit setuid attivato, mostrando un messaggio utile per le persone che lo trasformano di sconto su se lo desiderano davvero.

-1

Eseguire il comando valgrind come root (o chiunque sia l'utente di set-uid), il programma non dovrà fare uso di impostare l'uid.

+0

A volte, questo è solo non è possibile :) –

+0

Questo accade anche quando le cose erano Esegui come utente root :) Il modo migliore è cambiare i permanenti per rimuovere "s" ed eseguire –

1

Suppongo che tu abbia provato a eseguirlo con --trace-children = no? Se si dispone dell'accesso root, sembra che ci sia una soluzione alternativa here.

3

Suppongo che la risposta più semplice sarebbe quella di rimuovere il bit setuid/setgid durante il debug. Ovviamente se il programma ha davvero bisogno dei privilegi di root, probabilmente dovresti eseguire valgrind come root o dal momento che valgrind stesso sembra essere setuid semplicemente chown to root: root. Se esegui valgrind dopo che avrà i privilegi di root (e così sarà anche per i bambini - processi di debug).

Dovresti quindi essere in grado di eseguire valgrind su tale applicazione.

Basta fare attenzione, perché si introdurrà un grande buco di sicurezza nel sistema. Soluzione più sicura sarebbe quella di creare un gruppo speciale solo per gli utenti che dovrebbero essere in grado di eseguire (setuid) valgrind e andare da lì ...

+0

Se solo fosse così semplice in tutti i casi. FUSE fa affidamento su un helper setuid, che non può essere disattivato dagli utenti underpriv per il debug, quindi è estremamente difficile individuare perdite di memoria nei file system FUSE. Tuttavia, buona risposta per l'argomento in questione, mi dispiace di scendere su una tangente, questa è una delle mie frustrazioni quotidiane :) –

+0

Vero, come (quasi) sempre ci sono eccezioni, ma generalmente questo approccio dovrebbe fare il trucco. – Stan

0

Questo accade anche quando le cose sono state eseguiti come utente root :) Il modo migliore è quello di cambiare le permanenti per rimuovere "s", ed eseguire

Problemi correlati