[TOC]
1. redis 常规安全模式
redis被设计成仅有可信环境下的可信用户才可以访问。这意味着将redis实例直接暴露在网络上或者让不可信用户直接访问redis的是不安全的。
==换句话说,redis不保证redis的安全,而是由使用者保证的。==
2. 网络安全
在redis的配置文件中,可以配置==bind==的ip,让redis只接受绑定的ip的客户端。
一般来说,如果redis需要禁止外部访问,只需bind本地IP即可。
bind 127.0.0.1
也可以绑定指定的网段:
bind 192.168.1.100 10.0.0.1
3. 轻量认证
在redis的配置文件中可以配置
requirepass password
来配置验证密码。
当配置了验证密码后,在开始执行其他命令之前需要执行auth <password>
来验证。
使用config get requ*
获取配置信息
发现有两个返回,分别是requirepass
和空,意思是,requirepass现在的配置为空,表示不启用
使用config set requirepass mypassword
设置密码是mypassword
然后我们退出客户端,然后重新登录
连接是没有问题的,但是却无法执行任何命令。
使用auth验证通过后,才能执行redis的命令。
但是这种方式也存在问题:
- 密码在配置文件中是明文的。
- redis的查询速度非常快,所以,使用暴力破解是可能的
redis每秒可以尝试15W的密码,所以如果密码长度比较短的话,很短时间就会被暴力破解。
假设密码是6位,那么全部的密码组合共有(26+26+10+33)^6, 每一位密码的可能性:大小写字符,数字,可打印符号。总共6位。所以6位密码总共有95^6种。
735 091 890 625 / 150000 = 4 900 612.6 秒 = 81 676.88 分 = 1361.28时 = 56.72天
看起来还不错吧,假设一个机器有4个核心,8线程。那么在一个机器上同时开8个客户端,每个客户端负责尝试指定范围的密码组合。
56.72 / 8 = 7.09 天
如果有多台机器,那么速度会更快。假设有100台机器,每台的机器配置都一样:
7.09 / 100 = 15.696 分钟
==你设置的密码,在强大的算力下,只需15分钟的时间就会被破解。==
当然,这只是理论上的,实际上还需要考虑网络,多线程切换等因素影响。
==AUTH 命令在网络中是明文传输的。==
4. 命令的禁用
如果你登录了redis,意味着,redis中全部的命令你都能使用。对于普通用户来说,使用一些高危的操作很危险,所以需要对普通用户禁用一些命令。
redis是通过==命令重命名==来实现命令禁用的
rename-command source-command dest-command
通过配置rename-command
将source-command
重命名为dest-command
后面想要使用source-command
只能输入dest-command
来使用了。
对于普通用户来说,不知道dest-command
,就无法使用source-command
了。
如果dest-command
设置为空,表示任何人都无法使用source-command
了。