redis没有实现访问控制这个功能,但是它提供了一个轻量级的认证方式,可以编辑redis.conf
配置来启用认证。
1、初始化Redis密码:
在配置文件中有个参数: requirepass
这个就是配置redis
访问密码的参数;比如:
requirepass test123;
Ps:需重启Redis才能生效
redis
的查询速度是非常快的,外部用户一秒内可以尝试多达150K个密码;所以密码要尽量长(对于DBA
没有必要必须记住密码);
2、不重启Redis设置密码:
redis 127.0.0.1:6379> config set requirepass test123
查询密码(为什么查不到,因为命令行设置以后需要登陆一次):
redis 127.0.0.1:6379> config get requirepass
(error) ERR operation not permitted
密码验证:
redis 127.0.0.1:6379> auth test123 OK
再次查询:
redis 127.0.0.1:6379> config get requirepass
1) "requirepass" 2) "test123"
PS:如果配置文件中没添加密码 那么redis
重启后,密码失效;
3、登陆有密码的Redis:
在登录的时候的时候输入密码:
redis-cli -p 6379 -a test123
先登陆后验证:
redis-cli -p 6379
redis 127.0.0.1:6379> auth test123 OK
auth
命令跟其他redis
命令一样,是没有加密的;阻止不了攻击者在网络上窃取你的密码;
最后
redis
加一个密码访问是为了提供多一层的保护。如果防火墙或者用来保护redis的系统防御外部攻击失败的话,外部用户如果没有通过密码认证还是无法访问redis
的。
同时有一个字段是bind
,作用是绑定本机的IP地址,(准确的是:本机的网卡对应的IP地址,每一个网卡都有一个IP地址),而不是redis允许来自其他计算机的IP地址。
比如:
bind 127.0.0.1 就是只有本机可以连接
bind 0.0.0.0 所有来源都可以访问
bind 172.18.235.206 只有通过172.18.235.206这张网卡来的流量可以访问。
附注:
bind 127.0.0.1的解释:(为什么只有本机可以连接,而其他不可以连接)
我们从ifconfig可以看出:lo网卡(对应127.0.0.1IP地址):是一个回环地址(Local Loopback),也就是只有本地才能访问到这个回环地址,而其他的计算机也只能访问他们自己的回环地址。
那么来自这个lo网卡的计算机只有本机,所以只有本机可以访问,而其他计算机不能访问。
bind 172.18.235.206的话,只要通过这个网卡地址(172.18.235.206)来的Redis请求,都可以访问redis。
总结
添加密码
#配置文件里加(重启依然生效)
requirepass test123;
#进入后命令行配置(重启后失效,注意配置完以后必须验证身份后才能使用)
redis 127.0.0.1:6379> config set requirepass test123
redis 127.0.0.1:6379> auth test123 OK
查询密码
redis 127.0.0.1:6379> config get requirepass
1) "requirepass" 2) "test123"
登陆访问
#无密码
redis-cli -h 127.0.0.1 -p 6379
#有密码
redis-cli -h 127.0.0.1 -p 6379 -a 123456
#登录进去再验证密码
redis-cli -p 6379
redis 127.0.0.1:6379> auth test123 OK
PS:其他用到redis
的服务在配置了redis
密码以后需要添加密码配置,然后重启。
引用
Redis 用户验证redis命令行启动和设置密码
Redis中bind的正确配置
评论