【问题标题】:lua-nginx must be run as rootlua-nginx 必须以 root 身份运行
【发布时间】:2015-12-13 05:25:18
【问题描述】:

我有一个这种风格的简单 lua-nginx conf

  server {
  server_name payment.mybackend.fr
              payment.mybackend.fr;
  set $rails_root /home/deploy/api/MAP;
  set $env 'cloud';

  location ~ /(paypal|paybox_system) {
   content_by_lua_file $rails_root/lib/nginx-redis-payment/$1.lua;
  }
}

当我在没有 sudo 的情况下使用当前用户运行 nginx 时,从不调用 lua 脚本,因此不会验证付款。

当我使用 sudo 运行它时,它运行良好。

如何让 nginx 不使用 root 权限来执行我的 lua 脚本?

【问题讨论】:

  • 你想要一些奇怪的东西。 Nginx 几乎总是以root 运行。当您以非 root 用户身份启动它时,它将侦听端口 8080,并且无法访问其他用户的文件。
  • 我在端口 80 上使用名为“deploy”的用户启动它,这很好。此外,lua 脚本也归该用户所有,该用户拥有这些脚本的所有权限。
  • 脚本根本没有运行,还是没有完成它的工作?脚本有什么作用?您是否从 nginx 或脚本中得到任何错误?
  • 如果可能的话,我希望看到某种围绕 lua 执行的 strace 包装器。或至少一些 error_log 样式的输出。
  • 此脚本用于管理来自 paypal 或 paybox 的回调。我今天会添加一些错误日志。

标签: linux nginx lua


【解决方案1】:

如果你的 nginx 本身在没有sudo 的情况下运行,只是不执行有问题的脚本......

这可能与有问题的lua脚本有关,与nginx关系不大。

我会按如下方式进行故障排除:

  1. 确保 nginx 本身在没有 sudo 的情况下运行。您可以使用pkill nginx 和/或pkill -KILL nginx,然后使用pgrep nginx 来确保当前没有运行任何nginx 实例。然后在没有root的情况下执行nginx,确保它启动并继续运行。

  2. 尝试在与运行 nginx 的用户相同的用户下执行脚本。如果失败,请向我们提供错误和任何可能生成的日志,以及相关文件和目录的idls -la

  3. 进一步查看 nginx 以及脚本在失败时生成的任何可能的日志。

【讨论】:

    【解决方案2】:

    我无权对您的答案发表评论,因此如果此答案应属于评论部分而不是作为答案,我深表歉意。
    前阵子也经历过类似的事情,想到了一个主意:https://stackoverflow.com/questions/32593747/idea-for-reload-restart-apache-from-php-script-without-running-as-root
    想法是一样的:出于安全原因,您不想以 root 身份运行 Nginx,但您确实想以 root 身份执行一些预定义的命令。使用非 root 脚本(假设您将 php 脚本放在您的位置“/(paypal|paybox_system)”)以便它可以写入监视文件夹,守护程序(以 root 身份运行)然后获取信号并执行 root突击队(例如以 sudo 运行 lua 脚本)。

    【讨论】:

      猜你喜欢
      • 2019-02-01
      • 2017-07-08
      • 2020-01-03
      • 2020-02-19
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 2013-12-19
      相关资源
      最近更新 更多