Las bibliotecas compartidas son muy comunes en Solaris[Sun88]. Permiten ahorrar memoria a la hora de ejecutar los procesos. Los programas que usan las mismas funciones, no precisan, merced a ellas, tened su propia copia de las mismas en memoria. Se enlazan en tiempo de ejecución. La mayor parte de los comandos de /etc/bin usan esta característica. El comando ldd permite conocer qué bibliotecas usa cada programa. Por ejemplo:
% ldd /usr/bin/catUn usuario puede crear su propia versión de una de ellas y alterar el camino de la misma. Por ejemplo:
libintl.so.1 => /usr/lib/libintl.so.1
libw.so.1 = > /usr/lib/libw.so.1
libc.so.1 => /usr/lib/libc.so.1
libdl.so.1 => /usr/lib/libdl.so.1
% cp /usr/lib/libc.so.1 /tmpEsto, para el comando cat, no es importante, pero si fuese un programa setuid, el creador de la nueva biblioteca podría ejecutar la parte de código que quisiese, como un usuario más privilegiado. Para evitar esto, es posible, hacer que un programa ignore la variable LD_LIBRARY_PATH usando una nueva variable denominada LD_RUN_PATH:
% touch /tm/libc.so.1
% setenv LD_LIBRARY_PATH /tmp
% ldd /usr/bin/cat
libintl.so.1 => /usr/lib/libintl.so.1
libw.so.1 = > /usr/lib/libw.so.1
libc.so.1 => /tmp/libc.so.1
libdl.so.1 => /usr/lib/libdl.so.1
% setenv LD_RUN_PATH /usr/libSi ahora ``prog'' tiene el bit setuid activo se ignorará el valor de LD_LIBRARY_PATH. Todos los programas de /usr/bin están compilados de esta forma. Es una buena idea examinar cúales de nuestras aplicaciones que corren con setuid activo ignoran LD_LIBRARY_PATH.
% unsetenv LD_LIBRARY_PATH
% cc -o prog prog.c