Как использовать $ ORIGIN и приложение suid? - PullRequest
7 голосов
/ 27 июня 2011

Я использую python с включенным setcap CAP_NET_RAW. Мой скрипт на python импортирует разделяемую библиотеку, в которой $ ORIGIN находится в RPATH. Поскольку мой python теперь является приложением suid, $ ORIGIN не оценивается и библиотека загружается неправильно (это связано с утечкой безопасности, обнаруженной в glibc ). Есть ли способ сообщить компоновщику, что мой путь к библиотеке безопасен, и загрузить библиотеку в любом случае?

Еще несколько заметок:

  1. Эта функция мне нужна только на стадии разработки. Я не ищу производственное решение.
  2. При работе с правами root все работает.
  3. Я не хочу работать с правами root.

Спасибо, Dave

Ответы [ 2 ]

2 голосов
/ 22 ноября 2012

Вы можете попробовать один из них.Учтите, что <path-to-mylib> - это абсолютный путь после решения ссылки $ORIGIN rpath.

  1. Перезапустите ldconfig после указания, где найти вашу библиотеку

    $ echo "<path-to-mylib>" > /etc/ld.so.conf.d/my-new-library.conf
    $ ldconfig -v
    
  2. Если запускать вещи с правами root невозможно, экспортируйте LD_LIBRARY_PATH с правильным каталогом для каждого выполнения процесса

    $ echo "export LD_LIBRARY_PATH=<path-to-mylib>" >> ~/.bashrc
    $ export LD_LIBRARY_PATH=<path-to-mylib>
    $ # then run your stuff...
    
1 голос
/ 14 июля 2011

Вы пробовали sudo?

Вместо $ ORIGIN используйте фиксированные пути во время разработки, поскольку они будут работать с программами setuid. Не меняйте основной процесс сборки, просто используйте patchelf, чтобы установить для rpath то, что вам нужно. Вы можете создать скрипт оболочки, который будет что-то вроде:

ln=`readelf -d |grep RPATH`
IFS=:
set -- $ln
newrpath=`echo $2 |sed 's/\$ORIGIN/\/devel\/myprog\/lib/'`
patchelf --set-rpath newrpath myprogram

Тогда ваш двоичный файл больше не будет искать $ ORIGIN /../ lib, но /devel/myprog/lib/../lib

...