8

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

还有一些注意事项:

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

谢谢,戴夫

4

2 回答 2

2

您可以尝试其中一种。考虑这是解决rpath 引用<path-to-mylib>后的绝对路径名。$ORIGIN

  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...
    
于 2012-11-21T21:00:20.123 回答
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

于 2011-07-14T05:56:46.480 回答