Бинарный файл Linux не может найти разделяемую библиотеку, но работает при работе в strace

(Примечание: имена двоичных и двоичных файлов и библиотеки ниже запутаны для защиты невиновных. ;-) Приложение является проприетарным в соответствии с соглашением о неразглашении информации, но его поведение может не зависеть от него.)

У меня есть двоичный файл Linux, который при запуске выдает следующую ошибку:

двоичный: ошибка при загрузке общих библиотек: libshared.so: невозможно открыть файл общих объектов: нет такого файла или каталога

Что само по себе сбивает с толку, поскольку libshared.so находится в LD_LIBRARY_PATH. Тем не мение,

  • Библиотека обнаруживается правильно при запуске ldd binary (т.е. вывод ldd указывает на расположение файла)

  • Библиотека обнаруживается правильно при запуске strace binary, так что программе удается распечатать информацию о ее использовании!

Я никогда не видел приложения, которое ведет себя по-другому при запуске отдельно от strace, но я полагаю, может быть, кто-то еще видел это раньше? Есть идеи, как это решить?

У меня нет исходного кода, поэтому я не могу его восстановить. Запуск приложения в производственной среде под strace, вероятно, не начнется. Операционная система - RHEL 6.2.


person ajdecon    schedule 08.08.2013    source источник


Ответы (1)


(Старый вопрос, но, надеюсь, это поможет кому-то другому)

В новых установках Linux LD_LIBRARY_PATH не используется стандартным компоновщиком времени выполнения системы для программ с установленным SUID. Похоже, что strace, gdb и другие работают по-разному, и действительно используют LD_LIBRARY_PATH.

Для программ suid все библиотеки должны находиться в кэше системных библиотек. Проверьте (как root), присутствует ли ваша "отсутствующая" библиотека, используя

ldconfig -p | grep <my_library_name>

и, если чего-то не хватает, добавьте его в новый файл в /etc/ld.so.conf или ld.so.conf.d / в зависимости от ситуации, а затем перестройте, используя

ldconfig -v

Или убрать бит SUID, если он, конечно, не требуется.

person Jim Keir    schedule 14.02.2014
comment
Интересный! Я прослежу еще раз, чтобы увидеть, была ли это первоначальная проблема. Из любопытства, у вас есть ссылка на изменение SUID / LD_LIBRARY_PATH? - person ajdecon; 15.02.2014
comment
Ага - от man ld.so: Использование переменной окружения LD_LIBRARY_PATH. За исключением случаев, когда исполняемый файл является двоичным файлом set-user-ID / set-group-ID, в этом случае он игнорируется. - person Jim Keir; 19.02.2014
comment
Большое спасибо! Сэкономил мне много времени (и мой рассудок :)) - person Will; 04.04.2017