构建电子 linux 发行版:找到了 SUID 沙箱助手二进制文件,但未正确配置

Posted

技术标签:

【中文标题】构建电子 linux 发行版:找到了 SUID 沙箱助手二进制文件,但未正确配置【英文标题】:Building electron linux distro : The SUID sandbox helper binary was found, but is not configured correctly 【发布时间】:2020-12-26 01:44:50 【问题描述】:

我正在为 linux 生成电子发行版。 这就是应用程序的构建方式 这就是在 packge.json 中构建应用程序的方式

 "builderForLinx": "electron-packager --out linx64 --overwrite --platform linux --appname myApp --asar"  

此应用程序结构 myApp -> myApp(linux 可执行文件)、mian.js、资源 -> myApp.asar

这给出了一个 linux 版本的电子包。但我必须运行以下命令才能运行应用程序

sudo chmod +x ./myApp
sudo chown root chrome-sandbox
sudo chmod 4755 chrome-sandbox

实际上我是从 tfs build artifact 获取应用程序,当我下载这个应用程序时,我想直接运行 ./myApp。

这是我的 tfs 定义,我在 bash 中运行所有这些,而不是我的代理/构建机器是 windows 的。

#!/bin/bash 
cd "$(Build.ArtifactStagingDirectory)/myApp" ; pwd
chown <<username>> chrome-sandbox
chmod 4755 chrome-sandbox

注意:$(Build.ArtifactStagingDirectory) 是指向工件目录的 tfs 变量。 当我直接在 linux 机器上运行应用程序时,我看到了这个错误

The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /home/staff/kjeeva/licregsNew/v211/licensingclient/linx64/ClientSettings-asar/chrome-sandbox is owned by root and has mode 4755.

我对linux环境不太熟悉,对此有任何帮助或建议会很有帮助。

【问题讨论】:

请注意,电子应用程序生成为 .TGZ 文件,当我 tar 和 untar 时,我希望保留文件权限 例如 chrome-sandbox 需要有 -rwsr-xr-x 而所有其他的必须有 -rwxr-xr-x 当我对包进行 tar 和解压缩时,我希望它具有相同的文件权限 你好朋友,这个问题怎么样?下面的答案是否解决了您的问题,如果是,您可以 Accept it as an Answer ,这样它可以帮助遇到同样问题的其他社区成员,我们可以存档这个帖子,谢谢。另外,如果您仍然被阻止,请随时告诉我~ 【参考方案1】:

The SUID sandbox helper binary was found ... 似乎是 Linux 中电子框架的一个热点问题。详情可查看this discussion。

以下是该讨论中可用的解决方法:

1.chown 和 chmod 文件首先像你所做的那样。

sudo chown root chrome-sandbox
chmod 4755 chrome-sandbox

2.如果你得到一个appimage,你可以直接用--no-sandbox arguemnt运行它

3.sysctl kernel.unprivileged_userns_clone=1 到enable unprivileged access。

您已经使用过#1,但您也可以检查#2/#3 是否更适合您的场景。

这是我的 tfs 定义,我在 bash 中运行所有这些,而不是我的代理/构建 机器是 windows 的。

由于您的代理部分是 Linux,而其他代理是 Windows,我建议您可以使用 Conditions 来管理 bash 任务。您可以有两个不同的 bash 任务/步骤,一个用于 Linux,另一个用于 Windows。然后设置它们的条件以有条件地运行正确的命令。像这样的:

- task: Bash@3
  inputs:
    targetType: 'inline'
    script: |
      # Write commands here
      # ...
  displayName: 'Bash command for Linux'
  condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))

- task: Bash@3
  inputs:
    targetType: 'inline'
    script: |
      # Write commands here
      # ...
  displayName: 'Bash command for Windows'
  condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))

关于预定义变量Agent.OS,可以查看this document。

【讨论】:

以上是关于构建电子 linux 发行版:找到了 SUID 沙箱助手二进制文件,但未正确配置的主要内容,如果未能解决你的问题,请参考以下文章

为数十万台设备更新内部Linux发行版,Google如何做到?

权限提升和维持

Linux提权思路

Yocto-构建一个qemu版的Linux发行版

❤️ 硬核!2021年,微软居然开源了 Linux ?不敢信!发行版:CBL-Mariner!

❤️ 硬核!2021年,微软居然开源了 Linux ?不敢信!发行版:CBL-Mariner!