Redis服务器怎么设置用户名密码,配置步骤和注意事项分享
- 问答
- 2025-12-29 21:20:43
- 5
首先需要说明的是,在Redis 6.0版本之前,Redis只有一个叫做“默认”的用户,并且只能通过requirepass配置指令设置一个密码,这更像是一个共享的密码,而不是真正的用户认证,Redis 6.0引入了ACL(访问控制列表)系统,这才支持了真正的多用户和精细化的权限管理,下面的内容会涵盖这两种情况,但会重点介绍更现代、更安全的ACL方式,主要参考Redis官方文档关于安全和ACL的章节。
Redis 6.0之前版本:设置一个共享密码
这种方法比较简单,但功能性较弱。
配置步骤:
-
找到配置文件: 首先找到你的Redis配置文件,通常在Linux系统上是
/etc/redis/redis.conf,如果你是通过编译安装的,可能在Redis源码目录下。 -
修改配置文件: 使用文本编辑器(如vim或nano)打开这个文件。
sudo vim /etc/redis/redis.conf
-
设置密码: 在配置文件中,找到名为
requirepass的配置项,这一行默认是被注释掉的(以开头),你需要取消注释(删除),并在后面设置一个强密码。# 修改前: # requirepass foobared # 修改后: requirepass your_strong_password_123将
your_strong_password_123替换为你自己想设置的复杂密码。 -
重启Redis服务: 保存并关闭配置文件后,你需要重启Redis服务才能使配置生效。
# 对于使用systemd的系统(如CentOS 7+, Ubuntu 16.04+) sudo systemctl restart redis # 对于使用init.d的系统 sudo service redis-server restart
-
验证密码是否生效: 重启后,尝试不输入密码连接Redis,会发现无法执行命令。
redis-cli 127.0.0.1:6379> set key1 hello (error) NOAUTH Authentication required.
这时,你需要使用
AUTH命令进行认证。
0.0.1:6379> AUTH your_strong_password_123 OK 127.0.0.1:6379> set key1 hello OK
你也可以在连接时直接带上密码:
redis-cli -a your_strong_password_123
注意事项:
- 密码强度: 一定要设置一个足够复杂和长的密码,避免使用简单的字典词汇。
- 配置文件权限: 确保
redis.conf文件的权限设置得当,只有授权用户(如redis用户和root用户)才能读取,因为密码是以明文形式存储在文件中的,可以通过chmod 640 /etc/redis/redis.conf和chown redis:redis /etc/redis/redis.conf来设置。 - 命令历史: 使用
redis-cli -a参数的方式会在系统进程历史中留下密码痕迹,不太安全,更推荐先连接,再使用AUTH命令。 - 所有连接都需要密码: 一旦启用
requirepass,所有客户端连接(包括主从复制中的从节点)都必须提供正确的密码才能操作。 - 功能局限: 这种方式下,所有知道密码的用户都拥有相同的最高权限(相当于root),无法实现权限分离。
Redis 6.0及之后版本:使用ACL系统设置多用户和精细权限
这是更推荐的方式,提供了更好的安全控制。
配置步骤:
-
启用ACL配置: 同样需要编辑
redis.conf文件,ACL用户信息可以写在配置文件中,也可以在一个外部ACL文件中定义(通过aclfile /path/to/users.acl指定),这里以直接写在redis.conf中为例。
-
创建或修改用户: 在配置文件中,使用
user指令来定义用户,最直接的方法是先设置一个强大的默认用户密码,同时创建一个新的管理员用户。- 禁用默认用户: 默认用户(名为
default)在Redis 6.0中默认是没有密码的,这是安全隐患,我们可以为它设置一个强密码,或者直接禁用它。# 为default用户设置一个非常复杂的密码,或者干脆禁用 user default off # 禁用默认用户 # 或者 user default on >a_very_strong_password_for_default_user ~* &* +@all - 创建管理员用户: 创建一个新的用户,并赋予所有权限。
>mypassword表示设置密码,表示可以访问所有键,+@all表示拥有所有命令的权限。user admin on >my_strong_admin_password_456 ~* &* +@all - 创建普通用户: 创建一个只能读(不能写)以
cache:开头的键的用户。user reader on >a_reader_password ~cache:* &* +@read+@read表示只拥有读命令的权限。
- 禁用默认用户: 默认用户(名为
-
重启Redis服务: 保存配置后,重启Redis服务。
sudo systemctl restart redis
-
使用新用户连接: 现在你需要使用新创建的用户名和密码来连接。
redis-cli -u "redis://admin:my_strong_admin_password_456@localhost:6379" # 或者在连接后认证 redis-cli 127.0.0.1:6379> AUTH admin my_strong_admin_password_456 OK
ACL系统的注意事项:
- 最小权限原则: 这是ACL的核心优势,根据每个应用或用户的实际需要分配最少的权限,一个只做统计的应用,只给它读权限和访问特定键的权限即可。
- 密码管理: ACL支持为用户设置多个密码。
>password表示添加密码,<password表示删除密码,#<hash>表示直接使用密码的SHA256哈希值(更安全,避免在配置文件中明文存储)。 - 权限粒度: ACL权限非常精细,可以控制到具体命令(如
+get、-set)、命令类别(如+@read、-@admin)、键模式(如~objects:*)、甚至Pub/Sub通道。 - 外部ACL文件: 对于用户较多的情况,建议使用外部ACL文件(通过
aclfile配置),这样可以在不重启Redis的情况下,使用ACL LOAD命令动态加载用户变更。 - 备份ACL规则: 可以使用
ACL LIST命令查看当前所有ACL规则,并备份这些规则到你的配置文件中。 - 小心
+@all权限: 除非是绝对可信的管理员,否则不要轻易赋予用户所有命令的权限,特别是FLUSHDB、FLUSHALL、CONFIG等危险命令。
通用注意事项(适用于所有版本):
- 网络绑定: 除了设置密码,还应该在
redis.conf中将bind指令设置为具体的内部IP地址,而不是0.0.0(允许任何IP连接),以减少攻击面,例如bind 127.0.0.1 192.168.1.100。 - 防火墙: 使用防火墙(如iptables或firewalld)限制只有特定的应用服务器才能访问Redis的端口(默认6379)。
- 定期更换密码: 像对待其他重要服务的密码一样,定期更换Redis的密码。
- 加密传输: 如果Redis客户端和服务器在不安全的网络中进行通信,应考虑使用SSL/TLS加密传输(Redis 6.0支持),以防止密码在传输过程中被窃听。
如果你使用的是Redis 6.0以上版本,强烈建议花时间学习和配置ACL系统,它能极大地提升你的Redis实例的安全性,如果使用的是旧版本,在设置好密码的同时,务必通过绑定IP和防火墙等手段进行加固,并尽快考虑升级到支持ACL的新版本。
本文由太叔访天于2025-12-29发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/70875.html
