Что делает / делает ld.so.preload?
Я наткнулся на файл под названием ld.so.preload
и не могу найти никакого реального использования для этого. Это как-то связано с переменной env LD_PRELOAD
?
1 ответ
Хороший вопрос! На самом деле, /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, и она будет работать.