Was ist / macht ld.so.preload?

7920
Teee

Ich bin über eine aufgerufene Datei gestolpert ld.so.preloadund kann keine echte Verwendung dafür finden. Hat es etwas mit der env-Variable zu tun LD_PRELOAD?

6

1 Antwort auf die Frage

7
MariusMatutiae

Gute Frage! Tatsächlich ersetzt /etc/ld.so.preload in gewisser Weise LD_PRELOAD .

LD_PRELOAD unterliegt strengen Beschränkungen aufgrund eines Sicherheitsproblem: Es ist nicht willkürlich ausführen kann setuid - Binärdateien, weil, wenn es könnte, Sie Bibliotheksroutinen mit Ihrem eigenen bösartigen Code ersetzen könnte, siehe zum Beispiel hier für eine nette Diskussion. In der Tat können Sie in ld.so'user Handbuch lesen :

LD_PRELOAD

Eine Liste zusätzlicher benutzerspezifischer ELF-Bibliotheken, die vor allen anderen geladen werden sollen. Die Elemente der Liste können durch Leerzeichen oder Doppelpunkte getrennt werden. Dies kann verwendet werden, um Funktionen in anderen gemeinsam genutzten Bibliotheken selektiv zu überschreiben. Die Bibliotheken werden nach den unter BESCHREIBUNG angegebenen Regeln gesucht. Bei ELF-Binärdateien für set-user-ID / set-group-ID werden Preload-Pfadnamen mit Schrägstrichen ignoriert. Bibliotheken in den Standardsuchverzeichnissen werden nur geladen, wenn das Berechtigungsbit set-user-ID für die Bibliotheksdatei aktiviert ist.

Stattdessen leidet die Datei /etc/ld.so.preload nicht unter einer solchen Einschränkung. Die Idee ist, dass Sie, wenn Sie das Verzeichnis / etc lesen / schreiben können, bereits über Root-Anmeldeinformationen verfügen. Daher seine Verwendung. Denken Sie jedoch daran, dass Sie /etc/ld.so.preload verwenden können, auch wenn Sie anfangs keine zu haben scheinen: es ist nichts anderes als eine Funktion von glibc, daher von allen Linux-Distributionen (aber nicht zum Besten von Mein Wissen, von Unix-Aromen), so können Sie es erstellen und den Namen der jeweiligen setuid-Bibliothek in eine Linux-Distribution einfügen, und es wird funktionieren.

Ein wesentlicher Unterschied besteht darin, dass "LD_PRELOAD" in der Umgebung nur diesen Prozess beeinflusst. `/ etc / ld.so.preload` gilt für jedes Programm, das mit / lib / ld-linux.so` geladen wird. Toby Speight vor 7 Jahren 1
@TobySpeight True, auch wenn dies für die Alternative * LD_PRELOAD * vs. * / etc / ld.so.preload * nicht spezifisch ist. MariusMatutiae vor 7 Jahren 0