今日公司服务器redis被入侵,估计是被当成肉鸡,记录下修复过程。
早期的 redis 在软件源中安装以后是以 root 权限运行的。而 redis 提供了将数据转储到指定文件的功能。也就是说你可以以 root 权限在全盘任意位置写入文件。文件的内容也是可控的。而对于 ssh 的 authorized_keys 并不严格要求数据格式。只要某一行存在公钥即可。由此引发了漏洞。例如利用 redis 给 root 写公钥。给 web 目录写 php 的 webshell 等等。
具体的漏洞详情可以搜一下 redis 写公钥漏洞
新版本的 redis 在安装时候会自动建立一个名为 redis 的用户。然后以这个用户权限启动。
修复办法
1、升级到最新版本。
2、如不是特别必要。可将 redis 的监听地址改为 127.0.0.1。
3、给 redis 加上访问密码。但别是弱口令
被入侵后检测
1.检查 crontab(/etc/crontab 和 /var/spool/cron/crontabs/中的文件)
2.检查异常进程。这个依机器被入侵程度具体对待
3.检查~/.ssh/authorizeds_keys。如果发现持续写入。多半是有个进程监控或是定时任务
4.检查~/.profile 及~/.bashrc。看看是否有后门
redis设置密码的两种方式
1、修改配置文件(需重启)
2、命令修改密码(无需重启)
方式1:
1-打开 /etc/redis/redis.config 文件
2-找到 :# requirepass foobared # 去掉行前的注释,并修改密码为所需要的密码。保存文件
3-重启redis sudo service redis restart
4-连接redis: redis-cli -h 127.0.0.1 -p 6379 -a 密码
方式2:
1-连接redis
2-config get requirepass # 获取当前密码
3-config set requirepass 123456 # 设置当前密码为123456(这里换成你自己的密码,越复杂越好)
4-config get requirepass # 获取当前密码
django配置
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://:123456@127.0.0.1:6379/0", # http://冒号:密码@ip:port/库号
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}