本文是滴滴云开源框架教程系列文章的一篇。
简介
Redis是开源的内存数据库,并以其良好的灵活性、性能、可扩展性与兼容性著称。
Redis本身被设计成客户端授信的环境下进行访问,服务本身并没有强大的安全功能。但是也具有一些关于安全的基本功能,包括访问密码、命令的重命名与屏蔽等能力。本教程提供了如何配置这些安全功能的说明,并且包含CentOS7上能够为Redis提供的安全特性。
请注意,本文档不涉及分布式与跨地域的Redis集群。
环境准备
本教程使用滴滴云DC2环境进行部署,不同环境部署可能略有不同。
安装Redis
以yum方式安装CentOS7支持的Redis默认版本(如需其他版本则需要从redis.io进行下载):
|
1 2 |
$ sudo yum install redis -y |
整个操作过程使用默认用户即dc2-user进行操作
完成安装后,启动Redis服务:
|
1 2 |
$ sudo systemctl enable redis |
如需在系统启动时启动Redis服务,可执行如下命令:
|
1 2 |
$ sudo systemctl enable redis |
执行如下命令,查看Redis服务状态:
|
1 2 |
$ sudo systemctl status redis.service |
输出内容如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
● redis.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled) Drop-In: /etc/systemd/system/redis.service.d └─limit.conf Active: active (running) since Thu 2018-11-08 17:20:58 CST; 15s ago Main PID: 21637 (redis-server) CGroup: /system.slice/redis.service └─21637 /usr/bin/redis-server 127.0.0.1:6379 Nov 08 17:20:58 10-255-20-202 systemd[1]: Starting Redis persistent key-value database... Nov 08 17:20:58 10-255-20-202 systemd[1]: Started Redis persistent key-value database. |
一旦确认服务已启动,可使用如下命令进行测试:
|
1 2 |
$ redis-cli ping |
屏幕中会输出 PONG ,表示服务已运行,接下来我们就可以配置安全选项了。
绑定Redis访问地址
打开Redis配置文件并进行编辑:
|
1 2 |
$ sudo vi /etc/redis.conf |
找到以bind开头的行,并在下面加入如下内容:
|
1 2 |
bind 127.0.0.1 |
强烈建议此处只添加私有地址,添加共有地址会增加额外的风险。如果你需要绑定其他地址,可在IP后加空格和其他IP地址。
配置Redis密码
再次打开Redis配置文件:
|
1 2 |
$ sudo vi /etc/redis.conf |
光标移动到SECURITY章节,找到如下注释内容:
|
1 2 |
# requirepass foobared |
通过移除‘#’,并将foobared修改成更为安全的密码,比如使用sha256sum对简单密码进行加密:
|
1 2 |
$ echo "didicloud" | sha256sum |
将输出结果修改到配置文件中并重启服务:
|
1 2 |
$ sudo systemctl restart redis.service |
现在来测试下是否需要密码进行登录:
|
1 2 3 |
$ redis-cli 127.0.0.1:6379> set key1 10 |
显然,这时候需要密码才能够正常操作了,那么首先需要进行认证:
|
1 2 |
127.0.0.1:6379> auth your_redis_password |
Redis会返回 OK,此时表示已经认证成功,可继续上面的数据操作:
|
1 2 3 4 5 6 |
127.0.0.1:6379> set key1 10 OK 127.0.0.1:6379> get key1 "10" |
退出Redis命令行,可执行如下命令:
|
1 2 |
127.0.0.1:6379> quit |
对危险命令进行重命名
Redis的另一个内置的安全机制,允许将危险命令进行重命名或者完全禁用,已防止未授权用户使用命令擦除或销毁数据。
危险命令包含如下:
- FLUSHDB
- FLUSHALL
- KEYS
- PEXPIRE
- DEL
- CONFIG
- SHUTDOWN
- BGREWRITEAOF
- BGSAVE
- SAVE
- SPOP
- SREM
- RENAME
- DEBUG
以上并不是一个完善的清单,但是从如上命令进行重命名或禁用是一个很好的开始。
重新打开Redis的配置文件
|
1 2 |
sudo vi /etc/redis.conf |
通过配置一个重命名空值来禁用命令
|
1 2 3 4 |
rename-command FLUSHDB "" rename-command FLUSHALL "" rename-command DEBUG "" |
通过配置一个新的名称来给命令重命名:
|
1 2 3 |
rename-command SHUTDOWN SHUTDOWN_MENOT rename-command CONFIG ASC12_CONFIG |
配置好之后重启服务:
|
1 2 |
$ sudo service redis-server restart |
滴滴云技术团队在Redis部署实战方面积累了丰富的经验,敬请关注本系列文章的后续分享。
本文作者:杜文迪