【问题标题】:Lua won't execute bash scriptLua 不会执行 bash 脚本
【发布时间】: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会发生什么)。

标签: linux bash nginx lua


【解决方案1】:

问题在于www-data 用户的权限。

【讨论】:

  • 由于该解决方案是针对您的网站的(因此问答对不太可能帮助其他人解决同样的问题),您可以考虑删除该问题,除非可以扩展答案涵盖足够详细的诊断步骤以对其他人有所帮助。
猜你喜欢
  • 2019-10-28
  • 1970-01-01
  • 2018-11-22
  • 1970-01-01
  • 2018-02-24
  • 2013-04-19
  • 2015-07-04
  • 2013-06-24
  • 1970-01-01
相关资源
最近更新 更多