gpt4 book ai didi

linux - 将符号链接(symbolic link) libc.so.6 替换为另一个更新的 libc.so.6 后如何恢复?

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:32 26 4
gpt4 key购买 nike

用另一个更新的 libc.so.6 替换符号链接(symbolic link) libc.so.6 后如何恢复?

我检查了以下链接 How to recover after deleting the symbolic link libc.so.6?

问题是我已经用另一个 libc.so.6 更新了文件

在没有 knoppix 的情况下还有其他方法吗?我无法执行 rm、cat、mv.. 等操作,只能进行 ldconfig,但我什至无法替换该文件,因为链接就在那里。我怎样才能删除这个文件?

最佳答案

如果您在没有任何准备的情况下就已经陷入这样的问题,那么,如果没有外部救援启动,您很可能无法恢复。对于将来的实验,您可以使用以下准备工作之一:

  • 在单独的终端中启动 mc(Midnight Commander)或另一个具有嵌入式文件系统操作实现的复杂的类似 shell 的工具。
  • 创建“救援”工具集(如 FreeBSD 中/rescue 下的工具集)。
  • 启动任何脚本语言(Python、Ruby 等)的 REPL 工具;也许某些导入(例如Python中的sysosos.path)应在危险步骤之前调用。

(对于所有此类操作,在实验之前备份关键系统路径的副本是一个好方法。)

但是一些小操作可以在裸外壳中完成,无需使用 libc。在大多数交互式 shell(例如 bash)中,都有一些有用的内置命令,因此您可以:

  • echo *echo/lib/* 而不是 ls
  • echo -n >$file 将其清空;对于ldconfig,这有效地将其从库中删除,因为ldconfig仅在其缓存中列出正确识别的库;
  • 如果 printf 是 shell 内置的(对于现代的 bash),您可以使用它和 shell 重定向创建任何二进制文件;虽然速度非常慢并且容易出错,但仍然是一个机会。

接下来,在每次外部命令调用之前为正确的 libc 版本设置 LD_PRELOAD 可以将任何库替换为另一个库;例如LD_PRELOAD=/lib/libc-2.11.3.so ls 将使用/lib/libc-2.11.3.so 中找到的所有外部符号运行 ls,因此已覆盖您已安装的同名符号。 (不要在导出规范之前尝试使用 env!它会因 libc 损坏而失败,并且对于 bash 等任何 B 组 shell 来说都不需要。)使用/lib、/usr/lib 的备份副本导出 LD_LIBRARY_PATH 可以解决大多数主库目录损坏的问题。 (注意,您链接的问题中描述了此方法。您真的尝试过吗?)

我希望可以将其他黑客方法添加到此列表中。

附注这个问题不应该转移到 ServerFault 吗?

关于linux - 将符号链接(symbolic link) libc.so.6 替换为另一个更新的 libc.so.6 后如何恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27137190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com