2009-08-21 13 views
6

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

risposta

3

In alcuni Unix varianti, eseguibili suid hanno alcune caratteristiche di sicurezza come ignorare i LD_LIBRARY_PATH, controllando proprietà e di accesso diritti sul file eseguibile e utilizzato librerie condivise, ... non lo faccio ricorda il caso di Solaris, ma probabilmente dovresti controllarlo.

+4

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

+0

@caf: ne ho incontrato uno che non funzionava. Tutti i binari di setuid erano collegati staticamente. – Joshua

Problemi correlati