记阿里云ECS挖矿木马Macron的排查解决过程

记阿里云ECS挖矿木马Macron的排查解决过程

0. 现象

早上朋友找到我说,他们放在阿里云上的站点无法访问了,页面提示nginx 502 Gateway错误,让我帮忙看看。

1. 排查过程

定位问题

第一反应是不是nginx哪里除了问题,因为自己本身对nginx这一块也不大熟,就先网上查了下502的原因,有说一些配置导致的、日志写满磁盘的等。

看着原因比较多,不是很清楚,于是决定先登录服务器再说。

使用finalshell登录后,很快看到CPU一直是100%的状态,于是top命令查看是那个进程一直占着CPU。

这时候就能定位到Macron这个进程了,第一反应先kill了,CPU马上降下来了。但是以作为一个程序员对病毒的粗浅理解,事情肯定不会这么简单的,果不其然,很快这个Macron进程就又冒出来了。

- 阅读剩余部分 -

2019简单总结,2020憧憬下

时光走向2020年纪元,今天偶然开始打开个人blog时发现多了两条评论,这对于本站来说可是蛮稀罕的事情,毕竟三年多来总评论数都停留在个位数。

最近的文章已是2019年7月份写的了,去年整年共发布5篇文章,真是惨不忍睹。细想整个2019年,发生了很多事情,个人也有了一些思考,今天借此机会记录下,说不定未来哪天会回来看看呢。

- 阅读剩余部分 -

使用Redis构建分布式锁

在软件开发中,锁是常见的一种业务处理方式,用途也很广泛。锁给我们提供了一种能够被多个线程访问的共享内存数据结构,在使用锁时,通常有着以下步骤“获取锁、然后执行操作、最后释放锁”。

最初的锁实现中,是提供给同一进程内的多个线程进行共享访问的,因为最初往往程序都是单机部署,而随着互联网技术的发展,分布式部署已成了主流,同一应用往往部署在多个不同的服务器中。

能让分布在不同服务器的进程同时访问的锁,称为分布式锁。分布式锁有多种实现方式,这里只介绍其中的一种:利用Redis实现分布式锁。

简易锁

大部分Redis用户对锁(lock)、加锁(locking)、锁超时(lock timeout)有所了解,但确不一定能够正确使用,都是因为未能正确考虑以下几种故障和异常情况:

  • 持有锁的进程因为操作时间过长而导致锁被自动释放,但进程本身并不知道,那么当该线程对锁进行释放时就有可能会将其他进程持有的锁进行释放;
  • 当前持有锁的进程在进行长时间操作时崩溃,导致锁未能正常释放,而其他想要获取锁的线程并不知道哪个线程持有锁,也无法知晓持有锁的线程已经崩溃,因此只能等待锁过期释放;
  • 当一个进程持有的锁过期后,多个线程同时尝试去获取锁,且都获取了锁;
  • 上述第一、第三种情况同时出现,导致多个线程获得了锁,而每个线程都以为自己是唯一获得锁的线程;

如今稍微好点硬件能够让Redis在服务器上每秒执行几十万次操作,虽说上述情况出现的几率较小,但在高负载时出现的几率会大大提高,因此需要编写能正确工作的锁。

- 阅读剩余部分 -

redis.conf部分配置项解析

在redis的根目录下我们看到有个redis.conf的文件,这就是redis启动的默认配置文件。之前使用src/redis-server启动后,使用info命令查看运行信息,发现config_file为空,实际上是默认使用该配置文件的。

接下来,我们来看看手动制定启动的配置文件:

src/redis-server redis.conf

- 阅读剩余部分 -

redis安装与使用

  • 安装
  • 启动/关闭
  • 运行信息查看
  • 客户端

0. 安装

以macOS/linux为例,安装redis其实很简单:

$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz
$ cd redis-5.0.5
$ make

上述方式是对redis源代码进行编译的。

- 阅读剩余部分 -