4

我正在编写一个同时具有 Python 和 C++ 库的应用程序。Python 部分需要发送和接收原始数据包,因此我为 Python 可执行文件提供了该CAP_NET_RAW功能。

我还在同一个程序中使用 Cython 加载 C++ 共享库。我想用依赖关系的相对路径编译共享库 - 即,使用$ORIGIN特殊变量。

但是,由于 Python 具有该CAP_NET_RAW功能,Linux 将其视为setuid程序并忽略$ORIGIN共享库的依赖项定义中的字符串,因此无法加载

出于安全考虑,动态链接器不允许$ORIGIN对 set-user 和 set-group ID 程序使用替换序列。对于出现在由DT_RUNPATH动态数组条目指定的字符串中的此类序列,将忽略包含该$ORIGIN序列的特定搜索路径(尽管处理同一字符串中的其他搜索路径)。作为参数传递$ORIGIN给的条目或路径中的序列被视为错误。相同的限制可能适用于在安装了扩展安全机制的系统上具有超过最低权限的进程。DT_NEEDEDdlopen()

这个安全特性给我们带来了很多痛苦。我们必须编译共享库将完整路径依赖项,并且它们在开发机器之间不可移植。

有没有办法在 Linux 中禁用此安全功能,以便$ORIGIN为具有额外功能的程序解释?

4

0 回答 0