Redis配置密码实现安全的完整实践
Redis作为高性能键值数据库,默认无密码认证(requirepass为空),存在未授权访问的高风险。通过密码配置+安全增强的组合策略,可有效防范密码泄露、非法访问及数据篡改等安全威胁。
requirepass参数redis.conf(通常位于/etc/redis/或Redis安装目录),找到# requirepass foobared注释行,取消注释并替换为强密码(如requirepass StrongPass123!*)。强密码需包含大小写字母、数字、特殊字符,长度≥8位。redis-cli命令行动态修改密码(无需重启),命令:CONFIG SET requirepass StrongPass123!*。若需永久生效,需执行CONFIG REWRITE将配置写入redis.conf。AUTH命令验证密码(如redis-cli -a StrongPass123!*或连接后执行AUTH StrongPass123!*)。ACL提供用户级细粒度权限管理,比requirepass更安全。
redis.conf中添加aclfile /path/to/aclfile.acl(指定ACL文件路径),重启Redis生效。ACL SETUSER命令创建用户并设置密码及权限。例如,创建用户app_user,密码为散列值(更安全),仅允许对user:前缀的键执行get、set操作:ACL SETUSER app_user on >hashed_password ~user:* +get +set(hashed_password可通过ACL CAT命令生成散列)。redis-cli -u rediss://app_user:StrongPass123!*@localhost:6379)。CONFIG SET设置弱密码,开发专用密码修改脚本,强制要求密码包含大小写字母、数字、特殊字符,长度≥12位,并定期(如90天)强制更换密码。rename-command禁用CONFIG、FLUSHALL等高危命令(如rename-command CONFIG ""),防止攻击者通过命令行获取或修改密码。requirepass或ACL密码以散列值(如SHA256)存储在redis.conf中,避免明文泄露。例如,使用PBKDF2算法对密码进行散列,配置文件中存储散列值而非明文。cryptography库的Fernet对称加密)。连接时先解密再认证,即使应用数据库泄露,密码也无法直接获取。redis.conf中的bind参数,仅允许信任的IP地址访问(如bind 127.0.0.1 192.168.1.100),避免Redis监听0.0.0.0(所有接口)。protected-mode设置为no,但必须配合bind和防火墙使用,否则仍存在风险。iptables或firewalld限制Redis端口(默认6379)的访问,仅允许可信IP通过。例如,firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="6379" accept',然后firewall-cmd --reload。redis.conf中的tls-port 6379(启用TLS端口)、port 0(关闭普通端口)、tls-cert-file /path/to/redis.crt(证书路径)、tls-key-file /path/to/redis.key(私钥路径),客户端连接时需指定ssl=true(如Java的JedisShardInfo设置setSsl(true)),确保数据传输过程中不被窃听或篡改。redis.conf中的logfile /var/log/redis/redis.log(日志路径)和loglevel notice(日志级别),记录所有访问行为(如认证失败、命令执行),便于及时发现异常。通过以上步骤,可实现Redis密码配置的多层安全防护,从密码本身到访问路径、运维管理均形成闭环,有效降低数据泄露和未授权访问的风险。