设置密码

redis提供了很多安全策略,比如为了保证数据安全,提供了设置密码的功能。redis密码设置主要有两种方式:

  • 使用CINFIG命令来设置密码
  • 手动修改 Redis 的配置文件

命名配置密码

查看是否设置了密码

127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""

在默认情况下 requirepass 参数值为空的,表示无需通过密码验证就可以连接到 Redis 服务。

下面执行以下命令设置密码。如下所示:

127.0.0.1:6379> CONFIG set requirepass "www.biancheng.net"
OK
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) "www.biancheng.net"

执行完上述操作后,客户端要连接到 Redis 服务就需要密码验证,如果不验证就无法操作 Redis 数据库。如下所示:

127.0.0.1:6379> set key name www
(error) NOAUTH Authentication required.

使用AUTH命令验证密码:

127.0.0.1:6379> AUTH www.biancheng.net
OK
#执行命令成功
127.0.0.1:6379> SET name www.biancheng.net
OK
127.0.0.1:6379> GET name
www.biancheng.net

注意:通过命令行设置的密码并非永久有效,当重启服务后密码就会失效,所以一般不采用这种方式。下面介绍一种永久有效的修改方式,也就是手动配置密码。

手动配置密码

windows版本

首先,在 Redis 的安装目录中找到 redis.windows.conf 配置文件,然后打开该文件,并使用 Ctrl+F 搜索 requirepass 关键字,找到配置项并配置密码,如下所示:

# requirepass foobared
requirepass www.biancheng.net //配置自己的密码

重复服务

#首先停止服务:
C:\Users\Administrator>redis-server.exe --service-stop
#重启服务器
C:\Users\Administrator>redis-server.exe --service-start
#重新登陆
C:\Users\Administrator>redis-cli.exe -h 127.0.0.1 -p 6379 -a www.biancheng.net
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
#命令执行成功
127.0.0.1:6379>config get requirepass
1)"requirepass"
2)"www.biancheng.net"
  • 手动配置无须验证密码,只需要重新启动 Redis 服务器。这种配置方式,密码永远有效。
  • 如果想取消密码设置:将配置文件更改回原来的状态,然后再次重启服务器,即可取消。

其他策略

除了需要为redis配置密码外,我们在使用redis时也需要注意一些常见的安全风险以及防范措施,从而避免数据泄露和丢失,以及人为操作失误等

指令安全

Redis 有一些非常危险的命令,这些命令会对 Redis 的稳定以及数据安全造成非常严重的影响。比如 keys 指令会导致 Redis 卡顿,而 flushdb 和 flushall 会让 Redis 的所有数据全部清空。那么如何避免这些操作失误带来的灾难性后果呢?

Redis 在配置文件中提供了 rename-command 指令用于将某些危险的指令修改成特别的名称,用来避免人为误操作。比如在配置文件的 security 模块增加以下内容:

rename-command keys 123keys123

如果您还想执行 keys 命令,那就需要在命令行输入123keys123。 当然也可以将指令 rename 成空字符串,这样就无法通过字符串来执行 keys 命令了。

rename-command flushall ""

端口安全

redis默认监听*:6379,如果当前的服务器主机有外网地址,那么redis的服务将会直接暴露在公网上,别有用心的人使用适当的探测工具就可以对IP地址进行端口扫描,从而威胁系统安全。

如果redis的服务地址一旦可以被外网直接访问,其内部数据就彻底丧失了安全性。黑客们可以通过redis执行Lua脚本拿到服务器权限,然后清空您的redis数据库。因此务必在redis的配置文件中绑定要监听的IP地址,避免类似的情况发生。如下所示:

bind 193.168.1.1 #绑定外网ip地址

不仅如此,还可以增加redis的密码访问限制,客户端实现使用auth命令传入正确的密码才可以访问redis

requirepass yourspassword

这样即使地址暴露出去了,普通黑客也无法对 Redis 服务器进行任何指令操作。

密码配置也会影响主从复制。要求从机必须配置与主服务器相同的密码才可以进行主从复制

masterauth yourspassword

SSH代理

redis不支持SSL链接,这意味着客户端和服务器交互的数据不应该在公网上传输,否则会有被窃听的风险。如果必须在公网上传输,可以考虑使用SSL代理。
SSL 代理比较常见的有 ssh。Redis 官方也推荐了一种代理工具,也就是spiped,其功能虽然单一,但使用起来比较简单,易于理解。