我偶然发现了一个名为的文件ld.so.preload
,但找不到它的实际用途。它与环境变量有关吗LD_PRELOAD
?
答案1
好问题!实际上,/etc/ld.so.预加载在某种程度上取代了LD_预加载。
LD_预加载由于安全问题而受到严格限制:它不能执行任意设置用户标识二进制文件,因为如果可以的话,你可以用自己的恶意代码替换库例程,例如这里进行愉快的讨论。事实上,你可以阅读ld.so'用户手册:
LD_预加载
将在所有其他库之前加载的附加用户指定 ELF 共享库列表。列表项可以用空格或冒号分隔。这可用于有选择地覆盖其他共享库中的函数。使用描述下给出的规则搜索库。对于 set-user-ID/set-group-ID ELF 二进制文件,将忽略包含斜杠的预加载路径名,并且仅当库文件上启用了 set-user-ID 权限位时,才会加载标准搜索目录中的库。
相反,文件/etc/ld.so.预加载不存在这样的限制,其理念是,如果你可以读取/写入目录/ETC,您已经拥有 root 凭据。因此可以使用它。只需记住您可能使用/etc/ld.so.预加载即使你一开始似乎没有它:它只不过是一个特征glibc,因此在所有 Linux 发行版中(但据我所知,不包括 Unix 版本),您可以创建它并将 setuid 库的名称放入其中任何Linux 发行版,它就可以运行。