Redis配置ACL文件后默认用户nopass异常及ACL持久化问题
Redis默认用户变为nopass的原因及解决办法
核心原因
Redis的ACL文件配置优先级高于redis.conf中的requirepass。当你配置aclfile并重启服务后,Redis会优先加载ACL文件里的用户规则,完全覆盖redis.conf中关于用户权限的兼容配置(包括requirepass)。
你第一次执行acl save生成ACL文件时,当前Redis实例中的默认用户(default)已经被设置为nopass状态,这个配置被写入了ACL文件。重启后Redis加载该文件,就会导致default用户无需认证,同时requirepass admin的配置被忽略。
为什么default用户会变成nopass?
- 当你未配置ACL文件时,
requirepass admin等价于给default用户设置密码(acl setuser default on >admin)。但创建新ACL用户后,若操作中不小心修改了default用户的权限(比如执行过acl setuser default nopass),或者Redis在ACL初始化过程中默认用户的状态被重置,执行acl save就会把当前的nopass状态写入文件。 - 第一次生成ACL文件时,如果没有显式维护default用户的密码规则,Redis会将当前内存中的用户状态直接持久化,包括nopass配置。
解决步骤
- 直接连接Redis CLI(当前无需认证),执行命令重置default用户的密码:
acl setuser default on >admin - 执行
acl save将更新后的用户规则写入ACL文件:acl save - 重启Redis服务,此时default用户会重新要求认证,
auth admin可正常使用。
后续建议统一通过ACL规则管理用户权限,redis.conf中的requirepass可以保留作为兼容配置,但优先以ACL文件中的规则为准。
内容的提问来源于stack exchange,提问作者Ankit Sahay
相关产品推荐
相关产品推荐

