要启用Redis身份验证,首先在redis.conf配置文件中设置requirepass参数,例如requirepass yourpassword。然后重启Redis服务器。客户端连接时使用AUTH yourpassword命令进行认证。默认Redis不开启认证,生产环境必须开启以防止未授权访问。
设置步骤
1. 编辑redis.conf文件,找到# requirepass foobared这一行,去掉#并修改密码:requirepass mystrongpassword。2. 重启Redis:sudo systemctl restart redis。3. 测试连接:redis-cli -h 127.0.0.1 -p 6379,然后输入AUTH mystrongpassword,如果返回OK则成功。
客户端连接示例
使用redis-cli:redis-cli -h host -p port -a password。Python中import redis; r = redis.Redis(host='localhost', port=6379, password='mypassword')。如果忘记输入密码,会提示ERR Client sent AUTH, but no password is set。
常见登录问题解决
问题1:(error) NOAUTH Authentication required. 解决:使用AUTH命令或在连接时指定-a参数。问题2:WRONGPASS invalid password. 解决:检查密码是否正确,重启后生效。问题3:连接超时,检查防火墙是否开放6379端口,并bind 127.0.0.1改为0.0.0.0如果远程访问。
安全最佳实践
使用强密码,避免默认端口6379改成其他端口。结合TLS加密传输。禁用危险命令如FLUSHALL通过rename-command命令。使用ACL(Redis 6.0+)更细粒度控制用户权限:ACL SETUSER alice on >password ~* &* +@all。
Redis 6 ACL示例
ACL SETUSER myuser on >mypassword ~* +@read +@write。ACL LIST查看用户。客户端连接:redis-cli --user myuser --pass mypassword。解决忘记密码:停止Redis,临时注释requirepass,重启后修改,再启用。
远程访问配置
在redis.conf中设置bind 0.0.0.0,protected-mode no(不推荐,仅测试),并requirepass。防火墙:ufw allow from client_ip to any port 6379。常见错误:MISCONF Redis is configured to save RDB snapshots,但无法访问目录,解决chmod 755 /var/lib/redis。
故障排除
如果AUTH失败,检查日志/var/log/redis/redis-server.log。密码包含特殊字符需转义。集群模式下每个节点独立设置密码。Sentinel模式需在sentinel.conf中设置masterauth。
FAQ
Q: Redis默认是否开启认证?
A: 否,默认无密码,易被攻击。
Q: 如何重置忘记的密码?
A: 停止服务,编辑redis.conf注释requirepass,重启修改。
Q: ACL和requirepass区别?
A: ACL更灵活,支持多用户和命令权限,requirepass是全局单一密码。
Q: 远程连接总是失败?
A: 检查bind、端口、防火墙和protected-mode设置。