前言
前段时间,一直收到腾讯云安全事件邮件,主要涉及到 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 是不一样的
# 我一直都自己访问 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 邮箱(空间大);