由于 SUID 沙箱问题,编译和执行 Chromium 失败

问题描述 投票:0回答:2

###我正在尝试做什么:

在 Ubuntu 13.10 上编译并运行 Chromium 源代码

###我采取的步骤:

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
add to bashrc :
    export PATH="$PATH":/home/y0.kim/project/depot_tools    
    export CHROME_DEVEL_SANDBOX=/usr/local/sbin/chrome-devel-sandbox
fetch --nohooks chromium --nosvn=True
git checkout master
build/install-build-deps.sh
git pull
gclient sync
ninja -C out/Debug chrome chrome_sandbox
build/update-linux-sandbox.sh
out/Debug/chrome               -> Fail
out/Debug/chrome --no-sandbox  -> Fail

###问题:

获取源代码并编译没有问题。 但是,当我执行 chrome 时,出现以下错误

正常执行

:~/project2/src$ out/Debug/chrome
The setuid sandbox provides API version 1, but you need 0
Please read https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment.

[37555:37588:0616/152604:FATAL:browser_main_loop.cc(207)] <unknown>: Command line `dbus-launch --autolaunch=f271cc756e9c41e457760b8c00000496 --binary-syntax --close-stderr' exited with non-zero exit status 1: Autolaunch error: X11 initialization failed.\n
#0 0x7f570456a39d base::debug::StackTrace::StackTrace()
#1 0x7f57045bc51d logging::LogMessage::~LogMessage()
#2 0x7f5707e45cef content::(anonymous namespace)::GLibLogHandler()
#3 0x7f5701c20f61 g_logv
#4 0x7f5701c21172 g_log
#5 0x7f56f5240d2a <unknown>
#6 0x7f56f5241087 <unknown>
#7 0x7f5701c19d13 g_main_context_dispatch
#8 0x7f5701c1a060 <unknown>
#9 0x7f5701c1a45a g_main_loop_run
#10 0x7f56f524098b <unknown>
#11 0x7f5701c3b9b5 <unknown>
#12 0x7f56fdfd0e9a start_thread
#13 0x7f56fc1853fd clone

Aborted (core dumped)

使用--no-sandbox执行

~/project2/src$ out/Debug/chrome --no-sandbox
[19653:19653:0616/152447:ERROR:browser_main_loop.cc(161)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
[19653:19656:0616/152447:FATAL:browser_main_loop.cc(207)] <unknown>: Command line `dbus-launch --autolaunch=f271cc756e9c41e457760b8c00000496 --binary-syntax --close-stderr' exited with non-zero exit status 1: Autolaunch error: X11 initialization failed.\n
#0 0x7f8f13bbe39d base::debug::StackTrace::StackTrace()
#1 0x7f8f13c1051d logging::LogMessage::~LogMessage()
#2 0x7f8f17499cef content::(anonymous namespace)::GLibLogHandler()
#3 0x7f8f11274f61 g_logv
#4 0x7f8f11275172 g_log
#5 0x7f8f05095d2a <unknown>
#6 0x7f8f05096087 <unknown>
#7 0x7f8f1126dd13 g_main_context_dispatch
#8 0x7f8f1126e060 <unknown>
#9 0x7f8f1126e45a g_main_loop_run
#10 0x7f8f0509598b <unknown>
#11 0x7f8f1128f9b5 <unknown>
#12 0x7f8f0d624e9a start_thread
#13 0x7f8f0b7d93fd clone

Aborted (core dumped)
:~/project2/src$ [0616/152448:ERROR:nacl_helper_linux.cc(277)] NaCl helper process running without a sandbox!
Most likely you need to configure your SUID sandbox correctly

###我尝试解决问题的步骤:

  1. 去了https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment
  2. 阅读它
  3. 再次使用 chrome_sandbox 构建 chrome
    • ninja -C out/Debug chrome chrome_sandbox
  4. 再次执行
    build/update-linux-sandbox.sh
  5. 再次检查
    ~/.bashrc
    是否有下划线
    • export CHROME_DEVEL_SANDBOX=/usr/local/sbin/chrome-devel-sandbox

###我想知道什么:

  1. 在上述情况下我应该如何执行Chrome?
  2. --no-sandbox
    选项不起作用的原因是什么?

任何意见都将受到高度赞赏。

google-chrome ubuntu sandbox suid
2个回答
4
投票

我遇到了类似的问题,当我使用此标志运行 chrome 时,它工作正常

 --disable-setuid-sandbox

4
投票

这个错误信息...

The setuid sandbox provides API version 1, but you need 0

...意味着 您的 setuid 二进制文件已过期,因此程序无法启动/生成新的 浏览上下文,即 Chrome 浏览器会话。


根据 Linux SUID 沙箱开发 中的文档,需要一个

SUID
辅助二进制文件才能在 Linux 上打开沙箱。在大多数情况下,您可以使用以下命令安装合适的沙箱:

build/update-linux-sandbox.sh

此程序将在 /usr/local/sbin 中为您安装正确的

sandbox
,并告诉您根据需要更新
.bashrc

但是,可能会有一些例外,例如,如果您的

setuid
二进制文件已过期,您将收到如下消息:

The setuid sandbox provides API version X, but you need Y
You are using a wrong version of the setuid binary!

在这些情况下,您需要按照以下步骤操作:

  • 构建
    chrome_sandbox
    每当你构建 chrome 时(
    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
    
  • 最后,您必须在

    ~/.bashrc
    (或
    .zshenv
    )中包含以下行:

    export CHROME_DEVEL_SANDBOX=/usr/local/sbin/chrome-devel-sandbox
    

参考

您可以在以下位置找到文档:


tl;博士

Linux SUID 沙箱

© www.soinside.com 2019 - 2024. All rights reserved.