【发布时间】:2018-03-09 13:05:03
【问题描述】:
我在 Openresty 构建下运行 Nginx,因此启用了 Lua 脚本。我想创建一个 URI 位置(除了 IP 白名单外,还将使用 SSL +身份验证进行保护),它允许来自授权来源的 webhook 调用使用 root 权限在服务器上执行 bash 脚本。例如
https://someserver.com/secured/exec?script=script.sh¶m1=uno¶m2=dos
NGINX 将使用 'script' 和 'param#' GET 请求参数在 shell 中执行“script.sh uno dos”。它捕获脚本输出和 bash 返回代码(如果可能的话)。
我了解以 root 身份运行 NGINX 并运行任意命令的安全隐患,但如前所述,对 URI 的访问是安全的。
这是否可以通过本机 NGINX 模块或 Lua 脚本实现?有什么示例代码可以让我开始吗?
谢谢。
【问题讨论】:
-
使用github.com/jprjr/lua-resty-exec 或github.com/juce/lua-resty-shell。以 root 身份启动 Sockproc。
-
谢谢。我想知道是否有一种不需要运行守护进程的方法。似乎 lua os.execute 可以运行 shell 命令,但不能返回其输出或状态码。我想创建一个 bash 包装脚本,它采用脚本名称和它的 args(因为它是自己的 args)并运行它。然后将输出和退出代码转储到文本文件中,以便 Lua 可以读取它们。 Prob 应该将唯一的 ID 传递给包装脚本以用作文件名,以确保没有两个调用覆盖同一个文件。我想知道是否有人能想到更清洁的解决方案。
标签: nginx lua luajit openresty