Gurus sagen, dass LD_LIBRARY_PATH ist schlecht - was ist die alternative?
Las ich einige Artikel über Probleme bei der Verwendung der LD_LIBRARY_PATH, auch als Teil eines wrapper-Skript:
http://linuxmafia.com/faq/Admin/ld-lib-path.html
http://blogs.oracle.com/ali/entry/avoiding_ld_library_path_the
In diesem Fall - was sind die empfohlenen alternativen?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen, hinzufügen:
den linker-Optionen. So sparen Sie die Notwendigkeit, über sorgen, die
LD_LIBRARY_PATH
- Umgebungsvariable, und Sie können entscheiden, compile-Zeit auf einen bestimmten Bibliothek.Für einen relativen Pfad zu den Binärdateien, die Sie verwenden können, $ORIGIN, eg
($ORIGIN kann nicht funktionieren, wenn die statische Verknüpfung zu freigegebenen Bibliotheken mit ld, Einsatz -Wl,--allow-shlib-undefined, dies zu beheben)
--enable-new-dtags
sowie z.B.-Wl,--enable-new-dtags,-rpath,'$ORIGIN/../lib'
-Wl,-rpath,'$$ORIGIN/../lib'
-Wl,-z,origin
finden Sie unter [stackoverflow.com/questions/6324131/... stackoverflow-post)Habe ich immer LD_LIBRARY_PATH, und ich hatte noch nie ein problem.
Zitieren Sie den ersten link:
Ist NICHT nenne ich eine endgültige problem-Anweisung. In der Tat bringt es auf den Geist Ich mag es nicht,. [YouTube, aber SFW].
Dass der zweite blog-Eintrag (http://blogs.oracle.com/ali/entry/avoiding_ld_library_path_the) ist viel mehr auf das bevorstehende Natur des Problems... die, wie es scheint, in einer nussschale, Bibliothek version Zusammenstößen Diesenprogramm erfordert Foo1.2, aber ThatProgram erfordert Foo1.3, daher Sie können nicht laufen beide Programme (leicht). Beachten Sie, dass die meisten dieser Probleme werden negiert, indem Sie ein einfaches wrapper-Skript, mit dem der LD_LIBRARY_PATH nur für das ausführen von shell, die ist (fast immer) mit einem separaten untergeordneten Prozess der interaktiven shell.
Beachten Sie auch, dass die alternativen sind Recht gut erklärt in der post.
Ich bin nur verwirrt, warum Sie eine Frage stellen, die links zu Artikeln, die offenbar die Antwort auf Ihre Frage... haben Sie eine spezifische Frage haben, die nicht abgedeckt werden (deutlich genug) in einer von den beiden Artikeln?
die Antwort ist im ersten Artikel, den du zitiert hast.
Finde ich, dass das bereits vorhandene Antworten zu tun, die Antwort auf die Frage in einer einfachen Art und Weise:
LD_RUN_PATH
wird vom linker verwendet (sieheld
) zum Zeitpunkt der Verknüpfung Ihrer software. Es wird nur verwendet, wenn Sie keine-rpath ...
auf der Kommandozeile (-Wl,rpath ...
auf der gcc-Kommandozeile). Der Weg(s) definiert, die Variablen Hinzugefügt werden, dieRPATH
Eintrag im ELF-binary-Datei. (Sie können sehen, dass RPATH mitobjdump -x binary-filename
—in den meisten Fällen ist es nicht da, obwohl! Es scheint in meiner Entwicklung binaries, aber sobald die final version installiert wirdRPATH
wieder entfernt werden.)LD_LIBRARY_PATH
zur Laufzeit verwendet, wenn Sie wollen, um ein Verzeichnis anzugeben, das den dynamischen linker (sieheldd
) braucht, um die Suche für die Bibliotheken. Die Angabe für den falschen Weg führen könnte, um das laden der falschen Bibliotheken. Dies ist neben derRPATH
definierten Wert in den binären (wie in 1.)LD_RUN_PATH
verursacht wirklich keine Bedrohung der Sicherheit, es sei denn, Sie sind Programmierer und weiß nicht, wie es zu benutzen. Als ich bin mit CMake zu erstellen meiner software, die-rpath
ist die ganze Zeit benutzt. So habe ich nicht zu installieren, alles läuft meine software.ldd
finden Sie alle .so dass die Dateien automatisch. (die automake-Umgebung sollte das auch tun, aber es war nicht sehr gut darin, im Vergleich.)LD_LIBRARY_PATH
eine Laufzeit ist variabel und so müssen Sie vorsichtig sein mit ihm. That being said, viele gemeinsame Objekt wäre wirklich schwierig, damit umzugehen, wenn wir das nicht haben, die Besonderheit. Ob es eine Bedrohung für die Sicherheit, wahrscheinlich nicht. Wenn ein hacker nimmt ein halten Sie Ihre computerLD_LIBRARY_PATH
zugänglich ist, dass hacker sowieso. Was passieren könnte, ist, dass Sie den falschen Weg(s) in dieser variable, Sie Ihre binären kann nicht geladen werden, aber wenn es lädt, können Sie am Ende mit einem krachenden binäre oder zumindest eine Binärdatei, die funktioniert nicht ganz richtig. Eine Sorge ist, dass im Laufe der Zeit, erhalten Sie neue Versionen der Bibliothek und werden Sie wahrscheinlich vergessen, die zu entfernenLD_LIBRARY_PATH
was bedeutet, dass Sie möglicherweise verwenden eine unsichere version der Bibliothek.Eine andere Möglichkeit für die Sicherheit ist, wenn der hacker installiert einen fake-Bibliothek mit dem gleichen Namen wie die binäre Suche, Bibliothek, enthält alle die gleichen Funktionen, aber einige dieser Funktionen ersetzt, die mit hinterhältigen code. Kann er bekommen, dass die Bibliothek geladen werden, indem die änderung der
LD_LIBRARY_PATH
variable. Dann wird es irgendwann mal ausgeführt, indem der hacker. Wieder, wenn der hacker hinzufügen können, die Bibliothek auf Ihrem system, dass er Sie bereits in und wahrscheinlich nicht brauchen, etwas zu tun, wie das in den ersten Platz (da er in er hat die volle Kontrolle über Ihr system sowieso.) Denn in Wirklichkeit, wenn der hacker kann nur die Bibliothek in seinem Konto, er gewann nichts, viel (es sei denn, Ihre Unix-box ist nicht sicher, overall...), Wenn der hacker ersetzen Sie eine Ihrer/usr/lib/...
Bibliotheken, er hat bereits vollen Zugriff auf Ihr system. SoLD_LIBRARY_PATH
ist nicht erforderlich.