损坏的 openSSL,网站无法使用 SSH、yum、rpm 等

损坏的 openSSL,网站无法使用 SSH、yum、rpm 等

我试图在我的 PHP 网站上安装 uTorrent,但在安装过程中我被踢出 SSH,并且网站瘫痪了。

uTorrent 需要 libssl.so.1.0.0 和 libcrypto.so.1.0.0,因此为了降级,我执行以下操作:

wget https://www.openssl.org/source/openssl-1.0.0r.tar.gz
cd openssl-1.0.0r
./config shared && make

安装顺利,它取代了我之前的版本 1.0.1e。但是当我 ldd 时,列表显示 libssl.so.1.0.0 和 libcrypto.so.1.0.0 的“找不到版本”。我继续从我的服务器中删除它们,希望恢复更改,结果立即被踢出 SSH,网站也瘫痪了。

现在我无法通过 SSH 连接,唯一的方法是通过主机提供的 KVM。所有命令(例如yum rpm wget等)都返回以下错误:

error while loading shared libraries libcrypto.so.10: file too short

我的服务器是无人管理的,因此我认为我无法选择在 USB 上手动重新安装 openSSL 的软件包...

答案1

如果您无法将物理介质连接到服务器,则需要清除服务器并重新安装。由于您设法破坏了操作系统中的所有加密库,因此您需要用物理介质中的正确版本替换它们。

但是,上述恢复方法需要您对 Linux 发行版的软件包管理方式有相当广泛的了解。

始终遵循此准则:始终使用针对您的发行版和版本编译的软件包,切勿自行编译任何内容。这可为您省去很多麻烦。

答案2

这个技巧帮助了一位对另一个关键软件包做了类似事情的同事。

如果你的 KVM 访问允许从剪贴板粘贴,那么你可以libssl.so.10从已知有效的安装中复制libcrypto.so.10。为了防止终端混乱,请先对文件进行 Base64 编码。

在一个已知良好的系统上,类似这样的情况:

$ base64 </usr/lib64/libssl.so.10
<copy the output>

然后是损坏的系统:

$ base64 -d <<EOF >/usr/lib64/libssl.so.10
<paste in the output from above>
EOF

(对libcrypto.so.10任何其他文件重复此操作)

如果这样可以使一切正常运行,则重新安装 OS SSL 包,并可能强制安装它们,因为包管理器会认为它们已经安装。

相关内容