介绍
Redis是一种内存键值存储,以其灵活性、性能和广泛的语言支持而闻名。本快速入门教程演示了如何在 Ubuntu 20.04 服务器上安装、配置和保护 Redis。
先决条件
要完成本指南,您需要访问 Ubuntu 20.04 服务器,该服务器具有具有sudo
特权的非 root 用户和配置为ufw
. 您可以按照我们的 Ubuntu 20.04 初始服务器设置指南进行设置。
第 1 步 – 安装和配置 Redis
首先更新您的本地apt
包缓存:
- sudo apt update
然后输入以下命令安装Redis:
- sudo apt install redis-server
接下来,使用您喜欢的文本编辑器打开 Redis 配置文件:
- sudo nano /etc/redis/redis.conf
在该文件中,找到supervised
允许您声明 init 系统以将 Redis 作为服务管理的指令。由于您正在运行使用systemd init 系统的Ubuntu,请将其值从 更改no
为systemd
:
. . .
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
# They do not enable continuous liveness pings back to your supervisor.
supervised systemd
. . .
完成后保存并关闭文件。如果您曾经nano
编辑过该文件,请按CTRL + X
、Y
、来进行编辑ENTER
。
然后,重新启动 Redis 服务以反映您对配置文件所做的更改:
- sudo systemctl restart redis.service
要测试 Redis 是否正常运行,请使用redis-cli
Redis 的命令行客户端连接到服务器:
- redis-cli
在随后的提示中,使用以下ping
命令测试连通性:
- ping
OutputPONG
此输出确认服务器连接处于活动状态。接下来,检查您是否能够通过运行来设置密钥:
- set test "It's working!"
OutputOK
通过键入检索值:
- get test
假设一切正常,您将能够检索您存储的值:
Output"It's working!"
确认可以获取值后,退出Redis提示返回shell:
- exit
第 2 步 – 配置 Redis 密码
您可以直接在 Redis 的配置文件中配置 Redis 密码/etc/redis/redis.conf
。使用您喜欢的编辑器再次打开该文件:
- sudo nano /etc/redis/redis.conf
滚动到该SECURITY
部分并查找注释指令,内容如下:
. . .
# requirepass foobared
. . .
通过删除 取消注释#
,然后更改foobared
为安全密码:
. . .
requirepass your_redis_password
. . .
设置密码后,保存并关闭文件,然后重启Redis:
- sudo systemctl restart redis.service
要测试密码是否有效,请打开 Redis 客户端:
- redis-cli
下面显示了用于测试 Redis 密码是否有效的一系列命令。第一个命令尝试在身份验证之前将密钥设置为一个值:
- set key1 10
这将不起作用,因为您没有进行身份验证,因此 Redis 返回一个错误:
Output(error) NOAUTH Authentication required.
下一个命令使用 Redis 配置文件中指定的密码进行身份验证:
- auth your_redis_password
Redis 承认:
OutputOK
之后,再次运行之前的命令会成功:
- set key1 10
OutputOK
get key1
查询 Redis 以获取新键的值。
- get key1
Output"10"
验证通过后,确认可以在Redis客户端运行命令后,即可退出redis-cli
:
- quit
第 3 步 – 重命名危险命令
Redis 中内置的另一个安全功能涉及重命名或完全禁用某些被认为是危险的命令。一些被认为是危险的命令包括:FLUSHDB
,FLUSHALL
,KEYS
,PEXPIRE
,DEL
,CONFIG
,SHUTDOWN
,BGREWRITEAOF
,BGSAVE
,SAVE
,SPOP
,SREM
,RENAME
,和DEBUG
。通过禁用或重命名这些和其他命令,未经授权的用户更难以重新配置、破坏或以其他方式擦除您的数据。
要重命名或禁用 Redis 命令,请再次打开配置文件:
- sudo nano /etc/redis/redis.conf
警告:以下显示如何禁用和重命名命令的步骤是示例。您应该只选择禁用或重命名对您有意义的命令。您可以自己查看完整的命令列表,并在redis.io/commands确定它们可能会如何被滥用。
要禁用命令,只需将其重命名为空字符串(由一对引号表示,它们之间没有字符),如下所示:
. . .
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
. . .
要重命名命令,请为其指定另一个名称,如下例所示。重命名的命令对于其他人来说应该很难猜到,但对你来说很容易记住:
. . .
# rename-command CONFIG ""
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG
. . .
保存更改并关闭文件。
重命名命令后,通过重新启动 Redis 来应用更改:
- sudo systemctl restart redis.service
要测试新命令,请输入 Redis 命令行:
- redis-cli
然后进行身份验证:
- auth your_redis_password
OutputOK
假设您将CONFIG
命令重命名ASC12_CONFIG
为前面的示例,请尝试使用原始CONFIG
命令。它应该失败,因为你已经重命名了它:
- config get requirepass
Output(error) ERR unknown command `config`, with args beginning with:
但是,调用重命名的命令会成功。它不区分大小写:
- asc12_config get requirepass
Output1) "requirepass"
2) "your_redis_password"
结论
在本快速入门教程中,您安装并配置了 Redis,验证了 Redis 安装是否正常运行,并使用其内置的安全功能使其不易受到恶意行为者的攻击。