Я считаю, что существующие ответы на самом деле отвечают на вопрос прямо:
LD_RUN_PATH
используется компоновщиком (см. ld
) во время соединения программного обеспечения. Он используется только если у вас нет -rpath ...
в командной строке (-Wl,rpath ...
в командной строке gcc). Путь (и), определенные в этой переменной, добавляются к записи RPATH
в вашем двоичном файле ELF. (Вы можете видеть, что RPATH использует objdump -x binary-filename
- в большинстве случаев его там нет! Хотя он появляется в моих двоичных файлах для разработки, но после установки окончательной версии RPATH
удаляется.)
LD_LIBRARY_PATH
используется во время выполнения, когда вы хотите указать каталог, в котором динамический компоновщик (см. ldd
) должен искать библиотеки. Указание неправильного пути может привести к загрузке неправильных библиотек. Это используется в дополнение к значению RPATH
, определенному в вашем двоичном файле (как в 1.)
LD_RUN_PATH
действительно не создает угрозы безопасности, если вы не программист и не знаете, как его использовать. Поскольку я использую CMake для сборки своего программного обеспечения, -rpath
используется постоянно. Таким образом, мне не нужно устанавливать все для запуска моего программного обеспечения. ldd
может автоматически найти все файлы .so. (Среда automake должна была делать то же самое, но, по сравнению с ней, это было не очень хорошо).
LD_LIBRARY_PATH
- это переменная времени выполнения, поэтому вы должны быть осторожны с ней. При этом со многими общими объектами было бы действительно трудно иметь дело, если бы у нас не было этой специальной функции. Является ли это угрозой безопасности, вероятно, нет. Если хакер овладевает вашим компьютером, LD_LIBRARY_PATH
в любом случае доступен этому хакеру. Может случиться так, что вы используете неправильный путь (пути) в этой переменной, ваш двоичный файл может не загружаться, но если он загружается, вы можете получить аварийный двоичный файл или, по крайней мере, двоичный файл, который работает не совсем правильно. Одна из проблем заключается в том, что со временем вы получаете новые версии библиотеки и, вероятно, забудете удалить LD_LIBRARY_PATH
, что означает, что вы можете использовать небезопасную версию библиотеки.
Еще одна возможность обеспечения безопасности - это если хакер устанавливает поддельную библиотеку с тем же именем, что и двоичный файл, который ищет, библиотека, которая включает в себя все те же функции, но некоторые из этих функций заменены на хитрый код. Он может загрузить эту библиотеку, изменив переменную LD_LIBRARY_PATH
. Тогда это будет в конечном счете выполнено хакером. Опять же, если хакер может добавить такую библиотеку в вашу систему, он уже подключен и, вероятно, ему вообще не нужно делать ничего подобного (поскольку он в любом случае имеет полный контроль над вашей системой). Потому что в действительности, если хакер может только поместить библиотеку в свою учетную запись, он ничего не будет делать (если только ваш Unix-бокс не является безопасным в общем ...) Если хакер может заменить одну из ваших /usr/lib/...
библиотек, он уже имеет полный доступ к вашей система. Так что LD_LIBRARY_PATH
не нужно.