【问题标题】:How to recover after replacing the symbolic link libc.so.6 with another updated libc.so.6? [closed]用另一个更新的 libc.so.6 替换符号链接 libc.so.6 后如何恢复? [关闭]
【发布时间】:2015-01-24 01:47:57
【问题描述】:

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

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

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

没有knoppix,还有其他方法可以解决吗?我不能只做 rm、cat、mv 等 ldconfig 但我什至不能替换文件,因为链接在那里。我怎样才能删除这个文件?

【问题讨论】:

    标签: linux


    【解决方案1】:

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

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

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

    但是一些小动作可以在没有运行 libc 的裸壳中完成。在像bash 这样的大多数交互式shell 中,都有一些有用的内置函数,因此您可以:

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

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

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

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

    【讨论】:

    • 最后我使用了 knoppix。还是谢谢!
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 2013-11-10
    • 1970-01-01
    • 2012-11-27
    • 2014-05-22
    • 2013-08-29
    相关资源
    最近更新 更多