设置密码
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,其功能虽然单一,但使用起来比较简单,易于理解。