Considerare questo scenario in cui un eseguibile A.bin utilizza libY.so e libZ.so. A.c, Y.c e Z.c sono tutti scritti in C. Z.c e Y.c sono compilati in rispettivi file .so.Impossibile caricare il programma dopo aver impostato il bit setuid su
Questa è la struttura di directory dei file
$ HOME/bin/A.bin $ HOME/lib/libY.so $ HOME/lib/libZ.so
Quando eseguo A .bin come utente normale, A.bin funziona normalmente come previsto. Nota: $ LD_LIBRARY_PATH contiene $ home/lib
Ho modificato alcuni codici in A.c aggiungendo alcune funzionalità che richiedono i privilegi di amministratore (come l'associazione a una porta inferiore a 1000). Ho impostato il bit setuid per A.bin, libY.so e libZ.so su rwsrwsrws e ho cambiato la proprietà dei file su root. Quando provo a correre A.bin, ottengo il seguente errore
ld.so.1: A.bin: fatale: libY.so: aprire riuscita: Nessun file o directory Killed
Quando ho basta rimuovere il permesso setuid da tutti quei file, quindi il binario viene eseguito tranne che la funzionalità fallisce laddove sono necessari i privilegi di root.
Come superare questo problema?
Edit: Il sistema operativo è Solaris 5.10
* * Qualsiasi sistema operativo UNIX-like deve ignorare LD_LIBRARY_PATH per i binari setuid, altrimenti è un buco di sicurezza si potrebbe guidare un camion attraverso. – caf
@caf: ne ho incontrato uno che non funzionava. Tutti i binari di setuid erano collegati staticamente. – Joshua