web-dev-qa-db-fra.com

Que fait / fait ld.so.preload?

Je suis tombé sur un fichier appelé ld.so.preload et je ne trouve aucune utilisation réelle de celui-ci. Cela a-t-il quelque chose à voir avec la variable env LD_PRELOAD?

9
Teee

Bonne question! En fait, /etc/ld.so.preload remplace, en quelque sorte, LD_PRELOAD .

LD_PRELOAD est soumis à de sévères restrictions pour des raisons de sécurité: il ne peut pas exécuter de fichiers binaires arbitraires setuid car, dans le cas contraire, vous pouvez remplacer les routines votre propre code malveillant, voir par exemple ici pour une discussion agréable. En fait, vous pouvez lire le manuel de ld.so'user :

LD_PRELOAD

Liste de bibliothèques ELF partagées supplémentaires, spécifiées par l'utilisateur, à charger avant toutes les autres. Les éléments de la liste peuvent être séparés par des espaces ou des deux points. Ceci peut être utilisé pour remplacer de manière sélective des fonctions dans d'autres bibliothèques partagées. Les bibliothèques sont recherchées en utilisant les règles données dans la section DESCRIPTION. Pour les binaires ELF set-user-id/set-group-ID, les noms de chemin de préchargement contenant des barres obliques sont ignorés et les bibliothèques des répertoires de recherche standard ne sont chargées que si le bit d'autorisation set-user-ID est activé sur le fichier de bibliothèque.

Au lieu de cela, le fichier /etc/ld.so.preload ne souffre pas de cette limitation, l’idée étant que, si vous pouvez lire/écrire dans le répertoire /etc , vous avez déjà des informations d'identification root. D'où son utilisation. N'oubliez pas que vous pouvez utiliser /etc/ld.so.preload même si vous ne semblez pas en avoir un au début: c'est rien qu’une caractéristique de glibc , d’où toutes les distributions Linux (mais pas, à ma connaissance, des versions Unix), vous pouvez donc la créer et y mettre le nom de quelle que soit la bibliothèque setuid dans toute distribution Linux, et cela fonctionnera.

12
MariusMatutiae