在Ubuntu 18.04上安装和保护Redis的方法

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 在Ubuntu 18.04上安装和保护Redis的方法

简介

Redis 是一种内存中的键值存储,以其灵活性、性能和广泛的语言支持而闻名。本教程演示了如何在 Ubuntu 18.04 服务器上安装、配置和保护 Redis。

先决条件

要完成本指南,您需要访问一个具有非根用户和 sudo 权限以及基本防火墙配置的 Ubuntu 18.04 服务器。您可以按照我们的《初始服务器设置指南》进行设置。

当您准备好开始时,请以 sudo 用户身份登录到您的 Ubuntu 18.04 服务器,并继续以下操作。

步骤 1 — 安装和配置 Redis

为了获取 Redis 的最新版本,我们将使用 apt 从官方 Ubuntu 软件仓库安装它。

首先,如果您最近还没有这样做,更新本地的 apt 软件包缓存:

sudo apt update

然后,通过输入以下命令安装 Redis:

sudo apt install redis-server

这将下载并安装 Redis 及其依赖项。随后,需要在安装过程中自动生成的 Redis 配置文件中进行一个重要的配置更改。

使用您喜欢的文本编辑器打开此文件:

sudo nano /etc/redis/redis.conf

在文件中,找到 supervised 指令。此指令允许您声明一个 init 系统来管理 Redis 作为服务,从而更好地控制其操作。supervised 指令默认设置为 no。由于您正在运行使用 systemd init 系统的 Ubuntu,将其更改为 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
. . .

这是您需要在 Redis 配置文件中进行的唯一更改,因此在完成后保存并关闭它。然后,重新启动 Redis 服务以反映您对配置文件所做的更改:

sudo systemctl restart redis.service

通过这样,您已经安装和配置了 Redis,并且它正在您的机器上运行。但在开始使用它之前,最好先检查 Redis 是否正常运行。

步骤 2 — 测试 Redis

与任何新安装的软件一样,最好在对其配置进行任何进一步更改之前,确保 Redis 是否按预期运行。在本步骤中,我们将介绍几种检查 Redis 是否正常工作的方法。

首先,检查 Redis 服务是否正在运行:

sudo systemctl status redis

如果它没有出现任何错误地运行,此命令将产生类似以下的输出:

● redis-server.service - Advanced key-value store
   Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2018-06-27 18:48:52 UTC; 12s ago
     Docs: http://redis.io/documentation,
           man:redis-server(1)
  Process: 2421 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 2424 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
 Main PID: 2445 (redis-server)
    Tasks: 4 (limit: 4704)
   CGroup: /system.slice/redis-server.service
           └─2445 /usr/bin/redis-server 127.0.0.1:6379
. . .

在这里,您可以看到 Redis 正在运行,并且已经启用,这意味着它被设置为在每次服务器启动时启动。

为了测试 Redis 是否正常工作,使用命令行客户端连接到服务器:

redis-cli

在随后的提示符中,使用 ping 命令测试连接:

ping

这个输出确认了服务器连接仍然是活动的。接下来,通过运行以下命令来检查您是否能够设置键:

set test "It's working!"

通过输入以下命令来检索值:

get test

假设一切正常,您将能够检索到您存储的值:

"It's working!"

确认您可以获取值后,退出 Redis 提示符以返回到 shell:

exit

作为最后的测试,我们将检查 Redis 是否能够在停止或重新启动后仍能持久保存数据。为此,首先重新启动 Redis 实例:

sudo systemctl restart redis

然后再次使用命令行客户端连接,并确认您的测试值仍然可用:

redis-cli
get test

您的键的值应该仍然是可访问的:

"It's working!"

完成后再次退出到 shell:

exit

通过这样,您的 Redis 安装已经完全可用,并且可以供您使用。但是,它的一些默认配置设置是不安全的,并为恶意行为者提供了攻击和访问服务器及其数据的机会。本教程中剩余的步骤涵盖了官方 Redis 网站规定的减轻这些漏洞的方法。虽然这些步骤是可选的,如果您选择不遵循它们,Redis 仍将正常运行,但强烈建议您完成这些步骤以加固系统的安全性。

步骤 3 — 绑定到本地主机

默认情况下,Redis 只能从 本地主机 访问。但是,如果你按照其他教程安装和配置了 Redis,你可能已经更新了配置文件以允许从任何地方进行连接。这不如绑定到 本地主机 安全。

为了更正这一点,打开 Redis 配置文件进行编辑:

sudo nano /etc/redis/redis.conf

找到以下行并确保它没有被注释掉(如果有 #,则删除):

bind 127.0.0.1 ::1

完成后保存并关闭文件(按 CTRL + X,然后输入 Y,最后按 ENTER)。

然后,重新启动服务以确保 systemd 读取了你的更改:

sudo systemctl restart redis

为了检查这一更改是否生效,运行以下 netstat 命令:

sudo netstat -lnp | grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      14222/redis-server  
tcp6       0      0 ::1:6379                :::*                    LISTEN      14222/redis-server

这个输出显示 redis-server 程序绑定到了 本地主机127.0.0.1),反映了 Redis 配置文件中的 bind 设置。如果你在该列中看到另一个 IP 地址(例如 0.0.0.0),那么你应该再次检查是否取消了正确的行,并重新启动 Redis 服务。

现在,你的 Redis 安装只监听 本地主机,这将使恶意用户更难发起请求或访问你的服务器。然而,Redis 目前并未设置要求用户在对其配置或数据进行更改之前进行身份验证。为了解决这个问题,Redis 允许你在通过 Redis 客户端(redis-cli)进行更改之前要求用户进行身份验证。

步骤 4 — 配置 Redis 密码

配置 Redis 密码启用了其两个内置安全功能之一 — auth 命令,它要求客户端进行身份验证以访问数据库。密码直接在 Redis 的配置文件 /etc/redis/redis.conf 中配置,因此再次用你喜欢的编辑器打开该文件:

sudo nano /etc/redis/redis.conf

滚动到 SECURITY 部分,查找一个被注释的指令,内容如下:

# requirepass foobared

通过删除 # 来取消注释,并将 foobared 更改为一个安全的密码。

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

sudo systemctl restart redis.service

为了测试密码是否有效,访问 Redis 命令行:

redis-cli

以下是一系列用于测试 Redis 密码是否有效的命令序列。第一个命令尝试在进行身份验证之前将一个键设置为一个值:

set key1 10

这不会生效,因为你没有进行身份验证,所以 Redis 返回一个错误:

(error) NOAUTH Authentication required.

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

auth your_redis_password

Redis 确认:

OK

之后,再次运行前面的命令将成功:

set key1 10
OK

get key1 查询 Redis 中新键的值。

get key1
"10"

确认你能够在进行身份验证后在 Redis 客户端中运行命令后,你可以退出 redis-cli

quit

接下来,我们将看一下重命名 Redis 命令,如果误输入或被恶意用户输入,可能会对你的机器造成严重破坏。

步骤 5 — 重命名危险命令

Redis 内置的另一个安全功能涉及重命名或完全禁用某些被认为危险的命令。

当未经授权的用户运行这些命令时,这些命令可以用于重新配置、销毁或以其他方式清除你的数据。与身份验证密码一样,重命名或禁用命令是在 /etc/redis/redis.conf 文件的相同 SECURITY 部分中配置的。

一些被认为危险的命令包括:FLUSHDBFLUSHALLKEYSPEXPIREDELCONFIGSHUTDOWNBGREWRITEAOFBGSAVESAVESPOPSREMRENAMEDEBUG。这不是一个全面的列表,但重命名或禁用该列表中的所有命令是增强你的 Redis 服务器安全性的一个良好起点。

是否应禁用或重命名命令取决于你的具体需求或你的站点的需求。如果你知道你永远不会使用可能被滥用的命令,那么你可以禁用它。否则,将其重命名可能符合你的最佳利益。

为了启用或禁用 Redis 命令,再次打开配置文件:

sudo nano  /etc/redis/redis.conf

要禁用一个命令,将其重命名为空字符串(由一对空引号表示,中间没有字符),如下所示:

. . .
```markdown
# 也可以通过将命令重命名为空字符串来完全禁用命令:
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
. . .

通过添加这些 rename-command 指令并将其后跟空字符串,FLUSHDBFLUSHALLDEBUG 将在此 Redis 安装中被禁用。

要重命名一个命令,给它另一个名称,如以下示例。重命名的命令应该对其他人来说难以猜测,但对你来说易于记忆:

. . .
# rename-command CONFIG ""
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG
. . .

这些示例将 SHUTDOWNCONFIG 命令分别重命名为 SHUTDOWN_MENOTASC12_CONFIG

保存更改并关闭文件。

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

sudo systemctl restart redis.service

要测试这些命令是否成功更新,请打开 Redis 客户端:

redis-cli

然后进行身份验证:

auth your_redis_password
OK

假设你将 CONFIG 命令重命名为 ASC12_CONFIG,如前面的示例。首先,尝试使用原始的 CONFIG 命令。它应该失败,因为你已经将其重命名:

config get requirepass
(error) ERR unknown command 'config'

然而,调用重命名后的命令将会成功。它不区分大小写:

asc12_config get requirepass

Redis 的 config 命令允许运行它的用户与安装的配置文件进行交互。当与 get 结合并跟随配置文件中的指令时,该命令将返回该指令及其当前设置:

1) "requirepass"
2) "your_redis_password"

最后,你可以退出 redis-cli

exit

请注意,如果你已经在使用 Redis 命令行,然后重新启动 Redis,你需要重新进行身份验证。否则,如果输入命令,你将会得到以下错误:

NOAUTH Authentication required.

结论

在本教程中,你安装并配置了 Redis,验证了你的 Redis 安装是否正常运行,并使用其内置的安全功能使其对来自恶意行为者的攻击更不易受到影响。

请记住,一旦有人登录到你的服务器,很容易规避我们设置的 Redis 特定安全功能。因此,你的 Redis 服务器上最重要的安全功能是你的防火墙(如果你遵循了先决条件的初始服务器设置教程进行了配置),因为这使得恶意行为者极其难以跨越这道障碍。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
7天前
|
Ubuntu 开发工具 git
Ubuntu安装homebrew的完整教程
本文介绍了如何在没有公网的情况下安装 Homebrew。首先访问 Homebrew 官网,然后通过阿里云的镜像克隆安装脚本,并创建普通用户进行安装。接着修改 `install.sh` 文件指向国内镜像,执行安装命令。最后配置环境变量并更换 Homebrew 源为国内镜像,确保安装顺利。
96 50
|
29天前
|
Ubuntu Linux 测试技术
Linux系统之Ubuntu安装cockpit管理工具
【10月更文挑战第13天】Linux系统之Ubuntu安装cockpit管理工具
109 4
Linux系统之Ubuntu安装cockpit管理工具
|
19天前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
52 10
|
17天前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
19天前
|
缓存 监控 NoSQL
Redis 缓存穿透的检测方法与分析
【10月更文挑战第23天】通过以上对 Redis 缓存穿透检测方法的深入探讨,我们对如何及时发现和处理这一问题有了更全面的认识。在实际应用中,我们需要综合运用多种检测手段,并结合业务场景和实际情况进行分析,以确保能够准确、及时地检测到缓存穿透现象,并采取有效的措施加以解决。同时,要不断优化和改进检测方法,提高检测的准确性和效率,为系统的稳定运行提供有力保障。
47 5
|
3天前
|
Ubuntu Java
Ubuntu之jdk安装
以下是Ubuntu之jdk安装的详细内容
12 0
|
28天前
|
NoSQL Ubuntu Linux
Redis 安装
10月更文挑战第14天
50 1
|
7天前
|
NoSQL 编译器 Linux
【赵渝强老师】Redis的安装与访问
本文基于Redis 6.2版本,详细介绍了在CentOS 7 64位虚拟机环境中部署Redis的步骤。内容包括安装GCC编译器、创建安装目录、解压安装包、编译安装、配置文件修改、启动服务及验证等操作。视频讲解和相关图片帮助理解每一步骤。
|
30天前
|
Kubernetes Ubuntu Docker
从0开始搞K8S:使用Ubuntu进行安装(环境安装)
通过上述步骤,你已经在Ubuntu上成功搭建了一个基本的Kubernetes单节点集群。这只是开始,Kubernetes的世界广阔且深邃,接下来你可以尝试部署应用、了解Kubernetes的高级概念如Services、Deployments、Ingress等,以及探索如何利用Helm等工具进行应用管理,逐步提升你的Kubernetes技能树。记住,实践是最好的老师,不断实验与学习,你将逐渐掌握这一强大的容器编排技术。
113 1
|
1月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
227 3