如何在 Ubuntu 20.04 上安装并保护 Redis [快速入门]

介绍

Redis是一个内存关键值存储,以其灵活性,性能和广泛的语言支持而闻名,本快速启动教程展示了如何在Ubuntu 20.04服务器上安装,配置和保护Redis。

前提条件

要完成本指南,您需要访问一个具有sudo特权的非根用户和配置为ufw的防火墙的Ubuntu 20.04服务器。

步骤 1 – 安装和配置 Redis

首先,更新您的本地apt包缓存:

1sudo apt update

然后通过键入安装 Redis:

1sudo apt install redis-server

接下来,使用您喜爱的文本编辑器打开 Redis 配置文件:

1sudo nano /etc/redis/redis.conf

在檔案內,尋找「監督」指令,允許您宣佈 init 系統以管理 Redis 作為服務. 由於您正在執行使用 systemd init 系統的 Ubuntu,請將其值從「no」改為「systemd」:

 1[label /etc/redis/redis.conf]
 2. . .
 3
 4# If you run Redis from upstart or systemd, Redis can interact with your
 5# supervision tree. Options:
 6#   supervised no      - no supervision interaction
 7#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
 8#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
 9#   supervised auto    - detect upstart or systemd method based on
10#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
11# Note: these supervision methods only signal "process is ready."
12#       They do not enable continuous liveness pings back to your supervisor.
13supervised systemd
14
15. . .

如果您使用nano来编辑文件,请按CTRL + X,Y,然后按ENTER

然后,重新启动 Redis 服务,以反映您对配置文件所做的更改:

1sudo systemctl restart redis.service

要测试 Redis 是否正常运行,请使用 Redis 命令行客户端redis-cli连接到服务器:

1redis-cli

在以下提示中,使用ping命令测试连接性:

1ping
1[secondary_label Output]
2PONG

此输出确认服务器连接是活跃的,然后检查您是否可以通过运行设置密钥:

1set test "It's working!"
1[secondary_label Output]
2OK

通过键入返回值:

1get test

假设一切工作,您将能够检索您存储的值:

1[secondary_label Output]
2"It's working!"

确认您可以获取值后,请退出 Redis 提示以返回壳:

1exit

步骤 2 – 配置 Redis 密码

您可以直接在 Redis 配置文件 /etc/redis/redis.conf 中配置 Redis 密码。

1sudo nano /etc/redis/redis.conf

滚动到安全部分,并寻找评论的指令,该指令写道:

1[label /etc/redis/redis.conf]
2. . .
3# requirepass foobared
4. . .

删除# 并将foobared更改为安全密码:

1[label /etc/redis/redis.conf]
2. . .
3requirepass your_redis_password
4. . .

设置密码后,保存并关闭文件,然后重新启动 Redis:

1sudo systemctl restart redis.service

要测试密码是否有效,请打开 Redis 客户端:

1redis-cli

下面显示了用于测试 Redis 密码是否有效的命令序列,第一个命令试图在身份验证之前为值设置密钥:

1set key1 10

这不会起作用,因为您没有身份验证,所以Redis返回错误:

1[secondary_label Output]
2(error) NOAUTH Authentication required.

下一个命令使用 Redis 配置文件中指定的密码进行身份验证:

1auth your_redis_password

Redis 承认:

1[secondary_label Output]
2OK

在此之后,运行以前的命令将再次成功:

1set key1 10
1[secondary_label Output]
2OK

'get key1' 查询 Redis 对新密钥的值。

1get key1
1[secondary_label Output]
2"10"

在验证后确认您可以在 Redis 客户端中运行命令后,您可以退出redis-cli:

1quit

步骤 3 – 重命名危险命令

Redis 内置的其他安全功能包括重命名或完全禁用被认为是危险的某些命令。被认为是危险的命令中包括:FLUSHDB、FLUSHALL、KEYS、PEXPIRE、DEL、CONFIG、SHUTDOWN、BGREWRITEAOF、BGSAVE、SAVE、SPOP、SREM、RENAME 和 DEBUG。

若要更名或禁用 Redis 命令,请再次打开配置文件:

1sudo nano  /etc/redis/redis.conf

<$>[warning] 警告: 下列说明如何禁用和重命名命令的步骤是示例。您只应该选择禁用或重命名对您有意义的命令。

若要禁用命令,只需将命令重命名为空串(用一对没有字符的引文符号表示),如下所示:

1[label /etc/redis/redis.conf]
2. . .
3# It is also possible to completely kill a command by renaming it into
4# an empty string:
5#
6rename-command FLUSHDB ""
7rename-command FLUSHALL ""
8rename-command DEBUG ""
9. . .

若要更名命令,请按下面的示例给命令另一个名称。

1[label /etc/redis/redis.conf]
2. . .
3# rename-command CONFIG ""
4rename-command SHUTDOWN SHUTDOWN_MENOT
5rename-command CONFIG ASC12_CONFIG
6. . .

保存您的更改并关闭文件。

重命名命令后,通过重新启动 Redis 来应用更改:

1sudo systemctl restart redis.service

要测试新命令,请输入 Redis 命令行:

1redis-cli

然后是真实的:

1auth your_redis_password
1[secondary_label Output]
2OK

假设您将CONFIG命令重命名为ASC12_CONFIG,如上示例所示,请尝试使用原始的CONFIG命令。

1config get requirepass
1[secondary_label Output]
2(error) ERR unknown command `config`, with args beginning with:

但是,重新命名命令将成功,它不是案例敏感:

1asc12_config get requirepass
1[secondary_label Output]
21) "requirepass"
32) "your_redis_password"

结论

在本快速启动教程中,您安装并配置了 Redis,验证了您的 Redis 安装是否正常运行,并使用其内置的安全功能,使其不容易受到恶意行为者的攻击。

Published At
Categories with 技术
comments powered by Disqus