如何使用$ ORIGIN和suid应用程序?
我使用启用了setcap CAP_NET_RAW的python。 我的python脚本导入了一个共享库,它的RPATH中有$ ORIGIN。 由于我的python现在是一个suid应用程序,因此$ ORIGIN未被评估,并且库无法正确加载(这是由于在glibc中发现安全漏洞)。 有没有办法告诉链接器我的库路径是安全的,并且无论如何加载库?
还有一些注意事项:
谢谢,戴夫
你可以尝试其中之一。 考虑到<path-to-mylib>
是<path-to-mylib>
$ORIGIN
rpath引用后的绝对路径名。
在告诉它在哪里找到你的图书馆后重新运行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...
你尝试过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
链接地址: http://www.djcxy.com/p/8109.html上一篇: How to use $ORIGIN and suid application?
下一篇: Proper Way of Handling an Orientation Change in Android