Redis 中的安全
# 140.Redis 中的安全
Redis 的作者 Salvatore Sanfilippo 曾经发表过 Redis 宣言 (opens new window),其中提到 Redis 以简洁为美。同样在安全层面 Redis 也没有做太多的工作。
# 可信的环境
Redis 的安全设计是在“Redis 运行在可信环境”这个前提下做出的。在生产环境运行时不能允许外界直接连接到 Redis 服务器上,而应该通过应用程序进行中转,运行在可信的环境中是保证 Redis 安全的最重要方法。
# bind
Redis 的默认配置会接受来自任何地址发送来的请求,即在任何一个拥有公网 IP 的服务器上启动 Redis 服务器,都可以被外界直接访问到。要更改这一设置,在配置文件中修改 bind 参数,如只允许本机应用连接 Redis,可以将 bind 参数改成:
bind 127.0.0.1
1
# 设置密码
可以通过配置文件中的 requirepass 参数为 Redis 设置一个密码。例如:
requirepass 123456
1
由于 Redis 的性能极高,并且输入错误密码后 Redis 并不会进行主动延迟(考虑到 Redis 的单线程模型),所以攻击者可以通过穷举法破解 Redis 的密码(1 秒内能够尝试十几万个密码),因此在设置时一定要选择复杂的密码,这里仅仅是为了方便演示,才设置的这么简单。
客户端每次连接到 Redis 时都需要发送密码,否则 Redis 会拒绝执行客户端发来的命令。例如:
redis> GET foo
(error) ERR operation not permitted
1
2
2
发送密码需要使用 AUTH 命令,就像这样:
redis> AUTH 123456
OK
1
2
2
然后才可以执行命令:
redis> GET foo
"1"
1
2
2
注意:配置 Redis 复制的时候如果主数据库设置了密码,需要在从数据库的配置文件中通过 masterauth 参数设置主数据库的密码,以使从数据库连接主数据库时自动使用 AUTH 命令认证。
上次更新: 2024/10/1 21:14:36