Redis 安全设置

RedisBeginner
立即练习

介绍

在本实验中,你将学习如何增强 Redis 服务器的安全性。我们将介绍设置密码以防止未经授权的访问,以及禁用特定命令以限制潜在的滥用。完成本实验后,你将拥有一个更安全的 Redis 实例。

使用 CONFIG SET requirepass 设置密码

默认情况下,Redis 不需要密码,这使其容易受到攻击。设置密码是保护你的 Redis 服务器的第一步,也是最重要的一步。我们将使用 CONFIG SET requirepass 命令来完成此操作。

CONFIG SET 命令允许你动态更改 Redis 的配置设置。requirepass 设置指定了客户端连接服务器必须提供的密码。

让我们开始吧:

  1. 使用 redis-cli 连接到 Redis 服务器:

    在 LabEx VM 中打开一个终端。默认目录是 ~/project。执行以下命令:

    redis-cli
    

    这将把你的连接指向运行在默认主机 (127.0.0.1) 和端口 (6379) 上的 Redis 服务器。你应该会看到 127.0.0.1:6379> 提示符。

    127.0.0.1:6379>
    
  2. 使用 CONFIG SET requirepass 命令设置密码:

    我们将密码设置为 mysecretpassword。对于生产环境,请选择一个强大且唯一的密码。

    CONFIG SET requirepass mysecretpassword
    

    你应该会看到以下输出:

    OK
    

    这确认密码已设置。

    现在,通过输入 exit 并按 Enter 键退出 redis-cli。这可以确保你的命令被记录。

    exit
    
  3. 尝试在未进行身份验证的情况下执行命令:

    打开一个新的终端并使用 redis-cli 连接到 Redis 服务器:

    redis-cli
    

    尝试执行一个简单的命令,如 PING

    PING
    

    你应该会收到一个错误消息:

    (error) NOAUTH Authentication required.
    

    这表明现在需要进行身份验证。

  4. 退出 redis-cli

    为了确保命令被记录,通过输入 exit 或按 Ctrl+D 退出 redis-cli

    exit
    

    这对于验证步骤正确工作很重要。

使用 AUTH 命令进行身份验证

既然我们已经设置了密码,现在让我们学习如何使用 AUTH 命令与 Redis 服务器进行身份验证。此命令需要你在上一步中设置的密码。

  1. 使用 redis-cli 连接到 Redis 服务器:

    在 LabEx VM 中打开一个终端。默认目录是 ~/project。执行以下命令:

    redis-cli
    

    你应该会看到 127.0.0.1:6379> 提示符。

  2. 使用 AUTH 命令进行身份验证:

    使用 AUTH 命令,后跟你之前设置的密码:

    AUTH mysecretpassword
    

    如果身份验证成功,你将看到:

    OK
    
  3. 身份验证后执行命令:

    现在你已通过身份验证,再次尝试 PING 命令:

    PING
    

    你应该会收到预期的响应:

    PONG
    
  4. 退出 redis-cli

    通过输入 exit 或按 Ctrl+D 退出 redis-cli

    exit
    

限制危险命令

Redis 提供了许多命令,但有些命令在特定环境中可能存在风险。虽然我们无法使用 CONFIG SET 动态禁用命令(因为 rename-command 需要重启服务器),但我们可以通过展示像 FLUSHALL 这样的危险命令如何工作以及为什么它们应该在生产环境中受到限制来演示命令安全的概念。

  1. 使用 redis-cli 连接到 Redis 服务器:

    在 LabEx VM 中打开一个终端。默认目录是 ~/project。执行以下命令:

    redis-cli
    

    你应该会看到 127.0.0.1:6379> 提示符。

  2. 使用 AUTH 命令进行身份验证:

    使用 AUTH 命令并跟上你的密码进行身份验证:

    AUTH mysecretpassword
    

    成功身份验证后,你应该会看到 OK 输出。

  3. 创建一些测试数据以演示 FLUSHALL 的危险性:

    SET testkey "important data"
    SET anotherkey "more important data"
    

    两个命令都应该返回 OK

  4. 验证数据是否存在:

    KEYS *
    

    你应该会看到列出的两个键:

    1) "testkey"
    2) "anotherkey"
    
  5. 演示危险的 FLUSHALL 命令:

    警告: 此命令将删除所有数据库中的所有数据!

    FLUSHALL
    

    你应该会看到:

    OK
    

    此命令成功删除了所有数据库中的所有数据。

  6. 验证所有数据是否已被删除:

    KEYS *
    

    你应该会看到:

    (empty array)
    

    这说明了为什么 FLUSHALL 被认为是危险的,并且应该通过在 redis.conf 文件中添加 rename-command FLUSHALL "" 来禁用它。

  7. 退出 redis-cli

    通过输入 exit 或按 Ctrl+D 退出 redis-cli

    exit
    

总结

在本实验中,你学习了如何增强 Redis 的安全性。你使用 CONFIG SET requirepass 设置了密码,以防止未经授权的访问。你还学习了如何使用 AUTH 命令进行身份验证,并演示了像 FLUSHALL 这样会删除所有数据的命令的危险性。在生产环境中,应通过在 redis.conf 文件中添加 rename-command FLUSHALL "" 并重启 Redis 服务器来禁用这些危险命令。这些步骤对于保护你的 Redis 服务器至关重要。