【发布时间】:2013-08-06 04:13:00
【问题描述】:
在我的自定义环境中,预加载了一个拦截器库,它运行bind()、connect() 等调用的特殊实现。
我看到的问题是,每当应用程序使用命令setcap 显式启用功能时,执行应用程序无法预加载拦截器库并调用默认 libc connect()。
这是预期的行为吗?如果是,禁用LD_PRELOAD 的原因是什么?
是否有任何调整或方法可以用来成功预加载启用功能的库?
【问题讨论】:
-
请参阅this question 以获得答案。
-
您可以为目标二进制文件编写一个包装程序。它或多或少必须是 setuid root。它将派生一个子进程,然后执行目标二进制文件(设置
LD_PRELOAD);目标二进制文件没有设置任何文件功能。然后,您的预加载库与子进程通信(通过例如 fd 3 上的套接字对),子进程向目标进程授予必要的功能,然后退出(并且预加载库获取子进程)。如果你想要一个例子,请告诉我。 -
@NominalAnimal 很高兴你能给我一个例子。
标签: c linux linux-kernel shared-libraries linux-capabilities