提示信息
本文章针对的是 FiveM 服主和开发者,普通玩家可以无视。
什么是 Lua 沙盒?
Lua 沙盒是 FiveM 自版本 [链接登录后可见] 以来新增的一项功能。该功能的目的是为了防止一些后门 / 病毒插件恶意破坏服务器,具体的实现方法就是通过屏蔽、改写一些系统关键支持库,从而防止有害资源恶意读写系统文件或执行命令。
对服务器有什么影响?
这个功能的本意是好的,它可以保护服务器不受一些恶意插件的影响,可以防止你的服务器意外感染病毒。但是该功能的引入也会导致许多正常的插件无法使用,属于是好的坏的一块杀了。总结下沙盒功能的影响范围有:
- 禁止脚本读写除了 Json 以外的文件
- 禁止脚本调用
os.execute
以执行外部二进制程序
- 禁止脚本读写其他资源目录的文件
- 禁止脚本读取系统环境变量
举个例子,我的服务器有个插件会将屏幕截图保存到 Nginx 的网站目录下,以供管理员后台查看,这个功能是通过调用系统的 io.open 来实现的,而现在沙盒机制的引入会直接导致插件无法读写除了插件自身以外的其他目录,这会导致我的插件这个功能直接就废掉了。
如何解决这个问题?
最简单的方法就是降级 FiveM 服务端到 12078 之前的版本(我自己测试 11535 是正常的),但如果长期不更新 FiveM 服务端版本,会导致玩家无法从服务器列表里加入,如果你不在意这个问题,那么你可以选择降级。

但这会导致新玩家进不来,对吧?所以我还是想了个办法来解决,那就是 —— 给沙盒打补丁。
Lua 沙盒补丁
简单说,我通过使用 Javascript 重新实现了 Lua 的 IO/OS 库,以实现绕过 FiveM 官方的沙盒限制。
下载后将压缩包解压,接着将 sandbox-patches 文件夹复制到你的服务器 resources 文件夹内。
然后,你需要给所有使用了 IO/OS 库的插件的 fxmanifest.lua 文件增加以下内容:
server_script '@sandbox-patches/patches.lua'
或者是这样
server_scripts {
'@sandbox-patches/patches.lua', -- 一定要放在最前面
'server.lua' -- 其他服务端脚本
}
切记,sandbox-patches 资源一定要在其他资源前面最先启动,否则插件无法正常加载。
一切就绪之后,你就可以重启服务器,并正常使用这些插件了。