Redis 变得简单:在 AlmaLinux 9 上安装 Redis 的分步指南
Redis 是一种流行的开源内存键值数据存储。它支持不同的数据结构,例如哈希、列表、集合、字符串等等。 Redis 被设计为仅在可信环境中运行,它可以用作数据库、缓存和消息代理。 Redis 以其广泛的支持、高性能、高可用性和灵活性而广为人知。
您可以将 Redis 作为独立安装进行小型部署。对于大型部署,它们提供了额外的组件,例如用于实现高可用性的 Redis Sentinel 和用于跨多个 Redis 节点服务器分区数据的 Redis Cluster。
本教程将向您展示如何在AlmaLinux 9服务器上安装和配置Redis。此外,我们还将向您展示如何通过 Redis ACL(访问控制列表)和 Firewalld 来保护 Redis。
先决条件
要完成本教程,您必须具备以下条件:
- AlmaLinux 服务器 9 - 本示例使用主机名“alma-linux”和 IP 地址“192.168.5.21”的 AlmaLinux 服务器。
- 具有 sudo/root 管理员权限的非 root 用户。
- 防火墙已配置、启动并正在运行。
现在,让我们深入了解一下。
安装Redis
Redis 是一种高性能、开源数据存储,可用作数据库、缓存、消息代理和流引擎。 Redis 可在大多数 Linux 发行版上使用,包括 AlmaLinux。它可以通过默认的分发存储库安装。
在安装Redis之前,请运行以下命令重建软件包缓存并获取最新版本的软件包信息。
sudo dnf makecache
现在,运行下面的 dnf 命令来安装 Redis。出现提示时输入 y,然后按 ENTER 继续。
sudo dnf install redis
安装Redis后,运行以下systemctl命令启动并启用Redis服务。
sudo systemctl start redis
sudo systemctl enable redis
最后,使用以下命令验证 Redis 服务状态。
sudo systemctl is-enabled redis
sudo systemctl status redis
以下输出确认 Redis 正在运行并已启用,这意味着它将在系统启动时自动运行。
使用 Firewalld 保护 Redis
在本部分中,您将设置 firewalld 以保护 Redis 安装。实现这一目标的最佳方法是在firewalld上创建区域并允许特定网络/子网使用该服务。
运行以下命令创建一个名为“svcs”的新防火墙区域,然后将内部网络接口添加到其中。在此示例中,Redis 将在接口“enp0s8”下的内部 IP 地址上运行,您必须将接口添加到区域“svcs”。
sudo firewall-cmd --new-zone=svcs --permanent
sudo firewall-cmd --zone=svcs --add-interface=enp0s8 --permanent
现在,运行以下命令以允许网络“192.168.5.1/24”访问区域“svcs”上的端口。
sudo firewall-cmd --zone=svcs --add-source=192.168.5.1/24
之后,将 Redis 端口“6379/tcp”添加到区域“svcs”,然后将更改应用到firewalld。
sudo firewall-cmd --zone=svcs --add-port=6379/tcp
sudo firewall-cmd --runtime-to-permanent
现在,使用以下命令重新加载firewalld,以确保新的更改应用于firewalld。
sudo firewall-cmd --reload
最后,运行以下命令来检查firewalld上的活动区域列表。您应该会看到区域“svcs”处于活动状态。
sudo firewall-cmd --get-active-zones
您现在可以验证“svcs”区域中可用的规则列表。成功后,您应该在端口部分看到 Redis 端口“6379/tcp”,并在源上看到子网“192.168.5.1/24”。
sudo firewall-cmd --list-all --zone=svcs
配置Redis
在本部分中,您将通过修改默认 Redis 配置“/etc/redis/redis.conf”来配置 Redis 安装。
使用下面的 nano 编辑器命令打开 Redis 配置文件“/etc/redis/redis.conf”。
sudo nano /etc/redis/redis.conf
使用服务器的内部 IP 地址更改“bind”参数的值。在他的示例中,Redis 将在本地 IP 地址“192.168.5.21”上运行。
bind 192.168.5.21
现在,通过将参数值更改为“no”来禁用“保护模式”。要允许从您的应用程序远程连接到 Redis 服务器,您必须禁用“保护模式”。
protected-mode no
在AlmaLinux上,默认的服务管理器是“systemd”。取消注释“supervised”参数并将默认值更改为“systemd”以启用 Redis 与systemd的集成。
supervised systemd
最后,取消注释“aclfile”参数以通过文件启用 Redis 的 ACL(访问控制列表)。从 Redis v6 开始,建议使用 ACL 来保护 Redis,并且 Redis 支持使用 ACL 的不同方法,您可以通过 Redis shell 或定义的 ACL 文件创建 ACL。此示例将通过文件使用 ACL。
aclfile /etc/redis/users.acl
完成后保存并关闭文件。
现在,运行以下命令来创建 ACL 文件'/etc/redis/users.acl'。
touch /etc/redis/users.acl
之后,运行以下命令重新启动 Redis 服务并应用您所做的更改。
sudo systemctl restart redis
这样,redis 将启动并使用新配置运行。您要做的下一步是通过 Redis CLI 验证您的 Redis 配置。
使用下面的“redis-cli”命令连接到 Redis 服务器。在此示例中,您将指定 Redis 服务器的 IP 地址。
redis-cli -h 192.168.5.21
登录后,运行以下命令以确保连接成功。连接成功后,您应该会看到输出“test redis”。
PING "test redis"
接下来,运行以下查询以获取当前的 Redis 配置。在此示例中,您将检查“绑定”、“受监督”和“保护模式”设置。
CONFIG GET bind
CONFIG GET supervised
CONFIG GET protected-mode
成功后,您应该获得与之前所做的设置相匹配的配置。
最后,运行以下 ACL 查询以获取 Redis 上可用 ACL 的列表。
ACL LIST
您应该会看到这样的输出 - 默认的 Redis 安装带有 ACL 用户“default”,身份验证为“nopass”或无需密码即可登录,并且权限“+@all”,允许“默认”用户执行任何 Redis 查询。
至此,您已经完成了Redis的基本配置。在下一步中,您将深入了解 Redis ACL(访问控制列表)的配置以确保 Redis 安装的安全。
使用 ACL(访问控制列表)保护 Redis
从 Redis 6.x 开始,保护 Redis 的最佳方法是实施 ACL(访问控制列表)。这允许您在 Redis 服务器上设置用户和权限,并且这可以废弃旧 Redis 版本上的“requirepass”和“rename-command”参数。
您可以使用两种不同的方法在 Redis 上设置 ACL:
- 通过 ACL 命令设置 ACL\
- 通过外部 ACL 文件设置 ACL
使用您配置的 Redis 服务器,您将通过外部 ACL 文件设置 Redis ACL。
首先,使用以下 nano 编辑器命令打开 ACL 文件'/etc/redis/users.acl'。
sudo nano /etc/redis/users.acl
插入以下配置来为 Redis 创建两个用户。
user alice on -DEBUG +@all ~* >AliceP4ssw0rd
user bob on +@all -@dangerous ~* >BobP4ssw0rd
完成后保存文件并退出编辑器。
使用此配置,您将创建两个用户:
- 用户 alice,密码为“AliceP4ssw0rd”,并允许执行除 DEBUG“-DEBUG”之外的所有查询“+@all” >',并且还允许对所有可用的可用键值“~*”运行查询。
- 用户 bob 的密码为“BobP4ssw0rd”,并允许用户 bob 执行除“-@dangerous”之外的所有查询“+@all” '。命令类别“-@dangerous”包括 FLUSHALL、MIGRATE、RESTORE、SORT、KEYS、CLIENT、DEBUG、INFO、CONFIG、SAVE、REPLICAOF 等等。此外,该用户还可以查询 Redis 服务器上的所有可用键值。
获取 Redis 上命令类别的完整列表。
现在,运行以下 systemctl 命令来重新启动 Redis 服务并应用更改。
sudo systemctl restart redis
Redis 重新启动后,使用以下 redis-cli 命令连接到 Redis 服务器。
redis-cli -h 192.168.5.21
登录后,运行以下 ACL 查询来检查 Redis 上的可用用户列表。
ACL LIST
此时,您应该会看到三个用户 alice、bob 和 default。
您还可以使用以下查询验证 Redis 上的详细用户。
ACL GETUSER alice
ACL GETUSER bob
您应该看到用户 alice 被允许使用命令组“+@all”执行 Redis 上的所有可用命令。
对于用户 bob,您可以看到允许的命令“+@all”,但也可以看到命令组“dangerous”被禁用。
禁用默认 Redis 用户
创建新用户 alice 和 bob 后,您必须使用以下查询禁用“默认”用户。
ACL SETUSER default OFF
然后,使用以下命令再次检查 Redis 上的可用用户列表。
ACL LIST
您应该期望用户“default”的状态为关闭或禁用,如下所示:
按 Ctrl+d 退出 Redis shell。
之后,使用以下命令再次登录 Redis。
redis-cli -h 192.168.5.21
然后,输入以下 PING 查询来验证当前连接。
PING
禁用 Redis“默认”用户后,您应该会收到如下错误 - 您必须是经过身份验证的用户才能运行查询。
验证用户 alice
接下来,您将验证您创建的新 Redis 用户 alice 和 bob。
运行以下命令以用户“alice”身份进行身份验证。如果成功,您应该得到输出“OK”。
AUTH alice AliceP4ssw0rd
现在运行以下查询以确保您通过用户 alice 向 Redis 进行了身份验证。
PING
ACL WHOAMI
您应该会看到消息 PONG 并以用户 alice 身份进行身份验证。
现在,运行以下查询以确保用户 alice 可以执行所有可用的查询,包括相关的 Redis 管理。
CONFIG GET bind
CONFIG GET supervised
成功后,您应该获得参数绑定和监督的当前 Redis 配置的输出。
验证用户 bob
运行以下查询以用户 bob 身份登录并进行身份验证。
AUTH bob BobP4ssw0rd
身份验证后,运行下面的 PING 查询。如果成功,您应该会收到消息PONG。
PING
接下来,在 Redis ACL 文件中,用户 bob 命令类别“-@dangerous”,这会阻止该用户在 Redis 服务器上执行一些危险命令,例如 FLUSHALL、CONFIG 等。
如果您以用户 bob 身份运行以下查询,您应该得到诸如“NOPERM”之类的输出,这意味着用户 bob 无权执行该命令。
FLUSHALL
CONFIG GET bind
SAVE
至此,您现在已成功通过 ACL 文件使用 ACL(访问控制列表)保护 Redis。
结论
恭喜!您现在已经在AlmaLinux 9上成功安装了Redis。您还学习了如何通过ACL文件设置ACL(访问控制列表)以确保Redis安装的安全。除此之外,您还通过为 Redis 服务创建特定区域,使用firewalld 保护 Redis。