Я пытаюсь использовать LD_PRELOAD
для предварительной загрузки библиотеки с приложением, имеющим разрешения setuid. Сначала пробовал LD_PRELOAD
, и казалось, что он игнорируется с помощью бинарного файла setuid, хотя он работал, когда я пробовал его с другими, такими как ls
, dir
и т.д.
Из документации LD_PRELOAD:
LD_PRELOAD
A whitespace-separated list of additional, user-specified, ELF shared
libraries to be loaded before all others. This can be used to
selectively override functions in other shared libraries. For set-
user-ID/set-group-ID ELF binaries, only libraries in the standard
search directories that are also set-user-ID will be loaded.
Я попытался поместить библиотеку в /usr/lib
, /usr/local/lib
и /usr/lib64
с разрешениями setuid в соответствии с этой документацией выше, но она по-прежнему не работает. Если я не даю LD_PRELOAD
путь в случае, когда у меня есть библиотека в стандартном dirs с setuid, она не может найти библиотеку. Если я дам ему путь, он ничего не сделает.
Бинарный файл setuid - это двоичный файл с правами root, который запускается в оболочке пользователя без root. Есть предположения? Не уверен, что мне не хватает пути, переменной среды, или я неправильно понимаю документацию выше.
Изменить: разрешения по запросу:
Библиотека:
-rwsr-sr-x 1 root root 72580 2012-02-10 07:51
приложения:
-rwsr-xr-x 1 root root 137517601 2012-02-10
env | grep LD
LD_LIBRARY_PATH=/usr/lib (I added this manually myself, usually LD_LIBRARY_PATH is empty)