![损坏的 openSSL,网站无法使用 SSH、yum、rpm 等](https://linux22.com/image/686700/%E6%8D%9F%E5%9D%8F%E7%9A%84%20openSSL%EF%BC%8C%E7%BD%91%E7%AB%99%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%20SSH%E3%80%81yum%E3%80%81rpm%20%E7%AD%89%20.png)
我试图在我的 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 包,并可能强制安装它们,因为包管理器会认为它们已经安装。