Nel mio ambiente personalizzato è precaricata una libreria di intercettazione che esegue un'implementazione speciale delle chiamate bind()
, connect()
, ecc.L'utilizzo delle funzionalità di linux disabilita LD_PRELOAD
Il problema che vedo è quando un'applicazione abilita esplicitamente le funzionalità utilizzando il comando setcap
, l'esecuzione dell'applicazione non riesce a precaricare la libreria interceptor e chiama la libc predefinita connect()
.
È un comportamento previsto? Se sì, quale potrebbe essere la ragione per disabilitare LD_PRELOAD
?
C'è qualche modifica o metodo che è possibile utilizzare per precaricare correttamente la libreria con le funzionalità abilitate.
Vedere [questa domanda] (http://stackoverflow.com/questions/9843178/linux-capabilities-setcap-seems-to-disable-ld-library-path) per le risposte. – scai
È possibile scrivere un programma wrapper per il binario di destinazione. Sarà più o meno necessario impostare setuid root. Forgerà un processo figlio, quindi eseguirà il binario di destinazione (con il set 'LD_PRELOAD'); il file binario di destinazione non ha alcuna capacità di file impostata. La libreria di precarico comunica quindi con il processo figlio (tramite ad esempio una coppia di socket su say fd 3), con il processo figlio che concede le capacità necessarie al processo di destinazione, quindi esce (e la libreria di precarico raccoglie il bambino). Fammi sapere se vuoi un esempio. –
@NominalAnimal Sono contento se puoi mostrarmi un esempio. –