redis 多密码问题
Redis 7.x 通过 acl setuser 可以给同一个用户设置多个密码,所有密码均会生效。
- 故障场景:每次执行
acl setuser default on >password就会为 default 用户追加一个新密码,而非覆盖原有密码,任一密码认证成功即可登录。
acl setuser default on >Aa123456 ~* &* +@all
- 模拟场景:先设置第一个密码,再追加第二个密码
127.0.0.1:7100> acl setuser default on >pass1 ~* &* +@all
OK
127.0.0.1:7100> acl setuser default on >pass2 ~* &* +@all
OK
- 验证登录:使用2个密码均可以正常登录,执行
acl list可以看到 default 用户有2个加密后的密码串
127.0.0.1:7100> auth "pass1"
OK
127.0.0.1:7100> auth "pass2"
OK
127.0.0.1:7100> acl list
1) "user default on #764c5d303586dbb98f1e6d69567adaef5ab70b52f674c7ede90649a2adcfe711 #c4318372f98f4c46ed3a32c16ee4d7a76c832886d887631c0294b3314f34edf1 ~* &* +@all"
- 后续建议:若要更新密码,先通过
acl setuser的 resetpass 清空历史密码,再设置新密码,参考如下:
127.0.0.1:7100> acl setuser default resetpass
OK
127.0.0.1:7100> acl setuser default on >new_password ~* &* +@all
OK
127.0.0.1:7100> auth "pass1"
(error) WRONGPASS invalid username-password pair or user is disabled.
127.0.0.1:7100> auth "new_password"
OK