小站修复记

2023-06-15 15:02:34 浏览数 (1)

前言

前段时间,一直收到腾讯云安全事件邮件,主要涉及到 SSH、openssl、sudo 几个高危漏洞;openSSH 相对来讲是比较好处理的,但是 OpenSSL却比较棘手,因为涉及的依赖比较多……

依照腾讯云官方的指导文件,直接可以使用yum进行升级,我也遵照执行了,但没过几天又被检测出OpenSSL漏洞,一模一样……

此时我只能使用OpenSSL源码包进行编译安装,以规避安全漏洞问题。只可惜我轻敌了,OpenSSL 依赖真多,而且都是涉及到系统级别,处理不好就可能引出一堆问题,巧的是这件事发生在我的身上……

No. 1

我先编译安装 openSSH,一切顺利,没有出现什么幺蛾子,sudo 升级也一样:sudo 我是直接用 dnf update sudo 进行升级的(我的是CentOS 8),openSSH 用的是源码包进行编译安装,一切顺利。

接着对 OpenSSL 升级:dnf update openssl,也算顺利,系统功能正常,至少我没发现异常。

No. 2

大概一个礼拜左右,我再次收到腾讯云安全邮件,OpenSSL 高危漏洞。我看了漏洞情况,和一个礼拜前收到的一模一样,此时我确实点懵逼了……

No.3 开始对 OpenSSL 再次升级

  • 下载 OpenSSL 最新源码包;
  • 编译进行安装升级;

如此两步骤,好像没有什么太大问题,遂执行之

我一路猛操作,都没有什么问题,只是在执行命令 openssl version 的时候版本是我下载的版本,但执行 ssh -V 的时候,OpenSSL 版本是老的版本。

我所想到的是库没有进行替换,虽然版本是最新版本了,但是库文件还是老版本,想到的是进行库文件替换:

代码语言:javascript复制
cp libssl.so.1.1 /usr/lib64/
cp libcrypto.so.1.1 /usr/lib64/
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig -v

此时一执行命令ssh -V,提示 xxx.so not found …… 心里那个崩溃啊,但是还是没有意识到问题的严重性。因为有其它事情,我就暂且搁在一边,等到晚上我准备处理异常的时候发现无法 SSH 云服务器了,VNC 也不行 …… 只能进行工单提交了

No. 4

工单提交后,腾讯云工程师接单帮忙处理,4个小时候后,北京客服打电话告诉我:已经尝试各种方法了,还是没办法恢复,只能把数据先拷出来,然后重置云服务 ……

只要数据能恢复,我就满足了,重置云服务没啥(这里是腾讯云工程师帮忙挂载数据出来,然后给我一个临时账号去拷贝数据的) ……

No. 5

数据拷贝完成,然后就是重置服务器…… 这次我直接先升级 OpenSSH 和 OpenSSL,问题还是一样源码编译 OpenSSL,重置云服务器不下10次,最后只得放弃…… 我用dnf update openssl && dnf update openssh && dnf update sudo 进行升级,同样还是被检测OpenSSL漏洞,被我强制忽略 ……

No.6 小站数据恢复

GitHub 下载最新的 Typecho 文件;

把数据目录 mariadb/var/typecho 上传到云服务 mariadb/var/typecho,并进行权限修改

代码语言:javascript复制
chown -Rf mariadb:mariadb mariadb/var/typecho

# 此时登陆数据库,可以看到有个库为 typecho
show databases;

创建用户并进行数据授权

代码语言:javascript复制
# 创建用户
CREATE USER IF NOT EXISTS typecho IDENTIFIED BY '123456ABC';

# 授权
GRANT ALL ON typecho.* TO [email protected]/* <![CDATA[ */!function(t,e,r,n,c,a,p,m,o){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-yjshash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-yjsemail')){for(e='',o=0,r='0x' a.substr(0,2)|0,n=2;a.length-n;n =2){m=('0' ('0x' a.substr(n,2)^r).toString(16)).slice(-2);if((a.length-n)<=6&&a.length>=128)o=(parseInt(m)<=191)?1:o*2;if(o>1)break;e ='%' m;}p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */;

# 刷新权限
FLUSH PRIVILEGES;

跨域问题得以解决: 原来 www.deyun.fun 和 deyun.fun 是不一样的

代码语言:javascript复制
# 我一直都自己访问 https://deyun.fun ,没发现什么问题,各种资源都是正常
# 我无意中在百度快照发现小站不对,很多资源加载不了,F12 一看,都是跨域报错

# 后来,一大佬说你可以重定向
# 于是,在Nginx 配置文件加上如下代码,进行重定向,也就是说 所有来自 www.deyun.fun 的请求都会重# 
# 定向到 deyun.fun

# 增加代码
rewrite ^/www.deyun.fun deyun.fun;

# 重启 Nginx,因为我用的是 lnmp 一键脚本安装,所有有这个命令 lnmp
lnmp nginx restart


# www.deyun.fun 正常访问是解决了,但是很多我博客中的媒体资源,如图片、视频等都加载不了,同样也是跨域问题。如果每篇文章都去修改,那也太累了

# 数据修改连接
update `typecho_contents` SET `text` = replace (`text`, 'https://www.deyun.fun', 'https://deyun.fun');

# 文章引用资源问题也解决了,但是网站本是一些页面引用的怎么办呢?
# 切换到博客程序目录下
sed -i "s/www.deyun.fun/deyun.fun/g" `grep "www.deyun.fun" -rl ./`

写了备份脚本,每天定时备份,并且把备份文件邮件方式发送至 QQ 邮箱(空间大);

0 人点赞