Что делает / делает ld.so.preload?

8498
Teee

Я наткнулся на файл с именем ld.so.preloadи не могу найти для него никакого реального использования. Это как-то связано с переменной env LD_PRELOAD?

6

1 ответ на вопрос

7
MariusMatutiae

Хороший вопрос! На самом деле, /etc/ld.so.preload, в некотором роде, заменяет LD_PRELOAD .

LD_PRELOAD подвергается строгим ограничениям из-за проблем безопасности: он не может выполнять произвольные двоичные файлы setuid, потому что, если это возможно, вы можете заменить библиотечные подпрограммы собственным вредоносным кодом, см., Например, здесь для хорошего обсуждения. На самом деле, вы можете прочитать в руководстве пользователя ld.so'user :

LD_PRELOAD

Список дополнительных пользовательских библиотек ELF, указанных пользователем, которые должны быть загружены раньше всех остальных. Элементы списка могут быть разделены пробелами или двоеточиями. Это может быть использовано для выборочного переопределения функций в других общих библиотеках. Поиск библиотек осуществляется по правилам, приведенным в разделе ОПИСАНИЕ. Для двоичных файлов ELF set-user-ID / set-group-ID пути предварительной загрузки, содержащие косые черты, игнорируются, а библиотеки в стандартных каталогах поиска загружаются, только если в файле библиотеки включен бит разрешения set-user-ID.

Вместо этого файл /etc/ld.so.preload не имеет таких ограничений, идея состоит в том, что, если вы можете читать / записывать в каталог / etc, у вас уже есть учетные данные root. Отсюда и его использование. Просто имейте в виду, что вы можете использовать /etc/ld.so.preload, даже если у вас, по-видимому, сначала его нет: это всего лишь функция glibc, следовательно, всех дистрибутивов Linux (но не в лучшем случае я знаю, что такое Unix), поэтому вы можете создать его и вставить в него название любой библиотеки setuid в любом дистрибутиве Linux, и она будет работать.

Существенным отличием является то, что `LD_PRELOAD`, находясь в среде, влияет только на этот процесс. `/ etc / ld.so.preload` применяется к каждой программе, которая загружается с использованием` / lib / ld-linux.so`. Toby Speight 7 лет назад 1
@TobySpeight Верно, хотя это не относится к альтернативе * LD_PRELOAD * против * / etc / ld.so.preload *. MariusMatutiae 7 лет назад 0

Похожие вопросы