Я пытаюсь использовать 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
путь в случае, когда у меня есть библиотека в стандартных каталогах с 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)