我正在使用启用了setcap CAP_NET_RAW的python。我的python脚本导入一个共享库,其RPATH中有$ ORIGIN。由于我的python现在是一个suid应用程序,因此不评估$ ORIGIN并且库未正确加载(这是由于security leak found in glibc)。 有没有办法告诉链接器我的库路径是安全的并且还加载了库?
还有一些说明:
谢谢, 戴夫
答案 0 :(得分:2)
您可以尝试其中之一。考虑<path-to-mylib>
是求解$ORIGIN
rpath引用后的绝对路径名。
在告知ldconfig找到您的库的位置后重新运行ldconfig
$ echo "<path-to-mylib>" > /etc/ld.so.conf.d/my-new-library.conf
$ ldconfig -v
如果以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 :(得分:1)
你试过sudo吗?
而不是$ ORIGIN,在开发期间使用固定路径,因为它们将在setuid程序上运行。不要更改主构建过程,只需使用patchelf将rpath设置为您需要的内容。您可以制作一个shell脚本,它可以执行以下操作:
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