是否可以使用CAP_NET_RAW功能使程序在加载的共享库中解释$ ORIGIN?

时间:2014-07-17 16:21:56

标签: c++ linux sudo raw-sockets suid

我正在编写一个包含Python和C ++库的应用程序。 Python部分需要发送和接收原始数据包,因此我给Python可执行文件CAP_NET_RAW能力。

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

但是,由于Python具有CAP_NET_RAW功能,因此Linux将其视为setuid程序,并忽略共享库的依赖关系定义so they fail to load内的$ORIGIN字符串:< / p>

  

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

这种安全功能给我们带来了很大的痛苦。我们必须编译共享库将具有完整路径依赖性,并且它们在开发机器之间不可移植。

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

0 个答案:

没有答案