首页 > 数据库 >大规模Redis生产脚本安全:ACL限制Lua执行权限

大规模Redis生产脚本安全:ACL限制Lua执行权限

来源:互联网 2026-07-12 08:47:35

ACLSETUSER禁用eval/evalsha,小写连字符,删-@admin,添~*&*。lua-time-limit0超时中断。新连接认证需返回无权,执行配置重写或ACL保存持久,否则重启后丢失。

正确禁用EVAL和EVALSHA的方式,需要在ACL SETUSER中显式写出小写、无空格、带连字符的 -eval-evalsha,同时别忘了移除 -@admin,还要补上 ~*&*。有人会问,用 lua-time-limit 0 行不行?答案是不靠谱——它只是触发了超时中断,本质上不是权限控制。配置完之后,一定要用新连接 AUTH 实测一下,确认返回 NOPERM 错误,并且记得执行 CONFIG REWRITEACL SAVE 做持久化,否则重启后规则就丢了。

大规模Redis生产脚本安全:ACL限制Lua执行权限

长期稳定更新的攒劲资源: >>>点此立即查看<<<

ACL SETUSER 命令里怎么正确禁用 EVAL 和 EVALSHA

直接在 ACL SETUSER 中移除这两个命令,不是加 +eval,而是用减号前缀。常见的坑是漏掉连字符、写成大写 -EVALSHA(大小写敏感),或者误加空格变成 - eval——Redis 会静默忽略无效权限项,导致实际没生效。

正确写法其实很简单:小写、无空格、连字符必须连着。

ACL SETUSER limiteduser on nopass ~* &* -@admin -eval -evalsha
  • -@admin 必须显式移除,否则该命令组隐含包含了 evalevalsha
  • ~*&* 是必要补充,缺了的话用户连 key 读写和 pub/sub 都会被锁死。
  • 别指望用 +@read +@write 来替代,这两个命令组本来就不包含 eval 相关命令,而且未来版本扩展后可能有隐患;显式禁用是最可控的做法。

为什么 lua-time-limit 0 不是禁用 Lua 的可靠方式

lua-time-limit 0 在配置里看起来像“关闭”,实际上只是把超时阈值设为 0 毫秒。效果是:脚本一启动就触发超时中断,返回 (error) BUSYSCRIPT。这不是权限控制,是运行时暴力终止,而且没法区分合法短脚本和恶意长脚本——所有 Lua 调用都会失败,包括你自己的限流、原子计数这些核心业务脚本。

真正需要的是权限隔离,而不是功能阉割:

  • 用 ACL 方式时,default 用户仍然可以执行 Lua,运维和监控工具不受影响。
  • 受限用户调用 EVAL 时直接返回 (error) NOPERM,错误语义清晰,客户端可以明确做降级处理。
  • lua-time-limit 只影响执行时长,对 SCRIPT LOADSCRIPT EXISTS 等元操作毫无约束力。

ACL 配置后如何验证 EVAL 确实被拦截

别只盯着 ACL GETUSER 的输出看,要真实切换用户并触发命令。关键点是认证方式和错误响应必须匹配:

AUTH limiteduser ""
EVAL "return 'test'" 0

预期响应必须是:

(error) NOPERM this user has no permissions to run the 'eval' command
  • 如果返回 (error) ERR unknown command `EVAL`,说明用户根本没启用(on 缺失)或 ACL 规则未加载。
  • 如果返回 (error) NOSCRIPT,说明脚本未预热,但命令本身可执行——ACL 未生效。
  • 务必用新连接测试,旧连接还保留着认证前的权限上下文,测出来不准。

生产环境里最容易被忽略的 ACL 持久化问题

在线执行 ACL SETUSER 只存在内存里。Redis 重启后规则全丢,用户自动回退到 default 的全权限状态——这是最危险的静默失效。

必须做两件事之一:

  • 执行 CONFIG REWRITE,让 Redis 把当前 ACL 写入 redis.conf 或其 aclfile 指定路径。
  • 手动编辑 aclfile(比如 /etc/redis/users.acl),写入类似 user limiteduser on nopass ~* &* -@admin -eval -evalsha,再用 ACL LOAD 加载。

检查是否生效的方法:用 ACL LIST 看输出,再确认 CONFIG GET aclfile 返回的路径存在且可读——很多团队配了 aclfile 却忘了放文件,或者权限设成了 root-only,导致加载时静默跳过。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备2026025700号-3 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。