【问题标题】:Who is responsible to load files in /etc/ld.so.preload?谁负责在 /etc/ld.so.preload 中加载文件?
【发布时间】:2020-04-05 14:40:46
【问题描述】:

我之前有想过,链接到动态库的程序会查看/etc/ld.so.preload

但是,我在某处读过

所有程序都试图打开 /etc/ld.so.preload,这种行为被嵌入到 Glibc 中。

因此,为了避免使用 glibc,我想到了用汇编代码编写程序。使用nasmld 编译它。它仍在加载/etc/ld.so.preload 库。

我的最终目标是编写一个不尝试在/etc/ld.so.preload 中加载库的程序。 为此,我需要知道谁负责加载此程序以及如何编写这样的程序(无语言限制)?

PS:我真正的问题是我想编辑/etc/ld.so.preload 以包含我的库。但是如果这个库碰巧坏了,那么我机器上的每个命令都会中断,我无法在机器上做任何事情。因此,对于这种情况,我想保留一个实用程序,它可以从/etc/ld.so.preload 中删除我的库。在这种情况下,此实用程序以及sudo 必须完全静态链接。

【问题讨论】:

  • 我对你的实际问题更感兴趣,你试图通过不使用标准 C 库来解决的问题。为什么不想使用平台标准 C 库?
  • 如果你用静态链接编译我不认为它需要ld.so.preload
  • @Barmar 你是对的。该程序没有加载这些库,只是发现实际上我正在使用 sudo 运行它,而 sudo 需要 ld.so.preload。我们可以通过任何方式使 sudo 静态链接吗?
  • 这是对(已删除)Compiling assembly program which will not use glibc 的重新询问,以防其他人看起来很熟悉。
  • @EmployedRussian 我已经编辑了帖子以包含我的真正问题

标签: assembly nasm ld glibc dynamic-linking


【解决方案1】:

谁负责加载 /etc/ld.so.preload 中的文件?

动态链接器是。使用 GLIBC 时,动态链接器为 ld-linux.so

使用 nasm 和 ld 编译它。它仍在加载 /etc/ld.so.preload 库。

要么你动态链接到 GLIBC,要么上面的陈述是错误的。

其实我是用sudo运行的,sudo需要ld.so.preload。我们可以通过任何方式使 sudo 静态链接吗?

您可以重建许多程序以进行静态链接,是的。但这有成本(磁盘空间,必须为每个安全修复程序重建所有程序等),并且可能并非完全微不足道。它也不太可能解决您遇到的任何实际问题。

我真正的问题是我想编辑 /etc/ld.so.preload 以包含我的库。但是如果这个库碰巧坏了,那么我机器上的每个命令都会中断,我无法在机器上做任何事情。因此,对于这种情况,我想保留一个实用程序,它可以从 /etc/ld.so.preload 中删除我的库。在这种情况下,此实用程序以及 sudo 必须完全静态链接。

此问题的解决方案是按照 Russ Ridge 在对此答案的评论中建议的操作:“安装 BusyBox 的静态链接版本”。

BusyBox 有您想要的surm 命令。

另一种解决方案是学习如何使用Linux recovery CD——这在很多情况下可能会派上用场,因此学习如何恢复系统非常值得。

【讨论】:

  • 当您编辑ld.so.preload 以便ld-linux.so 始终加载您自己创建的损坏的动态库时,拥有一组可用的静态链接命令行工具会派上用场。我建议原始发布者在对现已删除的问题的评论中安装静态链接版本的 BusyBox,但显然原始发布者不明白这会有什么帮助。
  • 你说得对,我想编辑/etc/ld.so.preload,碰巧我的图书馆坏了,因此每一个命令都坏了,我的机器也在折腾。因此,如果发生这种情况,我想保留一个(静态链接的)实用程序,它可以工作并从 ld.so.preload 中删除该条目
  • @EmployedRussian 静态链接的busybox在使用su时给了我一个错误:'必须是suid才能正常工作',我认为必须为busybox二进制文件设置sbit。相反,我将我的实用程序设置为静态链接并设置它的位。它现在工作。感谢您的回答/领导。
  • @aaa:那么您的 BusyBox 安装可能已经损坏,并且对恢复目的没有用处。我假设 BusyBox 仍然应该能够解析 /etc/shadow 并验证您是否知道 root 密码,但是如果您的系统没有 root 密码,那么它就没有用了。也许您的发行版的busybox 包装有一些文档说明他们为什么决定不默认使其成为suid,以及如果您想要该功能如何使其有用。但是,是的,制作您自己的工具 SUID root 就足以从这个特定的可能问题中恢复,而 USB 启动棒可以做其他所有事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多