当你在使用 Redis 时遇到错误信息 DENIED Redis is running in protected mode because protected mode is enabled and no password is set for the default user,这意味着 Redis 服务器出于安全考虑,只接受来自本地回环接口(loopback interface)的连接。如果你需要从外部连接到 Redis 服务器,需要采取相应的措施来禁用保护模式或设置密码。以下是解决这个问题的几种方法:
方法 1:禁用保护模式
使用 CONFIG SET 命令
- 连接到 Redis 服务器:
- 使用 Redis 客户端(如 redis-cli)从同一台主机连接到 Redis。
- 禁用保护模式:
- 执行 CONFIG SET protected-mode no 命令来禁用保护模式。
- 使更改永久生效:
-
执行 CONFIG REWRITE 命令将配置更改写入 redis.conf 文件。
示例# 连接到 Redis 服务器 redis-cli # 禁用保护模式 CONFIG SET protected-mode no # 使更改永久生效 CONFIG REWRITE
-
注意事项
- 安全性:
- 禁用保护模式后,Redis 服务器将不再限制来自非本地接口的连接。
- 确保 Redis 服务器不直接暴露在互联网上,或者使用防火墙和安全组来限制访问。
方法 2:编辑 redis.conf 文件
- 编辑 redis.conf 文件:
- 找到 protected-mode 配置项,将其设置为 no。
- 重启 Redis 服务器:
-
保存文件并重启 Redis 服务器以使更改生效。
示例# 编辑 redis.conf 文件 sudo nano /etc/redis/redis.conf # 找到 protected-mode 配置项,将其设置为 no protected-mode no # 保存并退出编辑器 Ctrl + X Y Enter # 重启 Redis 服务器 sudo systemctl restart redis
-
方法 3:启动 Redis 时禁用保护模式
如果你只是手动启动 Redis 服务器进行测试,可以在启动命令中添加 --protected-mode no 选项。
示例
# 启动 Redis 服务器并禁用保护模式
redis-server --protected-mode no
方法 4:设置密码
设置密码是一种更安全的解决方案,它允许你通过身份验证来访问 Redis 服务器。
- 编辑 redis.conf 文件:
- 找到 requirepass 配置项,设置一个强密码。
- 重启 Redis 服务器:
-
保存文件并重启 Redis 服务器以使更改生效。
示例# 编辑 redis.conf 文件 sudo nano /etc/redis/redis.conf # 找到 requirepass 配置项,设置一个强密码 requirepass yourStrongPassword # 保存并退出编辑器 Ctrl + X Y Enter # 重启 Redis 服务器 sudo systemctl restart redis
-
在客户端中使用密码
- 连接到 Redis 服务器:
- 使用密码连接到 Redis 服务器。
- 验证密码:
-
使用 AUTH 命令进行身份验证。
示例# 连接到 Redis 服务器 redis-cli # 验证密码 AUTH yourStrongPassword
-
建议的最佳实践
- 设置密码:
- 使用密码是最安全的解决方案,可以有效防止未经授权的访问。
- 使用防火墙:
- 即使禁用保护模式,也应使用防火墙或安全组来限制对 Redis 服务器的访问。
- 绑定到特定 IP:
-
在 redis.conf 文件中设置 bind 配置项,绑定到特定的 IP 地址,而不是 0.0.0.0。
示例:绑定到特定 IP# 编辑 redis.conf 文件 sudo nano /etc/redis/redis.conf # 找到 bind 配置项,绑定到特定的 IP 地址 bind 127.0.0.1 192.168.1.100 # 保存并退出编辑器 Ctrl + X Y Enter # 重启 Redis 服务器 sudo systemctl restart redis
-
总结
- 禁用保护模式:
- 使用 CONFIG SET protected-mode no 和 CONFIG REWRITE 命令。
- 或者编辑 redis.conf 文件将 protected-mode 设置为 no 并重启服务器。
- 或者在启动 Redis 时添加 --protected-mode no 选项。
- 设置密码:
- 在 redis.conf 文件中设置 requirepass 配置项。
- 使用 AUTH 命令在客户端进行身份验证。
- 最佳实践:
- 建议设置密码并结合防火墙规则来提高安全性。
- 避免将 Redis 服务器直接暴露在互联网上。
通过这些方法,可以解决 Redis 保护模式导致的连接问题,并确保 Redis 服务器的安全性和稳定性。
参考资源
- Redis 官方文档:
配置文件
保护模式 - StackExchange.Redis 文档:
StackExchange.Redis GitHub
StackExchange.Redis 文档