如何使用$ ORIGIN和suid应用程序?

我使用启用了setcap CAP_NET_RAW的python。 我的python脚本导入了一个共享库,它的RPATH中有$ ORIGIN。 由于我的python现在是一个suid应用程序,因此$ ORIGIN未被评估,并且库无法正确加载(这是由于在glibc中发现安全漏洞)。 有没有办法告诉链接器我的库路径是安全的,并且无论如何加载库?

还有一些注意事项:

  • 我只在开发阶段需要这个功能。 我不想寻找生产解决方案。
  • 以root身份工作时,一切正常。
  • 我不想以root身份工作。
  • 谢谢,戴夫


    你可以尝试其中之一。 考虑到<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