Можно ли заставить программы интерпретировать $ORIGIN в загруженных общих библиотеках с возможностью CAP_NET_RAW?

Я пишу приложение, которое имеет библиотеки Python и C++. Часть Python должна отправлять и получать необработанные пакеты, поэтому я даю исполняемому файлу Python CAP_NET_RAW возможность.

Я также загружаю разделяемые библиотеки C++ с Cython в той же программе. Я хочу скомпилировать разделяемые библиотеки с относительными путями для зависимостей - т.е. использовать $ORIGIN специальная переменная.

Тем не менее, потому что Python имеет CAP_NET_RAW Linux воспринимается как setuid программа и игнорирует $ORIGIN строка внутри определений зависимостей разделяемых библиотек, поэтому они не загружаются:

В целях безопасности динамический компоновщик не позволяет использовать $ORIGIN последовательности замещения для программ-идентификаторов пользователя-пользователя и группы-набора. Для таких последовательностей, которые появляются внутри строк, указанных DT_RUNPATH записи динамического массива, конкретный путь поиска, содержащий $ORIGIN последовательность игнорируется (хотя другие пути поиска в той же строке обрабатываются). $ORIGIN последовательности в DT_NEEDED запись или путь, переданный в качестве параметра dlopen() рассматриваются как ошибки. Те же самые ограничения могут быть применены к процессам, которые имеют более чем минимальные привилегии в системах с установленными расширенными механизмами безопасности.

Эта функция безопасности причиняет нам много боли. Мы должны скомпилировать разделяемые библиотеки с полными путевыми зависимостями, и они не переносимы между машинами разработки.

Есть ли способ отключить эту функцию безопасности в Linux, чтобы $ORIGIN будет интерпретироваться для программ с дополнительными возможностями?

0 ответов

Другие вопросы по тегам