【发布时间】:2016-07-29 17:43:49
【问题描述】:
我正在使用带有 ngnix 的 Lua 脚本来生成 ISO 文件。
Lua 脚本正在解析请求,它应该将其传递给genisoimage 命令。
我试过了:
local pack_cmd = "genisoimage -V" .. some_other_name
os.execute(pack_cmd)
命令未成功执行,返回码我得到3328。我有
尝试使用绝对路径(/usr/bin/genisoimage 和 /bin/genisoimage)但是
它不工作。
我尝试了简单的解决方法 - 在 bash 脚本中执行 genisoimage 命令
并在 Lua 脚本中像这样运行它:
local pack_cmd = "bash /absoulte/path/script.sh " .. some_other_name
os.execute(pack_cmd)
仍然无法正常工作并获得相同的退出代码。还试图找出问题所在,但看起来命令 genisoimage 从未执行过。
local pack_cmd = "bash /absoulte/path/script.sh " .. some_other_name .." >> error.log"
os.execute(pack_cmd)
带句柄的版本不能正常工作
local handle = io.popen(pack_cmd)
local result = handle:read("*a")
handle:close()
如果我手动执行pack_cmd 字符串,一切正常。执行 bash 脚本也有效。
【问题讨论】:
-
strace告诉你发生了什么? -
...顺便说一句,通过字符串连接生成代码是非常糟糕的做法(可能导致注入漏洞)。请考虑改用显式 argv 数组。
-
@CharlesDuffy 感谢您的快速响应!我发现我没有权限以
www-data用户身份执行此操作。也感谢您的建议。 -
(顺便说一下,我所说的“注入漏洞”是什么意思更具体一点——想想如果
some_other_name包含evil-$(rm -rf ~).iso会发生什么)。