介绍
支持仪表板已有预配置的受限账户,却仍通过权限宽泛的默认账户连接 Redis。你将切换配置并停用旧的连接路径,同时保持监控可用。
这个独立环境包含上一课的 dashboard 账户,只需使用已学过的 Redis 命令和 ACL 概念。应用每次操作都会建立新连接,因此下一次请求会使用当前配置。
确认新环境中的应用基线
在本步骤中,你将确认新环境的正常操作。打开 Dashboard,输入为 Ticket 104: password reset,结果为空,用户名为 default。点击 Process ticket,确认出现 Processed: Ticket 104: password reset。
使用 Client 查看私有应用配置。cat 显示文件;终端起始位置 /workspace 是应用配置目录:
cat app.json
JSON 用花括号中的命名字段保存数据。username 标识 Redis 用户,password 提供身份验证秘密。字符串放在双引号中,字段用逗号分隔。当前用户名为 default,密码为空。
应用每次请求都会重新读取文件并建立新 Redis 连接,无需重启或编写客户端代码。独立的 monitor 账户读取 monitor:heartbeat;修改默认账户时要保持它可用。配置含秘密,因此该文件为私有文件,不会公开提供。
切换仪表板连接
在本步骤中,你将让应用使用受限账户。在 Client 替换这两个字段的配置。cat > app.json 将后续文本重定向到文件,覆盖旧内容。带引号的 EOF 开始一个 here-document;粘贴全部内容,包括独占一行的最终 EOF。引号阻止 JSON 内部的 shell 展开。
cat > app.json <<'EOF'
{"username":"dashboard","password":"Dash-Lab-42"}
EOF
仅修改配置。这个全新快照中,该账户已经具备 support:* 的 GET/SET 权限。重新加载 Dashboard,确认用户名为 dashboard,再点击 Process ticket。旧账户留下的结果不足以证明成功;这次新操作证明配置账户可以读写。
出现 WRONGPASS 时,修正 JSON 凭据并重试请求。出现 NOPERM 时,在 Cache Server 用 cache-admin ACL GETUSER dashboard 查看键模式和命令。第一实验的完整重置命令可修复错误账户。JSON 格式错误时重新粘贴上面的代码块即可。
不要使用 maint 走捷径,应用必须使用专属受限账户。
停用权限宽泛的默认入口
在本步骤中,你将停用自动默认路径,同时保留合法账户。切换至 Cache Server。cache-admin 使用的维护账户仍然启用,因此管理操作不会中断。
ACL SETUSER default off 阻止新的默认用户身份验证。将有效修改保存到配置的 ACL 文件:
cache-admin ACL SETUSER default off
cache-admin ACL SAVE
两个命令均返回 OK。切换至 Client,用不带凭据的新连接尝试读取:
redis-cli -h cache-server GET support:ticket
预期得到 NOAUTH Authentication required.,这是需要的拒绝。它与 NOPERM 不同,后者表示已认证账户缺乏权限。这里每次调用都会新建连接。关闭用户不保证终止已认证会话;活动会话吊销不在本练习范围内。
重新加载 Dashboard 并点击 Process ticket。命名账户应继续工作。如果误关了其他账户,可在维护终端重新应用其正确重置规则,再次保存。不要为了掩盖应用配置错误而重新打开宽泛的默认账户。
同时测试安全性和可用性
在本步骤中,你将比较允许的工作、禁止的数据和不必要的命令。使用 Client,每次 --askpass 提示时输入 Dash-Lab-42。
redis-cli -h cache-server --user dashboard --askpass GET support:result
处理后的支持结果仍可读取。下一命令故意请求无关财务数据:
redis-cli -h cache-server --user dashboard --askpass GET finance:payroll
预期得到 NOPERM。CONFIG GET 读取服务器设置,即使这种管理性读取对应用也不必要。引号中的星号请求全部设置名称,必须原样传给 Redis:
redis-cli -h cache-server --user dashboard --askpass CONFIG GET '*'
预期得到命令权限 NOPERM。现在使用已有监控身份,密码提示时输入 Monitor-Lab-42:
redis-cli -h cache-server --user monitor --askpass GET monitor:heartbeat
预期得到 healthy。关闭所有账户或停止 Redis 会破坏这个正向测试,不是修复。在 Cache Server 显示有效 ACL 和保存的文件:
cache-admin ACL LIST
cat /data/users.acl
保存的条目应与有效条目一致,包括 default off。若不同,重新执行 cache-admin ACL SAVE。最后再在 Dashboard 点击一次 Process ticket。真实可用性与有意义的拒绝共同确立结果,仅有正常页面无法证明最小权限。
总结
你将真实应用切换到了受限 Redis 账户,关闭了新的默认访问,保存了 ACL,并检查了禁止请求、合法业务与监控操作。检查使用新连接,不代表已有会话已被吊销。


