如何停止对 redis 数据库的匿名访问

How to stop anonymous access to redis databases

我用 运行 redis 镜像 docker-compose
我通过了 redis.conf(redis 说“配置已加载”)
redis.conf 我添加了用户

user pytest ><password> ~pytest/* on @set @get

然而我可以匿名与redis通信 即使有未注释的字符串

requirepass <password>

关于主题的 Redis 文档:Security and ACL 不回答如何限制所有人的访问。可能我根本不明白一些东西。

我的docker-compose.yaml:

version: '3'
services:
  redis:
    image: redis:latest
    ports:
      - 6379:6379
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 6000s
      timeout: 30s
      retries: 50
    restart: always
    volumes:
      - redis-db:/data
      - redis.conf:/usr/local/etc/redis/redis.conf
    command: ["redis-server", "/usr/local/etc/redis/redis.conf" ]


volumes:
  redis-db:
  redis.conf:

And yet I can communicate with redis as anonymous even with uncommented string

因为有一个 默认 用户,而您没有禁用它。如果您想完全禁用匿名访问,您应该将以下内容添加到您的 redis.conf:

user default off

其次,用户'pytest'的配置不正确。如果你想只允许用户 'pytest' 在给定的键模式上有 setget 命令,你应该按如下方式配置它:

user pytest ><password> ~pytest/* on +set +get

您还需要确保 docker-compose 正在使用您的配置文件。 假设您的 redis.confdocker-compose.yml 在同一目录中,服务声明中的 'volumes' 部分将是。

  - ./redis.conf:/usr/local/etc/redis/redis.conf

并且删除底部的命名卷声明

redis.conf:

如果您启用

,用户将能够连接到 Redis 但没有 AUTH 他们将无法执行任何操作
requirepass <password>

限制对键 pytest/* 的 GET, SET 操作的正确方法是

user pytest ><password> ~pytest/* on +set +get