Estoy tratando de usar LD_PRELOAD
para precargar una biblioteca con una aplicación que tenga permisos establecidos. LD_PRELOAD
tratado en un primer momento, y parecía como si estuviera siendo ignorada con el binario setuid, a pesar de que estaba trabajando cuando lo probé con otros como ls
, etc. dir
LD_PRELOAD con setuid binary
De la documentación de LD_PRELOAD:
LD_PRELOAD
A whitespace-separated list of additional, user-specified, ELF shared
libraries to be loaded before all others. This can be used to
selectively override functions in other shared libraries. For set-
user-ID/set-group-ID ELF binaries, only libraries in the standard
search directories that are also set-user-ID will be loaded.
Intenté poner la biblioteca en /usr/lib
, /usr/local/lib
y /usr/lib64
con los permisos de setuid según esta documentación anterior, pero todavía no parece funcionar. Si no doy una ruta a LD_PRELOAD
en el caso en que tengo la biblioteca en los directorios estándar con setuid, parece que no puede encontrar la biblioteca. Si le doy el camino, no hace nada.
El binario setuid es un binario de permisos de raíz que se ejecuta en un shell de usuario no root. ¿Alguna idea? No estoy seguro de si me falta un camino, una variable de entorno, o estoy malinterpretando la documentación anterior.
Edición: permisos solicitados como son:
Biblioteca:
-rwsr-sr-x 1 root root 72580 2012-02-10 07:51
Aplicación:
-rwsr-xr-x 1 root root 137517601 2012-02-10
env | grep LD
LD_LIBRARY_PATH=/usr/lib (I added this manually myself, usually LD_LIBRARY_PATH is empty)
¿Está ejecutando SELinux? –
Sí, la empresa Suse 11.1 es lo que estoy ejecutando actualmente. –
Finalmente funcionó. En todo el conjunto de pruebas, debo haber estropeado algo. Poniéndolo en lib64 con los permisos correctos (setuid) y NO proporcionando una ruta a LD_PRELOAD funcionó. Gracias por toda su ayuda chicos! –