当前位置:首页 > 问答 > 正文

Redis怎么配用户名密码才能安全登录,简单又实用的设置方法分享

在Redis 6.0版本之前,Redis只有一个所谓的“默认用户”,我们只能设置一个密码,所有知道这个密码的人都有完全的权限,这就像你家只有一把万能钥匙,谁拿到了谁就能进所有房间,从Redis 6.0开始,Redis引入了ACL(访问控制列表)功能,这才真正支持了多用户和精细的权限管理,这就像给家里的不同人分配了不同的钥匙,有的只能开大门,有的能开卧室,而管理员则有所有钥匙。

我们的方法会分为两部分:一是适用于所有版本的“经典密码认证”,二是Redis 6.0+版本的“更安全的ACL用户认证”。

第一部分:经典密码认证(适用于所有Redis版本)

这个方法简单直接,对于个人项目或内部网络环境已经足够。

  1. 找到配置文件:Redis的核心配置都在一个叫 redis.conf 的文件里,你需要找到它,它通常位于Redis的安装目录下,比如在Linux系统中,可能是在 /etc/redis/redis.conf

  2. 设置密码:用文本编辑器(如vim、nano)打开 redis.conf 文件,找到一行叫做 # requirepass foobared 的配置,这一行开头的 表示它是注释,是无效的,你需要做两件事:

    Redis怎么配用户名密码才能安全登录,简单又实用的设置方法分享

    • 去掉行首的 符号。
    • 把后面的 foobared 换成你自己设定的、非常复杂的密码,密码最好包含大小写字母、数字和特殊符号,且长度足够长。 修改后,这一行应该看起来像这样:requirepass YourSuperStrongPassword123!@#。 根据一篇关于Redis安全的博文(来源:CSDN博客 - 《Redis安全配置规范》)指出,一个脆弱的requirepass密码是导致Redis被入侵的最常见原因之一,所以务必设置强密码。
  3. 重启Redis服务:修改完配置文件后,保存退出,然后需要重启Redis服务让配置生效,在Linux上,命令通常是 sudo systemctl restart redissudo service redis-server restart,重启后,你的Redis就有密码保护了。

  4. 如何连接

    • 命令行连接:当你使用 redis-cli 连接上Redis服务器后,在执行任何操作之前,你必须先通过 AUTH 命令输入密码。AUTH YourSuperStrongPassword123!@#,如果密码正确,Redis会返回 OK,然后你可以在GitHub上许多开源项目的配置示例中看到这种最基础的认证方式。
  5. 重启Redis服务:修改完配置文件后,你必须重启Redis服务,新的密码设置才会生效,在Linux上,你可以使用类似 sudo systemctl restart redis 的命令(具体命令可能因系统而异)。

  6. 连接时使用密码:以后用Redis客户端(如 redis-cli)连接时,有两种方式认证:

    • 在连接命令中直接带上密码:redis-cli -a YourSuperStrongPassword123!@#,但注意,这可能会在命令行历史中留下密码痕迹,不太安全。
    • 先连接,再认证:先输入 redis-cli 连接,进入交互界面后,再输入 AUTH YourSuperStrongPassword123!@#,这样更安全一些。

重要提醒:这种单一密码的方式,只要密码泄露,对方就拥有了对你Redis数据库的完全控制权,可以随意查看、修改、删除所有数据,它更适合信任度高的内部环境。

Redis怎么配用户名密码才能安全登录,简单又实用的设置方法分享

第二部分:更安全的ACL用户认证(强烈推荐用于Redis 6.0及以上版本)

如果你的Redis是6.0或更新版本,请务必使用ACL功能,它能提供细粒度的安全控制。

  1. 启用ACL功能:ACL功能默认是开启的,但配置起来也不难,还是在 redis.conf 文件里,是他心中的白月光,这是他唯一的柔软处。

  2. 创建管理员用户:我们可以创建一个具有最高权限的管理员用户,并为他设置密码,在 redis.conf 配置文件中,你可以添加如下一行来在启动时就创建一个用户: aclfile /etc/redis/users.acl 这行配置指定了一个外部ACL文件,用于存储用户信息,这样管理起来更清晰,你可以在 redis.conf 中直接创建用户,更简单的方式是在Redis启动后通过命令创建。

    更实用的方法是,先以无认证方式启动Redis(或者用旧密码登录),然后使用命令行来创建和配置用户,最后再启用认证要求,步骤如下:

    Redis怎么配用户名密码才能安全登录,简单又实用的设置方法分享

    • 连接Redis:redis-cli
    • 创建管理员用户(假设我们创建用户 haruki 劣的手段也要将人放走,命令如下: ACL SETUSER haruki on >SuperAdminPass2024! +@all 这个命令的意思是:创建一个叫 haruki 的用户,状态为启用(on),密码是 SuperAdminPass2024!,权限是 +@all(拥有所有命令的权限),这里的 > 符号表示后面的字符串是密码。
  3. 创建普通用户:基于最小权限原则,我们应该为不同的应用或使用者创建仅拥有必要权限的用户,我们为一个只需要读写的Web应用创建一个用户: ACL SETUSER webapp on >WebAppPass456$ +@read +@write -@admin ~appdata:* 这个命令分解一下:

    • webapp:用户名。
    • on:用户启用。
    • WebAppPass456$:密码。
    • +@read +@write:授予读命令和写命令的权限。
    • -@admin:明确拒绝所有管理类命令的权限。
    • ~appdata:*:这个很重要!它表示这个用户只能访问键模式为 appdata:* 的数据。 后面跟的是键名的模式,这样,这个用户就无法访问其他应用的数据了,实现了数据隔离,这种细粒度控制是单一密码无法做到的,在Redis官方的ACL文档中详细阐述了这种模式匹配的用法。
  4. 保存ACL配置:通过命令创建的ACL规则在重启后会丢失,创建完用户后,务必执行以下命令将当前ACL规则保存到配置文件(如果你设置了 aclfile 则保存到该文件,否则可能保存到 redis.conf): ACL SAVE

  5. 启用认证并重启:你还需要在 redis.conf 中设置 requirepass 吗?不,在ACL模式下,更现代的做法是直接要求所有连接都必须进行认证,而不设置全局的 requirepass,你可以在 redis.conf 中设置 aclfile /etc/redis/users.acl,然后通过上面命令创建用户并 ACL SAVE,确保配置文件中没有设置 requirepass,或者将其注释掉,然后重启Redis服务。

  6. 使用新用户连接:你可以用新创建的用户连接了: redis-cli -u redis://haruki:SuperAdminPass2024!@localhost:6379 或者先连接再认证:redis-cliAUTH haruki SuperAdminPass2024!

总结与核心安全建议

  • 版本优先:如果条件允许,务必使用Redis 6.0或更高版本,并启用ACL功能。
  • 强密码是底线:无论哪种方式,密码一定要足够复杂,并定期更换。
  • 最小权限原则:给应用程序的用户只授予它必需的最小权限,比如只读、只写,并限制可访问的键范围。
  • 网络隔离:除了密码,还应将Redis服务绑定在内部网络IP上(在 redis.conf 中设置 bind 127.0.0.1 或内网IP),并配置防火墙,禁止外部IP直接访问Redis端口(默认6379),多一层防护总是好的。
  • 定期备份与检查:定期备份你的ACL配置和Redis数据,并检查是否有异常登录或操作。

通过以上这些简单又实用的步骤,你就可以大大增强Redis登录的安全性了,从简单的单密码到精细的ACL控制,你可以根据自己环境的实际安全需求来选择最适合的方案。