【问题标题】:Node setuid crashes on Docker AplineDocker Alpine 上的节点 setuid 崩溃
【发布时间】:2018-11-07 19:45:09
【问题描述】:

我在 Alpine 3.7 Docker 映像中运行节点 6。 以下命令:

node -e "process.setuid(1002)"

崩溃产生一个分段错误(核心转储)。 我已经尝试过使用 Node 10,但我得到了同样的错误。 1002 是有效用户。我尝试了其他几个用户,但没有成功。

我的 docker 映像在具有“Container-Optimized OS 66-10452.89.0 stable”默认操作系统(生产)的 Google Compute Engine 实例上运行。

【问题讨论】:

  • 您是否尝试过非 alpine 图像。
  • 我还没有尝试使用非线图像的 nodejs 命令...我会尝试的。我尝试过的是在用 gcc 编译的 .c 文件中执行 setuid,它甚至可以在 alpine 操作系统中工作。所以在高山内部执行nodejs setuid时似乎有问题......

标签: node.js docker google-compute-engine alpine


【解决方案1】:

(免责声明:我是 Adélie Linux 的项目负责人。)

Node.js 将其 I/O 线程堆栈大小设置为 PTHREAD_STACK_MIN,这不足以处理信号。 musl libc 使用信号来实现setuid,因为Linux 内核系统调用在多线程软件中具有不安全的行为。

Adélie Linux,我们已经patched Node 确保这不会导致崩溃。

【讨论】:

    【解决方案2】:

    setuid 在 Docker 内部很棘手。不能只用正确的用户启动 Node.js 进程吗?

    【讨论】:

    • 我需要它以 root 身份启动,因为主模块派生了一个需要 root 身份的进程,然后它降级为低级用户。我已经在生产环境中使用它好几年了...我正在尝试将它移动到 docker 映像中,但我无法降级..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 2014-08-17
    • 1970-01-01
    • 2022-06-12
    • 2010-11-05
    • 1970-01-01
    相关资源
    最近更新 更多