Можно ли заставить программы интерпретировать $ 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 будет интерпретироваться для программ с дополнительными возможностями?

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]