-Параметр RPATH не работает при запуске исполняемого файла с установленным SETUID

#linux #chmod #rpath

Вопрос:

Немного фона:

У меня есть исполняемая, для запуска которой требуются права администратора. Этот исполняемый файл также зависит от времени выполнения пользовательской динамической библиотеки. Эта динамическая библиотека должна быть загружена из пользовательского пути (а не из /usr/lib -за наличия аналогичной старой версии этого исполняемого файла, на которую могут ссылаться другие библиотеки), на который ссылается исполняемый файл при настройке -RPATH при компиляции исполняемого файла.

Когда я запустил этот исполняемый файл из командной строки с помощью sudo команды, все работает просто отлично, как и ожидалось.

Теперь этот исполняемый файл взят fork/exec из другого некорневого процесса, для которого я настраиваю разрешение на файл chmod исполняемого 4755 файла, чтобы исполняемый файл всегда запускался от имени root.

Проблема сейчас заключается в следующем: когда я устанавливаю разрешение на файл chmod 4755 , система -RPATH больше не соблюдает его , и мой исполняемый файл по умолчанию ищет путь к библиотеке /usr/lib , закончен -RPATH .

Вопрос: Как я могу заставить свой исполняемый файл предпочесть -RPATH /usr/lib , независимо от того, что указано в моем разрешении на файл (или, по крайней мере chmod 4755 )?

Ответ №1:

Просто на случай, если какая-нибудь душа столкнется с этой проблемой, вот что я сделал, чтобы решить эту проблему.

Просто загрузите dylibs программно с помощью API dlopen, жестко закодировав пути.