回顾
最近在服务器上面部署网站,刚开始使用还是没问题的,当时一段时间之后发现CPU和内存总是被打满,本地没有跑大的应用,主要有mysql、nginx、redis,一度还以为是nginx 的问题,但是后来排除了。之后使用htop发现有一个zzh的进程一直在占用,并且占用五个核心,将之kill掉之后CPU占用率立马就下来了,但是过段时间之后这个就又会上去…
kill进程之后CPU占用率下降到正常水平。
原因
在网上查阅资料之后,发现服务器是被恶意攻击了。在特定的场景下,如果redis以root身份运行,黑客可以使用root账号写入一个ssh文件,然后获得服务器权限和数据,当入侵成功之后,攻击者可以给用户的Redis运行环境以及Linux主机带来安全危险。
解决
# 进入etc文件夹
cd /etc
# 查看zzh和zzhs文件的权限
ll | grep zzh
# rm删除zzhs文件,但zzh不能删除,权限不够
rm -rf zzhs
# 显示zzh的文件属性,会发现其带有ia参数
# a:Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
# i:Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
lsattr zzh
# 删除其ia属性
chattr -ia zzh
# 执行上一条命令,如果出现Permission denied,则进入/usr/bin目录;如果没出现则直接执行:rm -rf zzh 删除zzh文件
cd /usr/bin
# 查看chattr权限
ls -lh chattr;lsattr chattr
# 接下来更改该命令权限,复制chattr的副本chattr.new
cp chattr chattr.new
# 给所有用户文件可执行权限
chmod a+x chattr.new
# 用chattr.new修改chattr文件属性
chattr.new -i chattr
# 删除chattr.new文件
rm -f chattr.new
# 给chattr授权
chmod a+x chattr
# 重新查看chattr权限
ls -lh chattr;lsattr chattr
# 回到zzh所在的文件夹
cd /etc
# 删除其ia属性
chattr -ia zzh
# 删除zzh文件
rm -rf zzh
预防
在redis.conf中将bind 后面的地址换成需要访问这台数据库的IP地址在,另外给redis设置密码,最后的话修改redis的运行章,以低一点的权限来运行redis服务,禁用这个账号的登录权限。