Tutoriales y Manuales
Entradas Mensuales
-
►
2024
(Total:
1019
)
- ► septiembre (Total: 50 )
-
►
2023
(Total:
710
)
- ► septiembre (Total: 65 )
-
►
2022
(Total:
967
)
- ► septiembre (Total: 72 )
-
►
2021
(Total:
730
)
- ► septiembre (Total: 56 )
-
►
2020
(Total:
212
)
- ► septiembre (Total: 21 )
-
►
2019
(Total:
102
)
- ► septiembre (Total: 14 )
-
►
2017
(Total:
231
)
- ► septiembre (Total: 16 )
-
▼
2016
(Total:
266
)
- ► septiembre (Total: 38 )
-
▼
abril
(Total:
42
)
- Resumen Reporte de Kaspersky sobre ataques DDoS Q1...
- La actualización de Windows 10 interrumpe en direc...
- 7 millones de cuentas hackeadas de la comunidad Li...
- Hackeada la base de datos del Banco Nacional de Qatar
- Las ventas del iPhone caen por primera vez en su h...
- Disponible para la venta el nuevo Meizu Pro 5 Ubun...
- La mitad de los adultos británicos no saben distin...
- Mitigación de ataques DDoS Syn Flood con iptables-...
- Error de configuración en MongoDB expone los regis...
- Huawei confirma dos versiones del P9 Lite, fecha d...
- GoAccess es un analizador en tiempo real del log d...
- PenQ: navegador basado en Mozilla Firefox para rea...
- El creador ruso del Exploit Kit Blackhole condenad...
- Microsoft alerta de e-mails con adjuntos malicioso...
- Google presenta Informe anual de Seguridad en Andr...
- Hacker imprime cartel Neo-Nazi a impresoras abiert...
- La policía de Canadá espió más de un millón de men...
- Jornadas X1RedMasSegura 4ª Edición 20 y 21 de Mayo...
- Phineas Fisher explica cómo hackeó a Hacking Team
- La 2 estrena hoy sábado el programa sobre ciberseg...
- EastMadH4ck arranca en Arganda (sureste de Madrid)...
- Etiopía propone cinco años de prisión a quien mand...
- Departamento de Seguridad de Estados Unidos pide a...
- Un hombre borra todos los datos de su empresa al h...
- Presentados los nuevos terminales Meizu Pro 6 y HT...
- Jigsaw, el ransomware que va borrando a tus archiv...
- Google Chrome versión 50 deja sin soporte a Window...
- Cómo evitar que un ransomware cifre los ficheros e...
- Desarolladores de Google crean una API para accede...
- Zerodium, el traficante de exploits que compra vul...
- Tres ejemplos de incidentes reales de acoso utiliz...
- Un fallo informático permite ver el borrador de la...
- La historia detrás de la creación de WhatsApp
- Diferencias velocidad y clases tarjetas de memoria...
- WhatsApp activa el cifrado de extremo a extremo
- Nueva oleada del virus Crypt0l0cker con aviso de C...
- Un padre suplica a Apple para que desbloquee el iP...
- Los enfrentamientos por el peering llegan al IPv6
- Módulo Anti-DDoS para servidor web Nginx
- Herramientas automatizadas para ataques SQL injection
- Gestión de librerías compartidas en GNU/Linux
- Un alumno robó datos de 16.000 personas de la Univ...
-
►
2015
(Total:
445
)
- ► septiembre (Total: 47 )
-
►
2014
(Total:
185
)
- ► septiembre (Total: 18 )
-
►
2013
(Total:
100
)
- ► septiembre (Total: 3 )
-
►
2011
(Total:
7
)
- ► septiembre (Total: 1 )
Blogroll
Etiquetas
seguridad
(
395
)
privacidad
(
363
)
google
(
353
)
ransomware
(
338
)
vulnerabilidad
(
301
)
Malware
(
263
)
Windows
(
243
)
android
(
242
)
cve
(
235
)
tutorial
(
235
)
manual
(
220
)
software
(
201
)
hardware
(
193
)
linux
(
124
)
twitter
(
115
)
ddos
(
94
)
WhatsApp
(
90
)
Wifi
(
85
)
cifrado
(
77
)
herramientas
(
75
)
hacking
(
73
)
sysadmin
(
67
)
app
(
65
)
Networking
(
56
)
nvidia
(
52
)
ssd
(
51
)
youtube
(
50
)
adobe
(
43
)
firmware
(
42
)
office
(
41
)
hack
(
40
)
firefox
(
35
)
contraseñas
(
32
)
eventos
(
32
)
antivirus
(
31
)
juegos
(
31
)
cms
(
30
)
flash
(
28
)
anonymous
(
27
)
MAC
(
25
)
apache
(
25
)
programación
(
25
)
exploit
(
23
)
javascript
(
22
)
multimedia
(
22
)
Kernel
(
20
)
ssl
(
19
)
SeguridadWireless
(
17
)
documental
(
16
)
Forense
(
15
)
conferencia
(
15
)
Debugger
(
14
)
lizard squad
(
14
)
técnicas hacking
(
13
)
auditoría
(
12
)
delitos
(
11
)
metasploit
(
11
)
Virtualización
(
10
)
adamo
(
9
)
reversing
(
9
)
Rootkit
(
8
)
Ehn-Dev
(
7
)
MAC Adress
(
6
)
antimalware
(
6
)
oclHashcat
(
5
)
Entradas populares
-
Después de ver qué es una vCPU y la diferencia entre núcleos (cores) e hilos en los procesadores, pasamos a explicar toda la nomenclatura d...
-
En el panorama en constante evolución de la seguridad de redes, OpnSense se ha convertido en una formidable solución de firewall. Nacido de...
-
Pese a que Gemini ofrece multitudes de opciones, recientemente, se ha dado a conocer una situación fuera de lo común. Hace unos días, un es...
Gestión de librerías compartidas en GNU/Linux
viernes, 1 de abril de 2016
|
Publicado por
el-brujo
|
Editar entrada
Es habitual, si sois desarrolladores, que reutilicéis código fuente
proporcionado por terceros. Normalmente /lib, /lib64, /usr/local/lib y
otros directorios almacenan varias bibliotecas compartidas (o también
llamadas librerías). Como administradores de sistemas necesitamos
gestionar e instalar estas bibliotecas compartidas y para ello podremos
usar estos comandos de gestión y depuración de problemas en GNU\Linux.
Antes de empezar la explicación sobre las librerías compartidas creo que es conveniente definir bien lo que es una librería y los tipos de librerías que hay. Una librería es un fichero que contiene un conjunto de funciones, escritas en un lenguaje de programación, para ser utilizadas por un programa, de forma que si un programa necesita usar estas funcionalidades puede acceder a la librería sin tener que reescribir el código.
La diferencia entre un programa y una librería es mínima, la única diferencia es que una librería no se ejecuta de forma autónoma ( no contiene el bloque de instrucción main ), pero por lo demás funciona como un programa normal ( también puede requerir de otras librerías para funcionar).
Una biblioteca no es más que una colección de recursos como subrutinas, funciones, clases, valores, etc... incluidos en un fichero. Así de simple. Existen dos clases de bibliotecas:
Como ya hemos mencionado, las librerías compartidas se vinculan a un programa en tiempo de ejecución, permitiendo que el código de la librería se cargue en memoria una única vez y pueda ser usado por varios programas, de esta forma se consigue que el tamaño del código sea menor con su correspondiente ahorro de espacio en memoria.
Ademas de esto con las librerías compartidas se cumple el principio de modularidad ( programación modular o orientada a objetos ), de forma que si necesitamos modificar alguna funcionalidad nos bastara con editar la librería que la contiene, dejando el programa que las utiliza sin modificar.
Para el cambio de versiones hay que tener dos factores en cuenta, el numero de la subversión se cambia cuando se realizan cambios en la librería y esta no pierde compatibilidad con la version anterior, pero si se pierde compatibilidad el cambio tiene que ser de versión y no de subversión. Gracias a este convenio de nombres es posible que múltiples versiones de una librería compartida coexistan en el sistema.
Como administradores de sistemas debemos saber el propósito de ciertos ficheros relacionados con las bibliotecas dinámicas:
Se necesita usar ldconfig para crear, actualizar y eliminar los enlaces y caché necesarios que usa el enlazador en tiempo de ejecución ld.so de las bibliotecas dinámicas más recientes encontradas en los directorios especificados en la linea de comandos, en el archivo /etc/ld.so.conf, y en los directorios de confianza /usr/lib, /lib64 y /lib.
El comando ldconfig chequea las cabeceras y nombres de los ficheros de las bibliotecas que encuentra cuando determina cual es la versión que deberían tener sus enlaces actualizados. Este comando también crea un archivo llamado /etc/ld.so.cache que se usa para acelerar el enlazado (linking)
Can't find library xyz Error
El ejecutable requiere un enlace a la biblioteca dinámica que ld.so o ld-linux.so no puede encontrar. Esto significa que una biblioteca dinámica xyz es necesaria para el programa foo y no está instalada o la ruta (path) a ella no está establecida. Para arreglar este problema hay que instalar la biblioteca xyz y establecer la ruta en /etc/ld.so.conf o crear un archivo en el directorio /etc/ld.so.conf.d/ .
ldd (List Dynamic Dependencies) es una aplicación UNIX y GNU\Linux para mostrar las bibliotecas compartidas que requiere un programa para funcionar. Esta herramienta se requiere para construir y ejecutar varios programas servidores en un entorno o jaula chroot.
Otros usos del comando ldd
Podemos usar ldd cuando un ejecutable está fallando debido a una dependencia perdida. Una vez que encuentras la dependencia perdida puedes instalarla o actualizar el cache con ldconfig como vimos antes.
Errores del tipo:
Ejemplos:
Buscar librería
Posibles soluciones (no recomendadas)
Soluciones recomendadas:
La primera librería encontrada que cumpla la dependencia será la utilizada. Hay que tener en cuenta que lo que el binario contiene no es una lista con los enlaces a cada librería, sino una lista de rutas adicionales en las que buscar las dependencias ( si las tiene ).
Fuentes:
http://yoadminsis.blogspot.com.es/2011/01/gestion-de-bibliotecas-compartidas-y.html
http://ovtoaster.com/las-librerias-compartidas-en-linux-y-su-gestion/
https://lonesysadmin.net/2013/02/22/error-while-loading-shared-libraries-cannot-open-shared-object-file/
Las librerías compartidas en Linux, que son y como gestionarlas
¿Qué es una biblioteca en un sistema operativo GNU\Linux o UNIX "like"?Antes de empezar la explicación sobre las librerías compartidas creo que es conveniente definir bien lo que es una librería y los tipos de librerías que hay. Una librería es un fichero que contiene un conjunto de funciones, escritas en un lenguaje de programación, para ser utilizadas por un programa, de forma que si un programa necesita usar estas funcionalidades puede acceder a la librería sin tener que reescribir el código.
La diferencia entre un programa y una librería es mínima, la única diferencia es que una librería no se ejecuta de forma autónoma ( no contiene el bloque de instrucción main ), pero por lo demás funciona como un programa normal ( también puede requerir de otras librerías para funcionar).
Una biblioteca no es más que una colección de recursos como subrutinas, funciones, clases, valores, etc... incluidos en un fichero. Así de simple. Existen dos clases de bibliotecas:
Tipos de librerías
Existen dos tipos de librerías, las librerías compartidas o dinámicas y las librerías estáticas. La diferencia entre ambas es que mientras en las librerías compartidas el acceso es dinámico y se realiza en tiempo de ejecución, en las estáticas las funcionalidades son enlazadas en tiempo de compilación y sustituidas por la llamada en el fichero ejecutable final.- Bibliotecas Estáticas: Son todos los ficheros con el siguiente formato de nombre y extensión lib*.a. Se incluyen dentro del ejecutable de la aplicación que las usa. Esto hace que el ejecutable sea de mayor tamaño que un ejecutable que usa bibliotecas dinámicas. Las bibliotecas se cargan en el programa en tiempo de compilación.
- Bibliotecas Dinámicas: Son todos los ficheros con el siguiente formato de nombre y extensión lib*.so*. Estos ficheros no se incluyen dentro de los ejecutables de las aplicaciones y, por tanto, los ejecutables ocupan menos. A cambio, debemos disponer de los ficheros de biblioteca dinámica junto con el ejecutable para que este funcione. Los ejecutables cargan las bibliotecas en tiempo de ejecución usando ld.so o ld-linux.so. Como nota, en entornos Ms Windows, son las DLL.
Las librerías compartidas
En este articulo vamos a tratar las librerías compartidas, y mas específicamente sobre las de Linux. En Linux ( y en Unix ) las librerías compartidas se llaman Shared Objects y llevan el sufijo .so ( su equivalente en Windows son las .dll ).Como ya hemos mencionado, las librerías compartidas se vinculan a un programa en tiempo de ejecución, permitiendo que el código de la librería se cargue en memoria una única vez y pueda ser usado por varios programas, de esta forma se consigue que el tamaño del código sea menor con su correspondiente ahorro de espacio en memoria.
Ademas de esto con las librerías compartidas se cumple el principio de modularidad ( programación modular o orientada a objetos ), de forma que si necesitamos modificar alguna funcionalidad nos bastara con editar la librería que la contiene, dejando el programa que las utiliza sin modificar.
Los nombres de las librerías compartidas
Por convenio las librerías compartidas pueden tener varios tipos de nombre :- El nombre usado por el enlazador (‘lib’ + nombre de la libreria + ‘.so’)
- Nombre completo (‘lib’ + nombre de la libreria + ‘.so’ + ‘.’ + numero de versión) // Link hacia la librería con el nombre real
- Nombre real (‘lib’ + nombre de la libreria + ‘.so’ + ‘.’ + numero de versión + ‘.’ + numero de subversión + ‘.’ + revisión ) // La revisión es opcional
Para el cambio de versiones hay que tener dos factores en cuenta, el numero de la subversión se cambia cuando se realizan cambios en la librería y esta no pierde compatibilidad con la version anterior, pero si se pierde compatibilidad el cambio tiene que ser de versión y no de subversión. Gracias a este convenio de nombres es posible que múltiples versiones de una librería compartida coexistan en el sistema.
- /lib : Librerías de sistema, vitales
- /usr/lib : Librerías de usuario básicas, no se necesitan en el boot
- /usr/local/lib : Librerías que no forman parte de la distribución estándar
Comandos de gestión de bibliotecas en GNU\Linux
- ldconfig: crea los enlaces y caché necesarios a las bibliotecas compartidas más recientes que se encuentren en los directorios especificados en la línea de comandos, en el archivo /etc/ld.so.conf y en los directorios de confianza (/lib, /lib64 y /usr/lib). Usa el enlazador dinámico para ello.
- ldd: Nos dice cuales son las bibliotecas que una aplicación necesita para funcionar.
- ltrace: Es un trazador de llamadas a bibliotecas. Nos muestra datos de lo que hace un programa dado al ejecutarse y que bibliotecas usa en la ejecución. Sirve para depurar problemas (debug). Hay otros programas similares como strace.
- ld.so/ld-linux.so: Es el enlazador dinámico.
Ficheros Importantes
Como administradores de sistemas debemos saber el propósito de ciertos ficheros relacionados con las bibliotecas dinámicas:
- /lib/ld-linux.so.* : Enlazador/cargador en tiempo de ejecución.
- /etc/ld.so.conf : Archivo que contiene una lista de directorios separados por dos puntos, espacios, tabuladores, nueva linea en los que se buscan las bibliotecas.
- /etc/ld.so.cache : Archivo que contiene una lista ordenada de bibliotecas encontradas en los directorios especificados en /etc/ld.so.conf. Este fichero está en un formato no legible por humanos y no debe ser editado. Es creado por el comando ldconfig.
- /etc/ld.so.preload : Archivo que contiene una lista, separada por espacios, de archivos de bibliotecas compartidas ELF que serán cargadas antes del programa. Bibliotecas y una lista ordenada de bibliotecas candidatas.
- /etc/ld.so.nohwcap : Cuando este fichero está presente, el enlazador dinámico cargará la versión no optimizada de una biblioteca incluso si la CPU soporta la versión optimizada.
- lib*.so.version : Bibliotecas compartidas almacenadas en los directorios /lib, /usr/lib, /usr/lib64, /lib64, /usr/local/lib. Por ejemplo, en Kubuntu, /usr/lib/libapt-pkg.so.4.10.1 es una biblioteca compartida relacionada con apt-pkg y su versión es la 4.10.1.
COMANDO ldconfig
Se necesita usar ldconfig para crear, actualizar y eliminar los enlaces y caché necesarios que usa el enlazador en tiempo de ejecución ld.so de las bibliotecas dinámicas más recientes encontradas en los directorios especificados en la linea de comandos, en el archivo /etc/ld.so.conf, y en los directorios de confianza /usr/lib, /lib64 y /lib.
El comando ldconfig chequea las cabeceras y nombres de los ficheros de las bibliotecas que encuentra cuando determina cual es la versión que deberían tener sus enlaces actualizados. Este comando también crea un archivo llamado /etc/ld.so.cache que se usa para acelerar el enlazado (linking)
Error While Loading Shared Libraries, Cannot Open Shared Object File
Can't find library xyz Error
El ejecutable requiere un enlace a la biblioteca dinámica que ld.so o ld-linux.so no puede encontrar. Esto significa que una biblioteca dinámica xyz es necesaria para el programa foo y no está instalada o la ruta (path) a ella no está establecida. Para arreglar este problema hay que instalar la biblioteca xyz y establecer la ruta en /etc/ld.so.conf o crear un archivo en el directorio /etc/ld.so.conf.d/ .
COMANDO ldd
ldd (List Dynamic Dependencies) es una aplicación UNIX y GNU\Linux para mostrar las bibliotecas compartidas que requiere un programa para funcionar. Esta herramienta se requiere para construir y ejecutar varios programas servidores en un entorno o jaula chroot.
Otros usos del comando ldd
Podemos usar ldd cuando un ejecutable está fallando debido a una dependencia perdida. Una vez que encuentras la dependencia perdida puedes instalarla o actualizar el cache con ldconfig como vimos antes.
Depuración (Debug) - Añadiendo nuevas librerías
Errores del tipo:
hello-world-program: error while loading shared libraries: libFoobar.so.1: cannot open shared object file: No such file or directory
Ejemplos:
ldd /usr/local/bin/weighttp linux-vdso.so.1 => (0x00007fff251ff000) libev.so.4 => not found libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f8f1cc1e000) libc.so.6 => /lib64/libc.so.6 (0x00007f8f1c88b000) /lib64/ld-linux-x86-64.so.2 (0x00007f8f1ce49000)
Buscar librería
libev.so.4
find /usr -name "libev.so.4" /usr/local/lib/libev.so.4
Posibles soluciones (no recomendadas)
- Instalar las librerías a /usr/lib en lugar de /local/lib/usr
- Hacer un link simbólico desde /usr/lib a los archivos de /usr/local/lib
- Copiar los archivos de /usr/local/lib a /usr/lib.
Soluciones recomendadas:
- Establecer la variable de entorno LD_LIBRARY_PATH para que apunte a /usr/local/lib
setenv LD_LIBRARY_PATH /usr/local/lib
export LD_LIBRARY_PATH="/usr/local/lib"
O bien:
Editar el archivo /etc/ld.so.conf y añadir /usr/local/lib
Y actualizar la caché:cat /etc/ld.so.conf include ld.so.conf.d/*.conf /usr/local/lib
sudo ldconfig
sudo ldconfig
-p
El enlazador dinámico ld.so
Ya hemos dicho que los ficheros binarios en Linux requieren un enlace dinámico ( a no ser que se opte por el enlace estático ), y de este enlace se encargan los programas ld.so y ld-linux.so*. La misión de estos dos es encontrar y cargar las bibliotecas compartidas requeridas por el programa en cuestión, preparar el programa para ejecutarse y ejecutarlo. Para ello el binario en cuestión ofrece el nombre de las bibliotecas que necesita y ld.so se encarga de buscarlas en las siguientes ubicaciones :- Las definidas a través de la variable de entorno LD_LIBRARY_PATH. Salvo cuando el ejecutable tiene activo el bit setuid/setgid, en cuyo caso se ignora.
- Las definidas en el propio binario.
- En el fichero /etc/ld.so.cache, que contiene una lista compilada de bibliotecas candidatas encontradas previamente en la ruta de bibliotecas ampliada.
- En la ruta predeterminada /lib, y despues en /usr/lib/. Si el binario fue enlazado con la opción -znodeflib, se omite este paso.
La primera librería encontrada que cumpla la dependencia será la utilizada. Hay que tener en cuenta que lo que el binario contiene no es una lista con los enlaces a cada librería, sino una lista de rutas adicionales en las que buscar las dependencias ( si las tiene ).
Fuentes:
http://yoadminsis.blogspot.com.es/2011/01/gestion-de-bibliotecas-compartidas-y.html
http://ovtoaster.com/las-librerias-compartidas-en-linux-y-su-gestion/
https://lonesysadmin.net/2013/02/22/error-while-loading-shared-libraries-cannot-open-shared-object-file/
Enviar por correo electrónico
Escribe un blog
Compartir en X
Compartir con Facebook
Compartir en Pinterest
2 comentarios :
un artículo muy bueno compañero , se agradece
excelente artículo.
una duda. En caso de que la librería esté presente en varios directorios ¿cuál es la preferencia del sistema? ¿dónde buscará en primera instancia?
gracias mil : )
Publicar un comentario
Los comentarios pueden ser revisados en cualquier momento por los moderadores.
Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.
Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.