为什么 Squid 的 Basic 认证仍接受旧密码
在认定修改密码文件会立即撤销每个请求的访问前,先了解 Squid 6.13 如何缓存 Basic 凭据。
修改 Squid 的密码文件,不一定会让后续每个请求都重新调用 helper。对于 Basic 认证,Squid 可以缓存已经验证成功的用户名和密码组合。
Squid 6.13 中控制该验证结果保持有效时长的设置是credentialsttl。例如:
auth_param basic credentialsttl 5 minutes
这是策略值示例,不是适用于所有环境的建议。请根据能够接受的撤销延迟,以及认证后端可以承受的负载来选择。
分开检查三个环节
首先确认你修改的是活动 helper 使用的文件。修改未使用的文件,即使内容正确也不会生效。然后检查 helper 能否读取文件并验证新的账号信息。最后,通过正在运行的实例测试新的代理请求,因为凭据缓存和访问规则也会在那里生效。
分别测试 helper 和正在运行的代理。helper 显示后端当前接受什么,而 Squid 可能仍会复用缓存中的验证结果。轮换凭据时,同时确认新凭据有效,以及旧凭据在适用的验证窗口之后被拒绝。
排查这个行为时使用专用测试账号。保持请求、客户端来源和目标一致,不要把真实密码放入共享的命令输出。
规划撤销策略,不要只依赖修改文件
缩短验证有效期会增加后端工作量。在繁忙服务中缩短之前,先考虑 helper 容量,并使用实际后端验证行为。除非已针对你的版本和配置确认,否则不要假定重新加载配置会清除所有相关认证状态。
如果需要紧急移除访问权限,可以为账号或来源设置明确的访问拒绝,形成独立边界。不要只依赖从密码文件中删除,请从受影响的路径测试该拒绝。
这个设置描述的是 Basic 验证缓存。面向连接的认证方案还包含额外状态,不应仅凭类比就套用相同的撤销模型。