ACL Channel 实测:acl-pubsub-default 默认 resetchannels,新用户不能 PUBLISH / SUBSCRIBE;PSUBSCRIBE 的模式必须与授权模式字面相同;撤销频道权限会立即断开正在订阅的连接;键空间通知频道同样要授权。
ACL LOG 实测:command / key / auth 三种拒绝原因(本次触发到的);相同失败合并成一条(200 次 → count=200);500 次错误 AUTH 用了 0.06 s 且只占 1 条日志;MULTI 与 Lua 里被拒有各自的 context;acllog-max-len 挤掉旧记录。
Redis 认证流程实测:未登录只能 AUTH / HELLO / QUIT;WRONGPASS 不区分用户与密码错误;requirepass 就是 default 用户的密码,CONFIG GET requirepass 返回明文;AUTH 参数在 MONITOR / SLOWLOG 里被打码;本机上错误密码尝试可达 26089 次/秒(一问一答)、流水线 332590 次/秒。
Redis TLS 实测(openssl 生成本地测试证书):明文口与 TLS 口共存、证书校验与 --insecure、tls-auth-clients 的 yes / optional、协商 TLSv1.3、建连代价 0.14→0.86 ms、往返 24→26 µs、证书 CN 映射 ACL 用户。
Protected Mode 实测:用本机的回环地址和局域网地址(10.83.245.179)做对照,出厂默认、bind *、requirepass、protected-mode no、显式 bind 局域网地址、ACL 设密码,各种组合下谁能连、谁被 DENIED。
站在局域网上的一个陌生客户端的位置,对自己的 Redis 做自查:裸奔时能读全部数据、INFO 泄露版本与路径;enable-protected-configs 默认拒绝远程改 dir,设成 yes 就被改动;default -@dangerous 拦命令不拦数据;requirepass 一层全拦。全部在本机实例上,只改到自己的临时目录。
Redis 8.10.2 的 Lua 沙箱实测:os 里只有 clock,io / package / require 都不存在,全局与标准库只读;脚本里 CONFIG / ACL / SUBSCRIBE / EVAL 等命令被拒但 KEYS / FLUSHDB 可以;ACL 对脚本里每次 redis.call 逐条检查;只禁 EVAL 四条会漏掉 FUNCTION / FCALL;写过数据的死循环脚本 SCRIPT KILL 不掉。
rename-command 实测:禁用或改名后是 unknown command;统计与 COMMAND INFO 仍用原名;运行时不能改;与 ACL 相比被拒的尝试不留痕迹(ACL LOG 0 条 vs 1 条);主从改名不一致时,复制与 AOF 悄悄分叉——主库 DBSIZE 0,从库 20,链路仍显示 up。
Redis 创建的 RDB / AOF / manifest / ACL 文件 / nodes.conf / 日志 / 临时 RDB 的权限完全跟随 umask:022 下是 0644、077 下是 0600;数据目录要自己收紧;unixsocketperm 决定套接字权限;redis.conf 里的密码是明文。另:aclfile + requirepass 时 requirepass 不生效。
备份文件泄露的实测:RDB 和 AOF 里 key 名、value 都是明文,压缩不是保护(压缩后标记仍能找到);ACL 密码与脚本正文不在其中;redis-cli --rdb 用一个 ~app:* 的复制账号就拉走了全量数据;用 openssl AES-256-CBC 加密后找不到明文,但 CBC 不带认证。
在一个带打点的真实 Django 项目里,按时间顺序记录 manage.py check 与一次请求中各模块被导入、被调用的次序:settings → apps.py → models → ready() → urls / views / 中间件;并量了 django.setup() 的耗时(103→129 ms)。
实测 Django settings:import settings 时不加载、首次读取才导入;缺环境变量与写错模块名是两种不同的错误;只有全大写名字算设置(默认项 150 个);override_settings 对导入时读取过的值无效;configure() 只能调用一次。