近年来,随着容器化部署的普及,Redis作为高性能内存数据库被广泛应用于缓存、会话管理、消息队列等场景。然而,许多团队在通过Docker Compose部署Redis时,往往沿用默认的default用户或root用户,且未配置密码,这为系统安全埋下了重大隐患。近日,多位安全专家发出警告:攻击者利用Redis默认用户弱口令漏洞实施数据窃取、勒索攻击的事件呈上升趋势。如何从根本上堵住这一安全缺口?专业操作指南来了。

默认用户:便捷背后是巨大风险

默认情况下,Redis会内置一个名为default的用户,该用户拥有所有权限,且初始状态下往往不设密码。即便在Docker环境中,许多开发者为求快速启动,也常常忽略密码配置。安全研究员李明(化名)指出:“一旦Redis实例暴露在公网,或者内网存在横向移动的可能,攻击者只需使用默认用户名尝试空密码,就能轻易获取数据库的完全控制权。”

事实上,近年来已有多起针对Redis弱口令的勒索事件:攻击者利用CONFIG SET命令写入恶意数据,甚至植入后门脚本。传统做法是在Redis配置文件中设置requirepass,但这种方式仅适用于单用户场景,且需在容器启动时手动注入。而现代Redis 6.0及以上版本引入了ACL(访问控制列表)机制,支持多用户和细粒度权限管理,这为彻底禁用默认用户、创建自定义强密码用户提供了更科学的解决方案。

Docker Compose下的安全配置策略

针对这一问题,资深DevOps工程师刘涛分享了基于Docker Compose的安全配置三步法。该方案适用于Redis 6.0及以上版本。

第一步:禁用默认用户并创建自定义用户

首先,需要准备一个Redis配置文件(例如redis.conf),其中禁用默认用户并创建新的管理员用户。关键配置如下:

# 禁用默认用户
acl deluser default

# 创建自定义用户,并赋予所有权限
acl setuser admin on >YourStrongPasswordHere ~* +@all

其中,admin是自定义用户名,YourStrongPasswordHere需替换为包含大小写字母、数字和特殊字符的强密码。~*表示允许访问所有键,+@all表示授予所有命令权限。如需生产环境最小权限原则,可酌情缩减。

第二步:使用docker-compose挂载配置文件

docker-compose.yml中,通过volumes将本地配置文件映射到容器内的/usr/local/etc/redis/redis.conf。示例片段如下:

version: '3.8'
services:
  redis:
    image: redis:7-alpine
    container_name: my-redis
    ports:
      - "6379:6379"
    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    restart: unless-stopped

注意:如果希望直接通过环境变量设置密码,可使用REDIS_PASSWORD环境变量,但该方式只能设置default用户密码,无法禁用默认用户。专家建议优先采用配置文件方式。

第三步:验证与测试

启动服务后,可通过Redis CLI验证自定义用户是否生效:

redis-cli -a YourStrongPasswordHere
AUTH admin YourStrongPasswordHere

如返回OK,则说明配置成功。此时再尝试使用default用户进行认证,系统将返回“NOAUTH Authentication required”或拒绝连接。

专家建议:安全的“组合拳”

除了禁用默认用户外,刘涛还提醒开发者注意以下几点: - 网络隔离:在docker-compose.yml中避免将Redis端口直接映射到宿主机0.0.0.0,或使用bind 127.0.0.1仅限本地访问。 - 版本更新:确保使用Redis最新稳定版,旧版本ACL支持不完善。 - 日志审计:开启Redis慢查询日志和ACL日志,方便回溯异常行为。

结语

默认用户就像一把没有锁的门,看似便捷,实则隐患无穷。随着容器编排技术的普及,安全配置必须从开发阶段就纳入考量。通过Docker Compose结合Redis ACL机制禁用默认用户、设置强密码,是阻断攻击路径的第一道屏障。安全无小事,期望每一位开发者都能守住这条底线。