Lua 允许在 CS2D 游戏中删除文件

Linux 权限无法阻止 Lua 超出自己的目录并进入另一个目录。

此外,如果在之前声明以下值:

os.execute = nil
io.popen = nil

实际上可以解决这个问题,但会禁用许多功能,例如我的客户端无法使用其保存的其他脚本。

点赞
用户6817009
用户6817009

你可以创建一个新的 Linux 用户,仅具有所需目录的权限,并以该用户身份运行。

否则真的没有解决方法。你可以进行尽可能多的沙盒隔离,但如果需要这些功能,那么你就没有办法了。

2016-09-10 15:17:55
用户1381216
用户1381216

你可以在将 os.execute 设置为 nil 之前,始终创建包装函数来控制执行的动作。例如:

local osExecute = os.execute
os.execute = nil

os.createDir = function(dir)
    osExecute("mkdir "..dir)
end

os.saveScript(script)
    osExecute("command to save script goes here")
end

当然,这个示例容易受到攻击,你需要验证参数,以确保它真的是文件夹名称,而不是例如 folder;rm -rf /

同样适用于 popen,你可以创建要执行的一组命令。

你当然可以创建一个具有受限权限的用户,以提供额外的安全性。

2016-09-10 16:10:10