NaCl 辅助进程在没有沙箱的情况下运行!运行 npm 测试时出错

use*_*453 14 google-chrome npm docker

我在运行一些 npm 测试时遇到问题。我收到的错误是:“NaCl 辅助进程在没有沙箱的情况下运行!”,这是真的,因为我正在使用“--no-sandbox”选项运行浏览器。由于浏览器以 root 身份运行,我必须运行此选项,而且我根本无法选择以其他用户身份运行它(这是一个 docker 映像)。任何人都可以帮我整理一下吗?

PS我正在通过以下方式安装浏览器:

RUN apt-get update
RUN apt-get install -y nodejs npm
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb https://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
RUN apt-get install -y apt-transport-https
RUN apt-get update
RUN apt-get install -y google-chrome-stable
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Deb*_*anB 12

这个错误信息...

NaCl helper process running without a sandbox!
Run Code Online (Sandbox Code Playgroud)

...暗示您的系统中没有 setuid 沙箱,因此程序无法启动/生成新的浏览上下文,Chrome 浏览器会话。


解决方案

一个快速的解决方案是,如果你想运行 Chrome 并且只使用命名空间沙箱,你可以设置标志:

--disable-setuid-sandbox
Run Code Online (Sandbox Code Playgroud)

此标志将禁用 setuid 沙箱(仅限 Linux)。但是,如果您在没有对命名空间沙箱提供适当内核支持的主机上执行此操作,Chrome 将无法启动。作为替代方案,您还可以使用该标志:

--no-sandbox
Run Code Online (Sandbox Code Playgroud)

此标志将为通常被沙箱化的所有进程类型禁用沙箱。

例子:

chromeOptions: {
      args: ['--disable-setuid-sandbox', '--no-sandbox']
},
Run Code Online (Sandbox Code Playgroud)

您可以在安全注意事项 - ChromeDriver - Webdriver for Chrome 中找到详细讨论


深潜

根据Linux SUID Sandbox Development 中 的文档,需要一个SUID辅助二进制文件来打开 Linux 上的沙箱。在大多数情况下,您可以使用以下命令为您安装合适的沙箱:

build/update-linux-sandbox.sh
Run Code Online (Sandbox Code Playgroud)

该程序将为您安装合适的沙箱/usr/local/sbin并告诉您.bashrc在需要时更新您的沙箱

但是,可能有一些例外,例如,如果您的setuid二进制文件已过期,您将收到如下消息:

Running without the SUID sandbox! 
Run Code Online (Sandbox Code Playgroud)

或者

The setuid sandbox provides API version X, but you need Y
You are using a wrong version of the setuid binary!
Run Code Online (Sandbox Code Playgroud)

在这些情况下,您需要:

  • 构建chrome_sandbox只要构建铬(ninja -C xxx chrome chrome_sandbox代替ninja -C xxx chrome
  • 构建完成后,执行update-linux-sandbox.sh.

    # needed if you build on NFS!
    sudo cp out/Debug/chrome_sandbox /usr/local/sbin/chrome-devel-sandbox
    sudo chown root:root /usr/local/sbin/chrome-devel-sandbox
    sudo chmod 4755 /usr/local/sbin/chrome-devel-sandbox
    
    Run Code Online (Sandbox Code Playgroud)
  • 最后,您必须在~/.bashrc(或.zshenv)中包含以下行:

    export CHROME_DEVEL_SANDBOX=/usr/local/sbin/chrome-devel-sandbox
    
    Run Code Online (Sandbox Code Playgroud)


gol*_*das 4

如果您使用 karma 来运行测试,请确保您使用的ChromeHeadlesskarma.conf.js