在上一篇文章《Redis 部署》中介绍了Redis的基础安装,其中简单介绍了Redis配置文件redis.conf里面的参数,Redis在市场上应用越来越普及这样有好处也里弊端,例如好处有:大量的使用会使用Redis越来越稳定(BUG快速解决)、解决方案越来越多也越来越稳定、相关资料也越来越多等等好处,然后问题也越来越明显,例如:Redis的安全问题日益提升,安全包括两个方面:①外部的安全,包含:攻击、入侵、挂毒(例如:Redis的挖矿病毒已经不在是个例)等,②内部的安全:离职人员的恶意删除数据或者无意误删等操作。

  来自外部的安全风险,我们可以通过两个方面来解决:首先通过防火墙来指定IP访问Redis(Redis一般都是被服务直接调用,而不是客户直接调用,那么服务基本都是固定IP,因此这是一个可行的方案),然后修改默认的Redis端口(强行推荐,由于对Redis进行Telnet操作不会有任何提示符,所以黑客如果通过nmap扫描+Telnet试探等都很难准确定位该端口具体运行的服务)。如果这两个手段基本可以防御80%以上的恶意攻击或者扫描。

  最后来自内部(也有可能是外部)的安全风险就是:直接连接Redis就登录,可以进行删除数据操作(一个flushall命令,干掉半年的辛苦)。该解决方案是给Redis配置访问密码。Redis配置访问密码有两种方式:①、修改Redis的配置文件redis.conf。②、在Redis中直接运行配置密码命令。下面将详细讲解这两种方法。

  通过Redis命令进行设置密码(注意:该方法在重启Redis后密码将失效):

  首先观察设置密码前,只要使用客户端连接Redis就可以进行所有操作。如下:

#连接Redis命令
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> set user ray
OK
127.0.0.1:6379> KEYS *
1) "user"
127.0.0.1:6379>

 

  然后,通过命令进行设置密码。如下:

#首先连接Redis,然后执行CONFIG SET requirepass userpassword
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> KEYS *
1) "user"
127.0.0.1:6379> CONFIG SET requirepass 123.com
OK
127.0.0.1:6379> KEYS *
(error) NOAUTH Authentication required.
127.0.0.1:6379> quit
#从上面可以看到密码设置成功,同时一旦密码设置成功,刚刚建立的连接将不能进行任何权限操作

#使用-a userpassword 登录Redis
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 -a 123.com
127.0.0.1:6379> KEYS *
1) "user"
127.0.0.1:6379> set job it
OK
127.0.0.1:6379> KEYS *
1) "job"
2) "user"
127.0.0.1:6379> 
#通过Redis登录后可以看到可以进行任何操作

 

 

  通过Redis配置文件redis.conf进行设置密码(注意:该方法设置密码后需要重启Redis才生效):

  首先,编辑redis.conf文件,找到下来内容:

# requirepass foobared

 

  然后,把注释(#)去掉,并把foobared修改为直接的密码字段。如下:

requirepass ray.com

 

  最后,重启Redis,登录连接。如下:

#重启Redis服务
service redis restart
Stoping redis-server ......
Starting redis-server .....

#不使用认证连接,发现什么有权限的命令都操作不了,提示权限认证问题
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> KEYS *
(error) NOAUTH Authentication required.
127.0.0.1:6379> quit

#使用-a userpassword 认证登录,然后可以正常操作所有命令
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 -a ray.com
127.0.0.1:6379> KEYS *
1) "user"
2) "job"
127.0.0.1:6379>

 

使用命令配置密码,在Redis重启以后将会失效。而使用配置文件设置密码,将需要重启Redis(在生产环境中一般不允许重启服务)。所以最好的方法是两者结合,修改Redis配置文件设置密码,同时使用命令配置相同的密码,这样既可以立即生效也不用重启Redis。