O pedido está documentado no manual do vinculador dinâmico, que é ld.so
. É:
- diretórios de
LD_LIBRARY_PATH
; - diretórios de
/etc/ld.so.conf
; -
/lib
; -
/usr/lib
.
(estou simplificando um pouco, consulte o manual para os detalhes completos).
O pedido faz sentido quando você considera que é a única maneira de substituir uma biblioteca em um local padrão com uma biblioteca personalizada. LD_LIBRARY_PATH
é uma configuração de usuário, tem que vir antes dos outros. /etc/ld.so.conf
é uma configuração local, ela vem antes do padrão do sistema operacional. Portanto, como usuário, se eu quiser executar um programa com uma versão diferente de uma biblioteca, posso executar o programa com LD_LIBRARY_PATH
contendo a localização dessa versão de biblioteca diferente. E como administrador, posso colocar uma versão diferente da biblioteca em /usr/local/lib
e listar /usr/local/lib
em /etc/ld.so.conf
.
A confiança não entra nisso. Qualquer diretório listado neste caminho de busca tem que ser confiável, porque qualquer biblioteca pode acabar sendo carregada a partir daí. Teoricamente, você poderia listar os nomes das bibliotecas usadas por todos os programas que “exigem mais confiança” em seu sistema e certificar-se de que todas essas bibliotecas estão presentes nos diretórios “mais confiáveis”, e os diretórios “menos confiáveis” não ser usado se eles vierem após os diretórios mais confiáveis no caminho de pesquisa, exceto os programas que exigem menos confiança. Mas isso seria extremamente frágil. Também seria bastante inútil: se um invasor pode injetar um valor de LD_LIBRARY_PATH
ou um elemento de /etc/ld.so.conf
, eles certamente têm um caminho mais direto para executar código arbitrário, como injetar um valor de PATH
, de LD_PRELOAD
, etc. A confiança no caminho de carregamento da biblioteca é importante quando a execução ultrapassa um limite de confiança, ou seja, ao executar um programa com privilégios adicionais (por exemplo, programa setuid / setgid ou via sudo
). O que acontece neste caso é que LD_LIBRARY_PATH
está em branco.
Quanto a /lib
vs /usr/lib
, não importa muito: eles são fornecidos pela mesma entidade (o sistema operacional) e não deve haver uma biblioteca presente em ambos. Faz sentido listar /lib
primeiro porque ele fornece uma vantagem de desempenho (muito pequena): as bibliotecas mais usadas, especialmente as bibliotecas usadas por pequenos programas básicos (para os quais o tempo de carregamento é uma fração maior do tempo total de execução) programa grande e de longa duração), estão localizados em /lib
.