简介
Redis是开源的内存数据库,并以其良好的灵活性、性能、可扩展性与兼容性著称。
Redis本身被设计成客户端授信的环境下进行访问,服务本身并没有强大的安全功能。但是也具有一些关于安全的基本功能,包括访问密码、命令的重命名与屏蔽等能力。本教程提供了如何配置这些安全功能的说明,并且包含CentOS7上能够为Redis提供的安全特性。
请注意,本文档不涉及分布式与跨地域的Redis集群。
环境准备
安装Redis
以yum方式安装CentOS7支持的Redis默认版本(如需其他版本则需要从redis.io进行下载):
$ sudo yum install redis -y
整个操作过程使用默认用户即dc2-user进行操作
完成安装后,启动Redis服务:
$ sudo systemctl enable redis
如需在系统启动时启动Redis服务,可执行如下命令:
$ sudo systemctl enable redis
执行如下命令,查看Redis服务状态:
$ sudo systemctl status redis.service
输出内容如下:
● 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.
一旦确认服务已启动,可使用如下命令进行测试:
$ redis-cli ping
屏幕中会输出 PONG ,表示服务已运行,接下来我们就可以配置安全选项了。
绑定Redis访问地址
打开Redis配置文件并进行编辑:
$ sudo vi /etc/redis.conf
找到以bind开头的行,并在下面加入如下内容:
bind 127.0.0.1
强烈建议此处只添加私有地址,添加共有地址会增加额外的风险。如果你需要绑定其他地址,可在IP后加空格和其他IP地址。
配置Redis密码
再次打开Redis配置文件:
$ sudo vi /etc/redis.conf
光标移动到SECURITY章节,找到如下注释内容:
# requirepass foobared
通过移除‘#’,并将foobared修改成更为安全的密码,比如使用sha256sum对简单密码进行加密:
$ echo "didicloud" | sha256sum
将输出结果修改到配置文件中并重启服务:
$ sudo systemctl restart redis.service
现在来测试下是否需要密码进行登录:
$ redis-cli
127.0.0.1:6379> set key1 10
显然,这时候需要密码才能够正常操作了,那么首先需要进行认证:
127.0.0.1:6379> auth your_redis_password
Redis会返回 OK,此时表示已经认证成功,可继续上面的数据操作:
127.0.0.1:6379> set key1 10
OK
127.0.0.1:6379> get key1
"10"
退出Redis命令行,可执行如下命令:
127.0.0.1:6379> quit
对危险命令进行重命名
Redis的另一个内置的安全机制,允许将危险命令进行重命名或者完全禁用,已防止未授权用户使用命令擦除或销毁数据。
危险命令包含如下:
- FLUSHDB
- FLUSHALL
- KEYS
- PEXPIRE
- DEL
- CONFIG
- SHUTDOWN
- BGREWRITEAOF
- BGSAVE
- SAVE
- SPOP
- SREM
- RENAME
- DEBUG
以上并不是一个完善的清单,但是从如上命令进行重命名或禁用是一个很好的开始。
重新打开Redis的配置文件
sudo vi /etc/redis.conf
通过配置一个重命名空值来禁用命令
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
通过配置一个新的名称来给命令重命名:
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG
配置好之后重启服务:
$ sudo service redis-server restart
本文作者:杜文迪