Electron: SUIDサンドボックスヘルパーバイナリが見つかりましたが、正しく構成されていません

作成日 2019年04月25日  ·  153コメント  ·  ソース: electron/electron

飛行前チェックリスト

  • [x]このプロジェクトの貢献ガイドラインを読みました。
  • [x]私はこのプロジェクトが遵守する行動規範に従うことに同意します。
  • [x]ファイルしたい問題と一致する問題を問題トラッカーで検索しましたが、成功しませんでした。

問題の詳細

  • Electronバージョン:

    • 5.0.0

  • オペレーティング・システム:

    • Arch Linux x64

  • 最後に知られているWorkingElectronバージョン::

    • 4.1.5

予想される行動

実行node_modules/.bin/electron --versionべき出力v5.0.0

明確にするために、すべてのコマンドでこのエラーが発生しますが、簡単にするために--versionフラグを使用しています。

実際の動作

$ node_modules/.bin/electron --version
[2720:0425/142001.775056:FATAL:setuid_sandbox_host.cc(157)] 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/christianbundy/src/ssbc/patchwork/node_modules/electron/dist/chrome-sandbox is owned by root and has mode 4755.

追加情報

$ stat /home/christianbundy/src/ssbc/patchwork/node_modules/electron/dist/chrome-sandbox
  Size: 5185424     Blocks: 10128      IO Block: 4096   regular file
Device: 802h/2050d  Inode: 1465270     Links: 1
Access: (0755/-rwxr-xr-x)  Uid: ( 1000/christianbundy)   Gid: ( 1000/christianbundy)
Access: 2019-04-25 14:15:10.609279524 -0700
Modify: 2019-04-25 14:15:10.659278929 -0700
Change: 2019-04-25 14:15:10.659278929 -0700
 Birth: 2019-04-25 14:15:10.609279524 -0700

ファイルをchownchmodの場合は正常に機能しますが、私の直感では、これらのコマンドがなくてもnpm install electron@latestは機能するはずです。 これは予想される動作ですか?

5-0-x discussion platforlinux

最も参考になるコメント

CONFIG_USER_NS=yはユーザー名前空間機能を有効にしますが、デフォルトでは特権ユーザーに制限されています。 これsysctl kernel.unprivileged_userns_clone=1示唆しています

全てのコメント153件

残念ながら、これを自動的に正しく構成する方法はありません。適切な権限を設定するにはroot権限が必要であり、 npm install間にrootパスワードを要求したくないためです。

理想的には、Archは非特権CLONE_NEWUSERのカーネルサポートを構成し、Chromium(およびElectron)は古いsetuidサンドボックスに依存する代わりに名前空間サンドボックスを使用できます。 Linuxで配布されるアプリは、これをインストールプロセスに組み込む必要があります。 たとえば、 https ://github.com/electron-userland/electron-installer-debian/pull/184およびhttps://github.com/electron-userland/electron-installer-redhat/pull/112を参照してください

開発中に、名前空間サンドボックスが使用できないことが検出された場合は、指示とともにnpm install何かを印刷する必要があります。

ねえ、超迅速な応答をありがとう!

特権のないCLONE_NEWUSERはCONFIG_USER_NS=yから来ていますか? もしそうなら、それ現在の構成である

お手伝いできることがあるまたはこれがArchで期待される出力であるかどうかをお知らせください。終了させて​​いただきます。最先端のディストリビューションを実行するときに予想される多少のぎこちなさがあることを理解しており、気にしません。これをnpmから完全に直接機能することを期待するのではなく、 PKGBUILDで解決します。 乾杯!

CONFIG_USER_NS=yはユーザー名前空間機能を有効にしますが、デフォルトでは特権ユーザーに制限されています。 これsysctl kernel.unprivileged_userns_clone=1示唆しています

すべてのLinuxディストリビューションがこれらの機能を有効にするまで、その間に可能な回避策はありますか?

@kitingChrissetuidサンドボックスが回避策です。 電子アプリを開発/リリースするときに、開発/パッケージ化スクリプトがサンドボックスヘルパーの権限を上記の@nornagonとして正しく設定していることを確認する必要があります。

すべてのLinuxディストリビューションがこれらの機能を有効にするまで、その間に可能な回避策はありますか?

元のメッセージを参照してください。

ファイルをchownしてchmodすると、正常に動作します

こちらもご覧くださいhttps://github.com/electron/electron/issues/16631#issuecomment-476082063したがって、suidサンドボックスを機能させるには、基本的にchrome-sandboxバイナリを次のように調整する必要があります。

  • sudo chown root chrome-sandbox
  • chmod 4755 chrome-sandbox

この問題はさらに深刻ですが、appimage / snapパッケージを実行している場合、これらの場合の適切な回避策はまだ明らかにしていません。 appimageが--no-sandbox arguemntで実行された場合は機能しますが、これはハックです。

@nornagon

適切な権限を設定するにはroot権限が必要であり、npmのインストール中にrootパスワードを要求したくないためです。

chmod 4755 node_modules/electron/dist/chrome-sandboxを実行するのにroot権限は必要ありません。このようなパッケージがインストールされると、通常chrome-sandboxを含むすべてのファイルがインストールされるため、アプリをdeb / pacman / etcパッケージにラップするコマンドを実行するのに十分です。ルートが所有します。 したがって、ここで説明したようにこのケースを手動で処理する必要がないため、インストールプロセス中に電子がchmod 4755 node_modules/electron/dist/chrome-sandbox自動的に実行するのは素晴らしいことです

CONFIG_USER_NS = yはユーザー名前空間機能を有効にしますが、デフォルトでは特権ユーザーに制限されています。 これは、sysctl kernel.unprivileged_userns_clone = 1を示唆しています。

sudo sysctl kernel.unprivileged_userns_clone=1実行することは、別の回避策であり、関連するコメントであることを確認します。

@vladimiry最初にchownしてからchmodする必要がありました。 逆にそれはうまくいきませんでした。

@burningTygerあなたは正しいです、私は元のメッセージを変更しました。

@nornagon我々の場合chmod 4755 out/Release/chrome-sandbox CIには、その許可を私たちいったん保持されますzipそれまでまたは私たちがこの変更を行う必要がありますelectron-download DL上の権限を修正するには?

ここで同じことは、それを変更する必要があるもののための悪い新しい機能です... :(

@MarshallOfSound zipはパーミッションをサポートしていませんが、最終的に問題はchmodパーミッションではなく、所有者にあります。 setuidサンドボックスヘルパーは、rootでのみ使用可能な関数を実行する必要があるため、suid _toroot_です。 最初にroot権限を取得せずに適切な権限を設定できた場合、それはLinuxの非常に深刻な脆弱性になります。 Linuxにとっては幸いですが、私たちにとっては残念なことですが、そうではありません。

私が見たオプションは次のとおりです。

  1. Electronでは何も変更しません。 開発者は、カーネルで非特権CLONE_USERNSを有効にして、setuidサンドボックスの代わりに名前空間サンドボックスを実行できるようにすることをお勧めします。
  2. サンドボックス方式が利用できない場合は、サンドボックスなしで起動します_パッケージ化されていないアプリを起動する場合のみ_。 Electronがパッケージ化されたアプリを起動している場合は、サンドボックスなしで起動することを拒否します。
  3. いずれの場合も、サンドボックス化の方法が利用できない場合は、サンドボックス化せずに起動し、警告を出力します。
  4. Linuxではデフォルトでサンドボックスを無効にします。

私は(2)に傾いています。 デプロイされたアプリのセキュリティを損なうことなく、開発が容易になります。

私は彼らの働きに精通していないので、私はまだスナップ/フラットパックについて何をすべきかわかりません。 Mac App StoreバージョンのElectronをビルドするときのように、その状況でサンドボックスを完全に無効にできるように、アプリをすでに十分にサンドボックス化している可能性があります。

今のところ、私は最初のオプションがもっと好きです。

  1. パッケージ化されていないアプリを起動するときにのみサンドボックス方式を使用できない場合は、サンドボックスなしで起動します。 Electronがパッケージ化されたアプリを起動している場合は、サンドボックスなしで起動することを拒否します。

そのようなシナリオは、どういうわけか誤解を招くでしょう。 サンドボックス化せずにパッケージ化されていないアプリを正常に実行している可能性がありますが、パッケージ化されたアプリがサンドボックス化を有効にした場合と同じように機能しない可能性があります。 たとえば、 remoteインターフェイスを介さずにレンダラープロセスからメインプロセスにアクセスする場合のように。 または、アプリをAppImage / Snap / Flatpakパッケージにラップする場合。

  1. いずれの場合も、サンドボックス化の方法が利用できない場合は、サンドボックス化せずに起動し、警告を出力します。

したがって、サンドボックスとして設計および開発されたパッケージ化されたアプリは、サンドボックスが利用できない場合、サンドボックスなしで実行される可能性があります。 これは私にはよく聞こえません。

  1. Linuxではデフォルトでサンドボックスを無効にします。

正確にはどういう意味ですか? サンドボックスが利用できない場合(現在の状況、強制サンドボックス)、アプリが起動または失敗する方法でLinuxでサンドボックスを有効にする方法は何でしょうか。

私も(1)が好きですが、(2)を少し守るために、サンドボックスを無効にしてもアプリに公開されているAPIは変更されません。 無効にするのは、OSレベルのサンドボックスだけです。 それでも同じ方法でアプリをロードしますが、OSによって保護されないだけです。

それでも同じ方法でアプリをロードしますが、OSによって保護されないだけです。

それなら私にもいいですね。 説明してくれてありがとう。

オプションのセキュリティは一般的にセキュリティを無効にする人々につながるので、私は2.が好きではありません。

今「愚かなユーザー」の靴に足を踏み入れると、私はむしろデフォルトでElectronが機能するのを見たいと思います。 それが非常に重要なセキュリティ対策である場合は、警告と、追加の作業が必要な理由についての適切な説明を教えてください。 それがそれほど重要でないなら、私に悪い「それはうまくいかない」味を与えないでください。

このため、私は1.(今のように強制終了)または4が好きです。

:x: chown root:root chrome-sandbox && chmod 4755 chrome-sandboxは私のためにいくつかの危険信号を上げます。

何をするのかを明確にするために、SUIDビットをchrome-sandboxに設定します。これにより、_すべてのユーザー_がファイルを_root_として実行できるようになります。 これは、 chrome-sandbox悪意を持って使用する方法がある場合、またはコンテンツが悪意を持って使用される場合、すべてのユーザーがrootになる可能性があることを意味します。 chrome-sandboxは、攻撃の非常に興味深い標的になります。

npm installでこの回避策を実行しないことを強くお勧めします。これは、 sudo (ユーザーはパスワードを入力する必要があります)が必要であり、侵襲的であり、そうすることによるセキュリティへの影響を理解できない可能性があるためです。

chown root:root chrome-sandbox && chmod 4755 chrome-sandboxは、私にいくつかの危険信号を出します。

もちろん、そうです。 ただし、代替のsudo sysctl kernel.unprivileged_userns_clone=1としてユーザー名前空間サンドボックスを有効にすることができます(Ubuntuではデフォルトで有効になっていますが、Archでは有効になりません)。

何をするのかを明確にするために、SUIDビットをchrome-sandboxに設定します。これにより、_すべてのユーザー_がファイルを_root_として実行できるようになります。 これは、 chrome-sandbox悪意を持って使用する方法がある場合、またはコンテンツが悪意を持って使用される場合、すべてのユーザーがrootになる可能性があることを意味します。 chrome-sandboxは、攻撃の非常に興味深い標的になります。

はい。ただし、このバイナリはChromeに付属しているものとまったく同じです。したがって、これが心配な場合は、Chromeもアンインストールする必要があります:)

サンドボックスなしで実行する/「サンドボックスヘルパー」なしで実行する方法はありますか? 最初のユーザーが不満を言った😅
これでサンドボックスが無効になると思っていましたが、それでもThe SUID sandbox helper binary was found, but is not configured correctlyエラーが発生します。
電子4.xにロールバックするのは嫌だ🤨

エラーメッセージ

Snapcraftのレビューとsuid

chrome-sandbox suidフラグ付きのスナップをアップロードしようとしましたが、snapcraftからのレビュープロセスでsuidフラグの使用が禁止されています。

The store was unable to accept this snap.
  - checksums do not match. Please ensure the snap is created with either 'snapcraft pack <DIR>' (using snapcraft >= 2.38) or 'mksquashfs <dir> <snap> -noappend -comp xz -all-root -no-xattrs -no-fragments'. If using electron-builder, please upgrade to latest stable (>= 20.14.7). See https://forum.snapcraft.io/t/automated-reviews-and-snapcraft-2-38/4982/17 for details.
  - found errors in file output: unusual mode 'rwsr-xr-x' for entry './chrome-sandbox'

OSレベルのサンドボックスを無効にするには@thomasnordquist --no-sandboxアプリの引数として渡す必要があります。つまり、 app.commandLine.appendSwitchでは不十分です。 Snapパッケージに関しては、ここで説明は混合モードで構築ますsmile:。 Electron v5は、AppImageとSnapを除くすべてのパッケージに使用されます。これは、サンドボックスを有効にしてこれらのパッケージを適切に機能させる方法がまだ完全には明確ではないためですが、いつかは明らかになるでしょう。

Snapcraftがsuidフラグを禁止している場合、おそらく唯一のオプションは、SnapcraftでElectronのサンドボックスを完全に無効にし、Snapcraftが使用するコンテナに依存することです。 それを行うための最善の方法がわかりません。Snapcraftを介してパッケージ化するときに追加のコマンドラインフラグを指定することは可能ですか? その場合、 --no-sandboxフラグを追加できます。 そうでない場合は、Snapcraft / Flatpakでの実行を検出し、その検出に基づいてサンドボックス化を無効にするために、特定の検出メカニズムを追加する必要がある場合があります。

一部のSnap関連ドキュメントhttps://docs.snapcraft.io/browser-support-interface

@ posix4eユーザー名前空間モードとSUIDサンドボックス/フォールバックモードの両方でサンドボックス化されたSnapパッケージを実行する問題に光を

何をするのかを明確にするために、SUIDビットをchrome-sandboxに設定します。これにより、_すべてのユーザー_がファイルを_root_として実行できるようになります。 これは、 chrome-sandbox悪意を持って使用する方法がある場合、またはコンテンツが悪意を持って使用される場合、すべてのユーザーがrootになる可能性があることを意味します。 chrome-sandboxは、攻撃の非常に興味深い標的になります。

はい。ただし、このバイナリはChromeに付属しているものとまったく同じです。したがって、これが心配な場合は、Chromeもアンインストールする必要があります:)

はい、ChromeのバイナリにSUIDが設定されたroot:rootを持たせることについて部分的に心配しています。 バグのないコードはほとんどありません。 記録のためのソースコードは次のとおりです: https

しかし、 npm installが次のようになるかどうか、私はもっと心配しています。

  1. たくさんのソフトウェアをその場でダウンロードします。
  2. ファイルroot:rootとSUIDの1つを自動的に作成します。

これは、root以外のユーザーが所有するファイルに対してsudo chown root:root && sudo chmod 4755を自動的に実行することを私が知っている最初のソフトウェアスタックになると思います。

npmのインストールでsudo chown root:root && sudo chmod 475を実行することは問題外であるはずです。アクセス許可を設定するには、npmをrootとして実行する必要があります。 npmのフックモデルでは、インストールされているすべてのパッケージがルートとしてフックを実行することもできます。 おそらく数百のパッケージとネストされた依存関係があるため、これは非常に危険です。

npminstallでsudochown root:root && sudo chmod475を実行することは問題外です。

私が理解している限り、これはオプションとは見なされません。

npmのインストール中にroot権限を必要とすることを行うことは、初心者ではないことに同意します。 そのため、オプションの1つとしてリストしませんでした。

その価値については、SUIDサンドボックスの変更に伴い、 electron-installer-debian 1.2.0、 electron-installer-redhat 1.1.0、およびelectron-installer-snap 3.2.0がリリースされました。 Electron Forge v5およびv6ベータも推移的に更新する必要があります(範囲内のバージョン更新を介して、 npm updateまたはyarn upgrade適切に使用します)。

わかりやすくするために、

明確にするために、Snapsにはそれ以上のものがありました(つまり、上記のようにブラウザーサンドボックスのサポートを追加しました)。 詳細については、関連するPRの変更を参照してください。

私はこれをヒットしました。chown/ chmodは機能しますが、Dockerイメージ内で実行している場合に実行する必要のあるアクションはこれだけではありません。

これを行うと、別のエラーが発生します。

Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted

その修正は、 --privilegeddocker runコマンドに追加することです。 これは、主にCIでは良い解決策ではないと思います。

@JCMaisは、suidサンドボックスを使用しようとしているはずなのに、Electronが--disable-namespace-sandboxしてsuidサンドボックスを強制することができます。 --privileged (または--cap-add SYS_ADMIN 、またはCLONE_NEWUSERを許可するカスタムseccompプロファイル)を使用してdockerを起動すると、名前空間がサンドボックス内で使用可能になり、setuidサンドボックスまたはそのヘルパー実行可能ファイルは必要ありません。 。

@thomasnordquistのように、プリロードスクリプトを使用してSnap / AppImageパッケージのサンドボックス化を無効にすることになりました。 --no-sandbox引数を使用して、名前が変更された/元の電子バイナリをロードするために使用される、元のバイナリという名前のプリロードのようなshスクリプトを作成します。 電子ビルダーのafter-packスクリプトで実行すると便利です

@nornagonこのフラグを電子にどの程度正確に渡す必要がありますか? --disable-namespace-sandbox追加しようとしましたが、エラーが発生し続けます。

:~$ electron --disable-namespace-sandbox
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted

これがすぐに私を悩ませ、私がこれを修正できるまで、すべてのLinuxユーザーが古いバージョンで立ち往生していることを確認できます。

私は完全にセキュリティを改善する方法を求めていますが、これはそれをオフにする機能フラグなしで出荷されました。

また、コードで無効にする機能がなければ、これを出荷するべきではなかったと主張したいと思います。 コマンドラインから手動で指定しない限り--no-sandboxが機能しないため、これは偶然だったと思います。

electron-installer-snapがサンドボックスサポートを実装する方法に問題がある場合は、問題追跡システムでお知らせください。

electronic-installer-snapがサンドボックスサポートを実装する方法に問題がある場合は、IssueTrackerでお知らせください。

また、Snapパッケージの問題に対処するには、変更で十分であると誰かが確認するのを聞きたいです。 したがって、正/負のフィードバックの両方を歓迎します。 関連情報を参照して

@vladimiry先に進んでテストしましたが、機能しませんでした。

OSパッチ、sysctl、または再起動で解決しないソリューションが必要です。 今すぐ機能するものが必要です。 --no-sandboxが推奨されます。

機能していないパッケージ化されたSnapを再現するために使用できる最小限のElectronアプリを誰かが提供できれば、私にとってはるかに役立ちます。 electron-quick-startフォークを使用してCircleCIでスナップを作成し、それを(Debian Stretch)ラップトップにインストールして、変更によって少なくとも機能するElectronアプリが作成されたことを確認しました。

「動作しませんでした」は、他の人のために正しくパッケージ化するためにelectron-installer-snapで何ができるかを特定するのに役立ちません。

@burtonator 、テストしてくれてありがとう。 私の知る限り、Snap / AppImageビルドローダーのようなbash / shスクリプトにパッケージ化されており、元のバイナリ/電子を--no-sandbox cmd引数で開始することが、現時点で検証されている唯一の回避策です。

@maleptをテストする前に、 sudo sysctl kernel.unprivileged_userns_clone=0実行してユーザー名前空間OS機能を無効にする必要があります。

@vladimiryええ、私のラップトップにはすでにそのユーザー設定があります。

誰かがこの解決策を探しているなら、 @ thomasnordquist解決策または私の適応をチェックしてください。彼らは、Linuxでサンドボックスを無効にすることで機能します。

@fabiospampinato適応により、すべてのLinuxパッケージタイプのサンドボックスが無効になりますが、少なくともDEBおよびPacmanパッケージはSUIDサンドボックス(おそらくコンテナーに似ていないすべてのパッケージ)でうまく機能します。SUID許可ビットchrome-sandboxに設定する必要があります関連コードを想定しています。

CONFIG_USER_NS = yはユーザー名前空間機能を有効にしますが、デフォルトでは特権ユーザーに制限されています。 これは、sysctl kernel.unprivileged_userns_clone = 1を示唆しています。

sudo sysctl kernel.unprivileged_userns_clone=1実行することは、別の回避策であり、関連するコメントであることを確認します。

ありがとう、私のために働いてくれてありがとう! @vladimiry

5.0.2で動作するかどうか知っていますか?

@ p3x-robot変更ログにこの問題についての言及はありません。 確認したところ、エラーはまだ残っています。

@rybaczewa応答ありがとう、私もv4を続けます、それは大きな問題なので、v5が機能するまで待つことはできません、ciao

v5が機能するまで待つことはできません

v5は機能しています

このスレッド@ p3x-robot @rybaczewaの人々に明確にするために、この問題は情報提供/ダウンストリームの目的で開いたままになっています。 電子自体は期待どおりに機能しており、ここで「修正」するものは何もありません。

このログメッセージが表示されている場合は、 sudo sysctl kernel.unprivileged_userns_clone=1実行するか、エラーメッセージに示されているようにchrome_sandboxバイナリに正しいアクセス許可を与える必要があります。

@vladimiry @MarshallOfSoundなぜこれが修正されたと言っているのですか? Snapでは、アプリP3XRedisとP3XOnenoteをsudo sysctl kernel.unprivileged_userns_clone=1インストールすることも、 chrome_sandbox v5.0.xを提供することもできません。 v4.xxでのみインストールできます

ユーザーがsudoを使いたいと思いますか? 彼らはこのプログラムが悪いと思い、アプリをアンインストールします。
v5バージョンまたはv6またはv7が正しく機能していないため、これはバグです
image

@ p3x-上記のロボットsnapサポートは、スナップの作成方法に依存します。 electron-installer-snapは、これをすぐにサポートします。前述のように、そのモジュールに問題がある/機能していない場合は、そのモジュールで問題を提起してください。

詳細についてはelectron-installer-snapリポジトリを参照するか、ブラウザサンドボックスに関するsnapcraftドキュメントを参照してください。

繰り返しになりますが、ここでの私の現在の理解は、修正すべきバグはなく、Electronのサンドボックスは期待どおりに動作しているということです。 ここで議論されているのは、 chrome_sandboxバイナリのパッケージ化で人々が直面している問題です。

これは奇妙です、私はすでにサンドボックスを追加したので:

app.enableSandbox()
app.commandLine.appendSwitch('no-sandbox')

出力:

patrikx3<strong i="9">@bitang</strong>:~/Projects/patrikx3/redis-ui-workspace/redis-ui$ /snap/bin/p3x-redis-ui 
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
[12999:0525/085646.618618:FATAL:setuid_sandbox_host.cc(157)] 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 /snap/p3x-redis-ui/5/chrome-sandbox is owned by root and has mode 4755.
Trace/breakpoint trap (core dumped)
patrikx3<strong i="10">@bitang</strong>:~/Projects/patrikx3/redis-ui-workspace/redis-ui$ 

image

私はこれをapp.enableSandbox()として試しますが、次のようになります。

Uncaught ReferenceError: require is not defined
    at onload.js:1

行を削除すると、機能します。

@MarshallOfSound私はelectron-builder

皆さんのために、それを機能させたいのであれば、私はヘルパーを作成しました:
https://github.com/patrikx3/redis-ui/blob/master/src/build/after-pack.js
electron-builderを使用している場合は、次のように追加します。
image

皆さんのために、それを機能させたいのであれば、私はヘルパーを作成しました:

このような解決策は、この問題の議論ですでに何度も言及されています。これが、electronv5が機能する前に私が書いた理由です。

@vladimiryありがとう、私はこの解決策を逃しました、私はtypescriptの代わりにjavascriptネイティブ解決策を追加しました...

唯一の問題は、パックハック後にこれを行うと、パネル上で電子からのアイコンが使用されないことですが、2番目のアイコンが生成されます。どうすれば解決できますか? サンドボックスなしのフラグがそれを行うのだと思います。 誰でも?

--no-sandboxでのみ発生します:
image

@fabiospampinato適応により、すべてのLinuxパッケージタイプのサンドボックスが無効になりますが、少なくともDEBおよびPacmanパッケージはSUIDサンドボックス(おそらくコンテナーに似ていないすべてのパッケージ)でうまく機能します。SUID許可ビットchrome-sandboxに設定する必要があります関連コードを想定しています。

アイコンを2つではなく1つ保持する方法を知っていますか?

@ p3x-robotは、プリローダーのようなbash / shスクリプトを導入せずに、パッケージ化されたSnapコンテナーアプリに--no-sandbox引数を追加する方法があります。

  • unsquashfs your-snap-file.snap実行して、最初にスナップを解凍します。
  • そこに必要な引数を追加して、 ./squashfs-root/command.sh編集します。
  • snapcraft pack ./squashfs-rootコマンドを実行して、 ./squashfs-rootフォルダーをスナップパッケージに戻します。

私は試しませんでしたが、同様の再パッケージ化アクションをAppImageパッケージにも適用できると思います。つまり、さまざまなunpack / packコマンドを実行する必要があります。

説明されている再パッケージ化アクションは、 afterAllArtifactBuildエレクトロンビルダーのフックでトリガーできると思います。

@vladimiryありがとう

1つはafterAllArtifactBuildにとって興味深いものです

@ p3x-robot afterAllArtifactBuildフックは実際には期待どおりにトリガーされていませんが、Snapやその他のパッケージタイプのビルドをプログラムでトリガーするのは非常に簡単です。 ここにコードサンプルを参照してください。 snapFileはここの結果ファイルなので、解凍/ unsquashfsてから、必要な変更を適用して元に戻す/ snapcraft pack 。 サンプルコードでは、Hunspell辞書をSnapの./usr/share/hunspellフォルダーにパックします。

@vladimiry私はElectronv4を使用しています。 誰かがこれを修正すると思います。

@ p3x-ロボット私はまだあなたが修正するものが何もないことを認めなければならないと思う傾向があります。

@vladimiry修正するものはありません、確かに。 :)

Electron v5.0.2がサンドボックスの問題で動作するかどうか誰かが知っていますか?

それは、v.5.0.0と同じです:smile:

これが話題から外れていないことを願っていますが、Debian(9)のAppImagesではエラーが発生します:

The setuid sandbox is not running as root. 

私が間違っている場合は訂正してください。しかし、これは(主にこの議論から)Debianでデフォルト

したがって、この提案に関して:

  1. Electronでは何も変更しません。 開発者は、カーネルで非特権CLONE_USERNSを有効にして、setuidサンドボックスの代わりに名前空間サンドボックスを実行できるようにすることをお勧めします。

ユーザーの名前空間機能が有効になっている場合にのみ機能するというメッセージをユーザーに表示し(その方法のヒントが含まれている可能性があります)、代わりに.debパッケージを使用することをお勧めします。

エラーが表示される前に、このようなメッセージを実装するにはどうすればよいですか? 解凍して再パックせずに、AppImageのAppRunにカスタムスクリプトを追加する方法はありますか?

解凍して再パックせずに、AppImageのAppRunにカスタムスクリプトを追加する方法はありますか?

@gcascioスレッドには、 afterpackスクリプトによって

お返事をありがとうございます。 しかし、 afterpackが呼び出されたとき、または間違っている場合、生成されたAppRunは使用できないと思います。少なくとも、 appOutDir見つけることができませんか?

アフターパックを呼び出すと、生成されたAppRunは利用できないと思います

私はローダーのようなshスクリプトの使用について書いていましたが、AppRunスクリプトのパッチについては書いていませんでした。 AppRunスクリプトにパッチを適用する場合は、再パッケージ化せずにパッチを適用する方法はないようです。

わかりました、私は誤解しました。 詰め替えに行くかもしれませんが、ありがとうございます。

詰め替えに行くかもしれませんが、ありがとうございます。

テンプレートが必要な場合は@gcascio

ia同じ「SUIDサンドボックスヘルパーバイナリが見つかりました」エラーですが、インストール後のスナップファイルにあります
どうすればこれを修正できますか

@vladimiry私はDebianコンテナを実行しているhttp://gitpod.ioと呼ばれるオンラインIDEDockerで作業しています。 sudoアクセスがないため、chrome-sandboxの問題を修正できません。 ここでの一般的な口調は、これはChromeの問題であり、Electronの問題ではないということですが、Electronが問題を解決できれば、それは良いことではないでしょうか。

このサイトからhttps://www.gitpod.io/blog/gitpodify/コンテナでPuppeteerを使用するための解決策を見てきました。

const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});

プロセスを強制終了する前に、サンドボックスエラーが発生した場合、Electronはそのようなコードを試すことができますか? それとも、これはbashファイルで呼び出すことができるものですか?

プロセスを強制終了する前に、サンドボックスエラーが発生した場合、Electronはそのようなコードを試すことができますか? それとも、これはbashファイルで呼び出すことができるものですか?

ええ、一般的に電子アプリのバイナリに--no-sandbox引数を渡すと、この問題を回避できるはずです。

インストールパッケージに応じて、SUID許可ビット(4755)をchrome-sandboxバイナリ(deb、pacmanなどのパッケージの場合)に設定するか、 --no-sandbox引数をローダーsh / bashスクリプトにハードコードすることができます。 (SnapやAppImageなどのパッケージの場合)。 これは私が現在行っていることなので、アプリユーザーのために何もする必要はありません(sudoアクセスは必要ありません)。

最近のelectron-builderリリースには、すでに--no-sandbox引数のハードコーディングが付属していますが、Snapパッケージのみです。

ありがとう@ vladimiryelectron --

新しい電子ビルダーがありますが、AppImageはまだ修正されていませんよね?

電子6はサンドボックスエラーを修正していますか? 5でも6でも、これを修正できないため、まだv4を使用しています。

状況は次のとおりです。

  • Electron v5は、Linuxで混合モードのサンドボックス化(つまり、サンドボックス化されているプロセスとされていないプロセス)を有効にしました。 これは、レンダラープロセスがデフォルトでサンドボックス化されているかどうかは変わりませんが、GPUプロセスがサンドボックス化されていることを意味します。
  • Linux上のChromiumのサンドボックスは、 CLONE_NEWUSERと呼ばれるOS機能を使用します。 一部のカーネルは、十分な注意を払って特権ユーザーに制限されたこの機能で構築されています。 詳細については、こちらをご覧ください[lwn、2016]。
  • CLONE_NEWUSERが利用できない場合、Chromiumは、rootにsetuidされたヘルパーバイナリを必要とする別のサンドボックスメカニズムの使用にフォールバックします。 このバイナリが存在しないか、適切な権限( 4755 _およびrootが所有_)を持っていない場合、サンドボックスは起動に失敗します。
  • ヘルパーのバイナリ権限の設定は、特権ユーザー(つまりroot)が行う必要があります。 npm install間にルートアクセスを要求したくないため、これらのアクセス許可をnpm installに設定しません。
  • Electron v5リリースパッケージにはヘルパーバイナリが含まれていますが、適切な権限と所有権を確実に取得するかどうかは、さまざまなパッケージ化および配布ツール次第です。

2つの回避策があります。

  1. カーネルのCLONE_NEWUSERへの非特権アクセスを有効にします。 一部のカーネルは、これをsysctl kernel.unprivileged_userns_clone=1変更することをサポートしています。
  2. --no-sandbox起動して、サンドボックスを完全に無効にします。 メインプロセスJSが実行される前にGPUプロセスが起動されるため、残念ながらJSからこの引数を追加するだけでは不十分です。

これらの状態が検出された場合、Electronのサンドボックスを自動的に無効にすることはサポートされません。 適切な権限を設定するには、分散パッケージを確認する必要があります。 ほとんどのツール(少なくともelectron-builder、electron-installer-snap、electron-installer-debian、およびelectron-installer-redhat)はこれを自動的にサポートし、開発者による構成を必要としません。 これをサポートしていない別のツールを使用している場合は、そのツールで問題を提起し、このコメントにリンクしてください。

前の段落で述べたように、明示的に指示されない限り、本番環境でElectronが機能しているサンドボックスにアクセスする必要があるという要件を変更しないため、この問題を閉じます。 ただし、開発を容易にするために、#19550を開いて、Electronが分散パッケージではなくnpm installを介してインストールされた場合に、サンドボックス化されていないモードに自動的に劣化するオプションを追跡しました。

あなたは@nornagonで述べた問題を回避するために2 minmal例を見つけることができます@ P3X-ロボットここ@vladimiryに触発されました

@gcascioですが、スナップハックを削除できますか? スナップはエレクトロンビルダーで処理されますが、確認できますか?

@gcascioそれは動作します、どうもありがとう! できます!

@gcascio no workie、2つのアイコンが生成されるので、electronv4.2.8に戻しました... :(

@ p3x-フィードバックをありがとうロボット。 あなたが興味を持っている場合に備えて、私は問題を作成しました、そして私がいつか見つけたらすぐに侵入します。

@nornagonなので、DebianでElectron 6を実行することすらできず、

2つの回避策があります。
カーネルでCLONE_NEWUSERへの非特権アクセスを有効にします。 一部のカーネルは、sysctl kernel.unprivileged_userns_clone = 1でこれを変更することをサポートしています。

顧客のコンピュータをいじる方法は絶対にありませんこれを行う方法です。

--no-sandboxを指定して起動し、サンドボックスを完全に無効にします。 メインプロセスJSが実行される前にGPUプロセスが起動されるため、残念ながらJSからこの引数を追加するだけでは不十分です。

--sandboxフラグを追加して、デフォルトでサンドボックス機能をオフにするのはどうですか? これには、Electronを使用している人の99%を台無しにしないという利点が

与えられた回避策は、ユーザーの観点からは十分ではありません。

--no-sandbox argを追加するローダーのようなスクリプト/プログラムを使用することも回避策と見なすことができるため、エンドユーザーのアクションは必要ありません。 そのようなローダーに加えて、最初にuser namespaceサポートをテストし、必要な場合にのみ--no-sandboxを追加できます。

@pronebirdがchrome-sandboxバイナリsetuidルートを提供することは、サンドボックスなしでElectronを実行するよりもはるかに危険性が低くなります。 考えてみてください。Electronバイナリを出荷しているのはあなたです。信頼できるコードを出荷していると確信できます(たとえば、署名することで)。 ただし、アプリが信頼できないコードをロードすることを確信できる場合(おそらく、意図的に、たとえばWeb上のURLに移動することによって)、アプリは、サンドボックスを使用せずに、ユーザーの許可を得てそのコードを実行します。 Chromeが使用しているのと同じサンドボックスシステムのバグを悪用する攻撃よりも、アプリのサンドボックス化されていないプロセスで信頼できないJSを実行することに焦点を当てた攻撃に対する防御についてはるかに懸念しています。 (そして、後者が発見された場合、_非常に迅速に_修正されることを期待しています。) chrome-sandboxバイナリのコードを自分で監査したい場合は、 https://chromium.googlesourceから始めてください

Electronサンドボックスなしで実行することに専念している場合は、他の方法でサンドボックス化することを強くお勧めします。たとえば、snapcraftやflatpakのパッケージャーには、コンテナー内のElectronのサンドボックスを無効にするランチャースクリプトが含まれていると思います。

@nornagon

chrome-sandboxのバイナリsetuidルートを指定することは、サンドボックスなしでElectronを実行するよりもはるかに危険性が低くなります。 考えてみてください。あなたがElectronバイナリを出荷しているので、信頼できるコードを出荷していると確信できます(たとえば、署名することで)。 ただし、アプリが信頼できないコードをロードすることを確信できる場合(おそらく、意図的に、たとえばWeb上のURLに移動することによって)、アプリは、サンドボックスを使用せずに、ユーザーの許可を得てそのコードを実行します。 Chromeが使用しているのと同じサンドボックスシステムのバグを悪用する攻撃よりも、アプリのサンドボックス化されていないプロセスで信頼できないJSを実行することに焦点を当てた攻撃に対する防御についてはるかに懸念しています。 (そして、後者が発見された場合、非常に迅速に修正されることを期待しています。)

もちろんですが、リモートコンテンツをロードしないアプリがある場合、サンドボックスを実行してもほとんど意味がありません。 これはElectronの場合に当てはまると思います。Webスタックを使用してデスクトップアプリを構築し、WebからJSONをロードする場合ですが、SafariがないようにWebページを表示するだけではありません。 人々がウェブサイトを電話のギャップで包んでいた時代は過ぎましたね。

オーバーヘッドが多すぎると思います。 今日、ブートストラップスクリプトをアプリに追加し、 chrome-sandboxバイナリをディストリビューションから削除しました。これはさらに5メガバイトでした。 残念ながら、 electron-builderはこれをサポートしていないため、フックを追加して自分で行う必要がありました。

chrome-sandboxバイナリのコードを自分で監査する場合は、 httpsます。 c#424

ありがとう。 それは本当に脅威モデルに依存しており、root権限でGoogleを実行する方法はありません。

完全に安全な場合もありますが、電子ビルドはnpm経由で出荷されるため、すべてのソースが無傷であることを確認することも非常に困難です。 Electron用のカスタムビルドサーバーをセットアップし、ソースを自分で監査する必要があります。 これは大変な努力であり、私はむしろそれを避けたいと思います。

@pronebird私はサンドボックスの議論にあまり関与するつもりはありませんが、ここでの私のスタンスは、現在のようにデフォルトでサンドボックスを有効にする必要があるということです。

完全に安全な場合もありますが、電子ビルドはnpm経由で出荷されるため、すべてのソースが無傷であることを確認することも非常に困難です。

これは根本的に正しくありません。電子ビルドはnpm経由で出荷されません。 npmのelectronパッケージは、実際には約2ファイルと約40行のJSです。 実際のElectronビルドはS3経由で配信され、S3にもチェックサムがあるため、ダウンロードしているビルドが実際にElectronから出荷されたビルドであることを確認できます。

@MarshallOfSound

これは根本的に正しくありません。電子ビルドはnpm経由で出荷されません。 npmのelectronパッケージは、実際には約2ファイルと約40行のJSです。 実際のElectronビルドはS3経由で配信され、S3にもチェックサムがあるため、ダウンロードしているビルドが実際にElectronから出荷されたビルドであることを確認できます。

つまり、ビルドはnpm install段階でダウンロードされます。 npmで物理的にホストされているという意味ではありません。 S3でホストされているとしましょう。 私が間違っていることを証明しますが、チェックサムは同じS3でホストされているため、そのようなシステムのセキュリティグレードが低下します。これは片足のみです。 しかし、それは重要ではありません。 ビルドが改ざんされ、それに応じてチェックサムが更新されるシナリオを想像してみてください。 今、問題があります。 それは単に私の側のリスクとダメージのコントロールです。 ルートなし=何か本当に悪いことが起こるリスクが低い。

@pronebird chrome-sandboxバイナリは間違いなく5MBであってはなりません、それはバグです。 それを指摘してくれてありがとう、それを修正するために#20049を開きました。

ユースケースでサンドボックスを無効にすることを選択することは確かに歓迎されます。 残念ながら、Chromiumのアーキテクチャでは、 app.commandLine.appendSwitch呼び出すのではなく、コマンドラインで--no-sandboxを直接渡す必要があります。 理想的には、ラッパースクリプトを必要とせずに、サンドボックスを無効にすることができます。 うまくいけば、#20049を使用すると、バイナリを削除する懸念が改善されます。これは、5MBよりも200KB余分に使用する方がはるかに合理的だからです。

システムバイナリを使用するためのオプションはありますか? node_modules /フォルダー内のすべてにsuidrootビットを与えることについて予約があります。 ありがとう。

@gardner --no-sandbox argを渡すことができます。これは、開発モードの場合の簡単な回避策です。

VSCodeは最近Electron6に切り替えられましたが、 --no-sandboxオプションが指定されていない限り、VSCodeが起動しなくなったという報告が寄せられています。 ここでの前進は何ですか? 参照: https

snapは箱から出してすぐに機能します。appimageには、ハードに記述されたコードがあります。
https://github.com/electron-userland/electron-builder/issues/3872#issuecomment -517875676

残りはわかりませんが、NPM、AppImage、SNAPのみをリリースしています...

基本的に、ランチャースクリプトに引数( --no-sandbox )を追加するには、すべてのタイプのアイテムを再パッケージ化する必要があります。

Electron 6には解決策はありません。パッケージに基づいて作成するか、修正またはダウングレードを待つ必要があります...

より良い開発者体験のために。 電子CLIツール内で以下のコマンドを設定できます。

sudo chown root pathToChromeSandboxDynamicallyGenearted && sudo chmod 4755 pathToChromeSandboxDynamicallyGenearted

electronic--ConfigSandboxのようなコマンド。
ユーザーは気づき、サンドボックスを簡単に構成できます。
そして、それが最初の実行であるときでさえ。 彼らに行動を起こしたいかどうか尋ねることができます。 yまたはn。 そして、彼らがする必要があるのは、パスワードを入力することだけです。 そうすれば、一目でそれが行われます。 そして、それは大きなユーザーエクスペリエンスにつながり、時間内に勝ちます。 ベンダーやコミュニティを信頼するからです。 そしてそれと一緒に行きなさい。 ネット全体を検索する代わりに。 そして、それは私たちのより多くの初心者にとってさらに価値があります。 そして、それはすべての場合にいいです。

この問題は解決されましたが、私はまだ電子7.0.0で問題を抱えています。 修正につながったコミットはありますか?

なぜ問題は解決されたのですか? v7.0.0でも存続するため、利用可能な修正はないようです。

これは、アプリのパッケージ化の問題ですが、Electronの問題ではないためです。

ああ、大丈夫。 しかし、どうすればこれを修正できますか? エンドユーザーが余分な作業を行う必要がない方法はありますか?

エンドユーザーが余分な作業を行う必要がない方法はありますか?

はい、方法があります、それは前に議論されました。

sudo sysctl kernel.unprivileged_userns_clone = 1

WSLユーザー(WSLを使用する人はたくさんいます)に問題があり、WSL1は実際のLinuxカーネルを使用していません... WSL2のリリースを待つ必要があります。

この制限に関する参照: https

CONFIG_USER_NS = yはユーザー名前空間機能を有効にしますが、デフォルトでは特権ユーザーに制限されています。 これは、sysctl kernel.unprivileged_userns_clone = 1を示唆しています。

sudo sysctl kernel.unprivileged_userns_clone=1実行することは、別の回避策であり、関連するコメントであることを確認します。

ええ、私はmanjaroとi3wmを使用しています。同じエラーが発生しましたが、これで機能しています。

何かが足りないのですか、それともルートアクセスなしでElectronアプリをダウンロードして実行することはできなくなりましたか? 申し訳ありませんが、これがDebianに固有のものであり、メインラインカーネルが非特権名前空間の無効化さえサポートしていないことに気づいていませんでした。

私の大胆さを許してください、しかしこれは絶対に正気ではありません。 Electronは、レンダラープロセスでもNode.jsAPIを公開します。 ElectronアプリでChromiumのサンドボックスを使用/有効化することは完全に無意味であり、この問題を指摘しているGitHubのバグレポートからわかるように、これも非常に逆効果です。 可能であれば無効にしてください。

Electronは、レンダラープロセスでもNode.jsAPIを公開します。

nodeIntegrationオプションは、v5以降デフォルトで無効になっています。

申し訳ありませんが、これがDebianに固有のものであり、メインラインカーネルが非特権名前空間の無効化さえサポートしていないことに気づいていませんでした。

だからdebianを実行しているので、自分のマシンにrootアクセスできるのは幸運なようです。 しかし、この機能をそのまま使用すると、ユーザーが電子アプリを(AppImageとしてかどうかに関係なく)実行できなくなります。

a) sudoを持っている、または
b) sudo持っている人に、特権のない名前空間を有効にするように説得できますか?

@ black-puppydogええと、ソースからアプリをビルドしている場合は、開始スクリプトを編集して--no-sandbox引数をelectronに渡すことができます。 同じ効果でAppImageを変更することは可能であるはずです(それを解凍して再パックすることによって)が、私はそれを自分で試していません。 また、一部のAppImageクリエーターがビルドにそのフラグを含めることも不可能ではありません。その場合、それらの特定のイメージは正常に機能します。

そうでなければ、私はあなたが正しいと思います。 メインラインカーネルでは常に非特権の名前空間が有効になっており、それらを無効にする方法がないことに注意してください。 したがって、なぜこれがDebianの問題にすぎないのか。

@ black-puppydog覚えているように、Debianをマシンに最初にインストールするときに、インストーラはrootパスワードの入力を求めます。 しかし、はい、Debian(またはDebianのカーネルパッチを使用する他のシステム)では、rootアクセス( sudoなどを介して)を持っているか、 --no-sandbox Electronアプリを実行する必要があります。

@ndorfメインラインLinuxでは、ユーザーの名前空間は機能をコンパイルしないことで無効にできますが、実行時に有効/無効にしたり、特権プロセスのみに制限したりすることはできません。 Debianは、ユーザーの名前空間がデフォルトで特権プロセスに制限されるようにカーネルにパッチを適用しますが、 /proc/sys未満の設定ですべてのプロセスに対して有効にすることができます。

Debianがそれを制限している理由は、特権のないユーザー名前空間が脆弱性の長い歴史を持つ深刻なセキュリティリスクであるためです。 非特権ユーザーの名前空間により、非特権プロセスは、非常に長い間のみ特権プロセスに制限されていた多くのカーネル機能(UID 0、機能、ファイルシステムのマウント、デバイスiノードの作成など)にアクセスできます。 非特権プロセスがこれらのことを行うことができないことを前提に依存する任意のカーネルコードは、非特権プロセスが突然これらのことを行うことができることになりまし脆弱です。

すべてのLinuxディストリビューションがこれらの機能を有効にするまで、その間に可能な回避策はありますか?

元のメッセージを参照してください。

ファイルをchownしてchmodすると、正常に動作します

こちらも参照してください#16631(コメント)したがって、suidサンドボックスを機能させるには、基本的にchrome-sandboxバイナリを次のように微調整する必要があります。

* `sudo chown root chrome-sandbox`

* `chmod 4755 chrome-sandbox`

この問題はさらに深刻ですが、appimage / snapパッケージを実行している場合、これらの場合の適切な回避策はまだ明らかにしていません。 appimageが--no-sandbox arguemntで実行された場合は機能しますが、これはハックです。

これは、パッケージ化されていないディレクトリからアプリケーションを実行している場合に機能します。 chrome-sandboxアクセス許可を変更した後、このディレクトリをパッケージ化するにはどうすればよいですか?

@ shrinidhi111 4755は、少なくとも例えば。 ルート所有者に関しては、通常、Linuxのリポジトリからインストールされたパッケージがルート所有者を取得するときに関連ファイルが取得されます。 AppImageビルドの場合、それを再パッケージ化し、内部のAppRunスクリプトに--no-sandbox argをハードコードします。これは、 electron-builderがまだ箱から出していないためです。 スナップパッケージは、ハードコードされた--no-sandbox argを使用してelectron-builderによって形成されます(関連する修正は約6か月前に追加されました)。

@ shrinidhi111 4755は、少なくとも例えば。 ルート所有者に関しては、通常、Linuxのリポジトリからインストールされたパッケージがルート所有者を取得するときに関連ファイルが取得されます。 AppImageビルドの場合、それを再パッケージ化し、内部のAppRunスクリプトに--no-sandbox argをハードコードします。これは、 electron-builderがまだ箱から出していないためです。 スナップパッケージは、ハードコードされた--no-sandbox argを使用してelectron-builderによって形成されます(関連する修正は約6か月前に追加されました)。

スナップファイルを作成することは素晴らしいアイデアであり、私は多くの作業を節約できました。 再度、感謝します!

これはまだ解決されていないのはどうですか

スナップで修正されました。appimageで動作する独自のビルドがあります。 残りは未解決です。

このスレッドは非常に長く、エラーが発生します。 どこかに状況の要約はありますか? たぶん、そのような要約はエラーからリンクされている可能性があります。

https://github.com/electron/electron/issues/17972#issuecomment -495767027などが、ルートアクセスのあるシステムでのみ電子を簡単かつ安全に機能させるのに十分であると提案しているようです。 システムが誤った権限設定を検出し、開発者に警告を提供して、この問題に遭遇するユーザーを減らすことができればいいのかもしれませんが、それは別の問題かもしれません。 また、ルートにアクセスできないユーザーが電子を簡単に使用できるパスがあれば、信頼できないリソースは通常よりも危険であるということをはっきりと理解しているとよいでしょう。

ルートアクセス権のないユーザーが電子を簡単に使用するためのパス

--no-sandbox CLI引数。

vladimiry、私は、たとえば、端末の経験があまりないエンドユーザー、または電子をラップするアプリを実行することを考えていました

たとえば、端末の経験があまりないエンドユーザーや、電子をラップするアプリを実行することを考えていました。

その--no-sandboxをアプリのショートカットに埋め込みます。 ここにあるLinuxパッケージは、 kernel.unprivileged_userns_cloneシステム値に関係なく正常に機能します。 したがって、アプリケーションをパッケージ化する必要があります。

私が開発者であり、エンドユーザーに適切な警告を出す場合はそうです。 名前空間サンドボックスが機能しているため、多くの開発者がこの問題について学ぶことはありませんか? また、信頼できないリソースの方が危険であるということを関係者に伝えずに、既存のソリューションが実施されていることも心配です。

このソリューションは、WSLが原因でこのエラーが発生した場合にのみ機能します

WSL(私の場合はWSL2)でelectronを使用しようとしたときに、この問題が発生しました。
X11サーバーを使用しても、電子はX11上を実行できませんでした。

WSL内で実行したとしても、Windows用のelectronを構築する必要がありました。 その後、すべてが例外として機能します
それを行う最も簡単な方法:

  • 電子をアンインストールnpm uninstall electron
  • npm config platform export npm_config_platform=win32変更します
  • 電子をインストールnpm install electron
  • 環境変数の設定を解除しますunset npm_config_platform

これsysctl kernel.unprivileged_userns_clone=1示唆しています

この問題は、WSL(Windows 10)、Ubuntu18.04がWSLにインストールされている場合に発生します。
sudo sysctl kernel.unprivileged_userns_clone=1は機能しません。

sudo sysctl kernel.unprivileged_userns_clone=1
sysctl: cannot stat /proc/sys/kernel/unprivileged_userns_clone: No such file or directory

chownとchmodの使用もオプションではありません。

@MarshallOfSound zipはパーミッションをサポートしていませんが、最終的に問題はchmodパーミッションではなく、所有者にあります。 setuidサンドボックスヘルパーは、rootでのみ使用可能な関数を実行する必要があるため、suid _toroot_です。 最初にroot権限を取得せずに適切な権限を設定できた場合、それはLinuxの非常に深刻な脆弱性になります。 Linuxにとっては幸いですが、私たちにとっては残念なことですが、そうではありません。

zipは、UNIXベースのシステム(または少なくとも私がテストしたLinuxのバリアント)でのアクセス許可をサポートします。 https://serverfault.com/a/585889/17620を参照して

許可ビットは、zipの中央ディレクトリのファイルヘッダーサフィックスに保存されます。 サフィックスのexternalFileAttributesフィールドは、各ファイル/ディレクトリエントリのアクセス許可ビットを格納するために使用できます。

cc @MarshallOfSound

私も同じ問題を抱えてる !

[gxz<strong i="6">@localhost</strong> build]$ ./Electron-0.1.1.AppImage 
[23154:0521/155029.728314:FATAL:setuid_sandbox_host.cc(157)] 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 /tmp/.mount-E0wZecV/chrome-sandbox is owned by root and has mode 4755.
Trace/breakpoint trap(吐核)
[gxz<strong i="7">@localhost</strong> build]$ sudo ./Electron-0.1.1.AppImage 
[sudo] gxz 的密码:
[23191:0521/155048.067790:FATAL:electron_main_delegate.cc(211)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
Trace/breakpoint trap
[gxz<strong i="8">@localhost</strong> build]$ 

通常のユーザーとして実行し、エラーが発生しました: FATAL:setuid_sandbox_host.cc(157)] rootとして実行し、エラーが発生しました: FATAL:electron_main_delegate.cc(211)]

しかし、後でスナップをインストールするときは、rootまたは通常のユーザーとして実行してください。

sudo chown root chrome-sandbox
sudo chmod 4755 chrome-sandbox

これはうまく機能します。

@cuixipingそれは動作します:+1:

やった

$ find . -name chrome-sandbox
./node_modules/electron/dist/chrome-sandbox

$ sudo chown root ./node_modules/electron/dist/chrome-sandbox

$ sudo chmod 4755 ./node_modules/electron/dist/chrome-sandbox

Deepinで電子を実行したときに同じ問題が発生し、このコードで問題を解決しました
electron . --no-sandbox

それがあなたを助けることを願っています

動作しません

@fabiospampinato適応により、すべてのLinuxパッケージタイプのサンドボックスが無効になりますが、少なくともDEBおよびPacmanパッケージはSUIDサンドボックス(おそらくコンテナーに似ていないすべてのパッケージ)でうまく機能します。SUID許可ビットchrome-sandboxに設定する必要があります関連コードを想定しています。

こんにちは@vladimiry
ここに添付したリンクにアクセスできませんでした。 あなたはそれを手伝ってもらえますか?
さらに、electron-builderアフターパックスクリプトで--no-sandboxを実行する方法を理解できましたか?

ありがとう

@ tushar-compro、ここではhttps://github.com/vladimiry/ElectronMail/tree/704865abe5187bbf3e9f15ba5a83612f249f8118/scripts/electron-builder/hooks/afterPackです。 基本的に、一部のパッケージタイプのアフターパックスクリプトで4755ビットを設定し、それでもappimage + snapパッケージを再パックします。 実際、electron-builderはすでに--no-sandbox argをsnapに埋め込んでいますが、appimagehttps 方法を購入してください、最近のelectron-builderはすでに4755ビットを設定していますhttps://github.com/electron-userland/electron-builder/blob/fc85a42a26df863b5bade4b769182b299ff24e0a/packages/app-builder-lib/templates/linux/after-install.tpl #L7。 したがって、最近のエレクトロンビルダーバージョンは、ほとんどの開発者にとって物事を単純化するはずです。

@vladimiry
あなたはappimage以外のターゲットのための4755ビットをセットし、スナップしていることを理解するうえでアムI権。
https://github.com/vladimiry/ElectronMail/blob/704865abe5187bbf3e9f15ba5a83612f249f8118/scripts/electron-builder/hooks/afterPack/index.ts#L17

しかし、debianディストリビューションで.appimageインストーラーを使用しているときに問題が発生しています。

ここで何かが足りませんか?

しかし、debianディストリビューションで.appimageインストーラーを使用しているときに問題が発生しています。

私が言ったように、appimageはまだ特別な扱いを必要とします。 再パッケージして、 --no-sandbox./AppRunスクリプトに埋め込みます。 ここでDISABLE_SANDBOX_ARGS_LINEキーワードを見つけますhttps://github.com/vladimiry/ElectronMail/blob/704865abe5187bbf3e9f15ba5a83612f249f8118/scripts/electron-builder/build-appimage.ts。

しかし、debianディストリビューションで.appimageインストーラーを使用しているときに問題が発生しています。

私が言ったように、appimageはまだ特別な扱いを必要とします。 再パッケージして、 --no-sandbox./AppRunスクリプトに埋め込みます。 ここでDISABLE_SANDBOX_ARGS_LINEキーワードを見つけますhttps://github.com/vladimiry/ElectronMail/blob/704865abe5187bbf3e9f15ba5a83612f249f8118/scripts/electron-builder/build-appimage.ts。

最新のエレクトロンビルダーは、snapとappimageの両方でnosanbox引数を自動的に処理します。

@vladimiry
ですから、あなたが行った4755ビット設定はappimageとsnap以外のインストーラー用であることを理解するのは正しいですか。 また、appimageには、サンドボックスなしを設定しました。 確認していただけますか。

@ p3x-ロボット
はい。 あなたは部分的に正しいです。

  1. 最新のelectron-builderは、スナップ用にサンドボックスを設定していませんが、appimage用には設定してい
  2. 私のプロジェクトでは、electron-version 20.xxを使用しています。22.xxに更新すること自体が、努力になります。 可能であればそれを避けようとしているだけです。 v22へのアップデートは最後の手段になります。

最新のエレクトロンビルダーは、snapとappimageの両方でnosanbox引数を自動的に処理します。

まだappimage固有のに似スニペット自分のコードでは見つかりませんでした。この1(https://github.com/electron-userland/electron-builder/pull/4496まだオープン)スナップのために適用されます。 とにかく、私の場合、sanbox関連以外の追加の引数をそこに置いたので、再パッキングがまだ必要です。

ですから、あなたが行った4755ビット設定はappimageとsnap以外のインストーラー用であることを理解するのは正しいですか。 また、appimageには、サンドボックスなしを設定しました。 確認していただけますか。

正しい。 しかし、現代の電子ビルダーは内部で4755を設定します。 間違いなので、snap / appimageに設定されていないことを確認します。 たとえば、私が物事を正しく覚えていれば、スナップは4755ビットが電子バイナリに設定された状態で開始されません。

@vladimiry
私のappimagesはdebianで動作していないので、サンドボックスなしを設定する必要があります。

この場合、再梱包する必要はないと思います。 しかし、それを行うための電子ビルダーの適切なドキュメントを見つけることができませんでした。 それとも、私も再梱包する必要があると思いますか?

それを行う方法を教えてくれる正しいドキュメントを教えていただけますか。

さらに、4755ビットを設定するかサンドボックスを設定しないかの両方のオプションがあることを理解しています。
どちらが良いと思いますか?

さらに、4755ビットを設定するかサンドボックスを設定しないかの両方のオプションがあることを理解しています。

私が物事を正しく覚えていれば、appimageに4755を設定しても問題は解決しません。 次のことを行う必要があります:

  • --no-sandboxコマンドライン引数でappimageファイルを開始します
  • appimageファイルにある./AppRunスクリプトに--no-sandbox埋め込みます(したがって、再パッケージ化が必要です)。

それを行う方法を教えてくれる正しいドキュメントを教えていただけますか。

この問題に関する詳細情報がドキュメントに記載されているとは思えません。 関連するドキュメントを知りません。

さらに、4755ビットを設定するかサンドボックスを設定しないかの両方のオプションがあることを理解しています。

私が物事を正しく覚えていれば、appimageに4755を設定しても問題は解決しません。 次のことを行う必要があります:

  • --no-sandboxコマンドライン引数で開始します
  • appiamgeファイルにある./AppRunスクリプトに--no-sandbox埋め込みます(したがって、再パッケージ化が必要です)。

それを行う方法を教えてくれる正しいドキュメントを教えていただけますか。

この問題に関する詳細情報がドキュメントに記載されているとは思えません。 関連するドキュメントを知りません。

最近のelectronbuilderは--no-sandbox./AppRunに埋め込んでいます。以前は再パッケージしていましたが、今では役に立たないので、ネイティブのelectronBuilderを使用しています。

@vladimiry
はい。 4755の設定だけでは機能しません。 4755では、chrome-sandboxの所有者をrootに変更する必要があります。
とにかく、あなたの助けに感謝します。 次に、コードを参照して、サンドボックスなしを設定しようとします。

@ p3x-ロボット
これを実行しているコードを確認できるリンク(electron-builderリポジトリ)を共有してください。

https://github.com/patrikx3/onenote

@vladimiry
はい。 4755の設定だけでは機能しません。 4755では、chrome-sandboxの所有者をrootに変更する必要があります。
とにかく、あなたの助けに感謝します。 次に、コードを参照して、サンドボックスなしを設定しようとします。

@ p3x-ロボット
これを実行しているコードを確認できるリンク(electron-builderリポジトリ)を共有してください。

https://github.com/patrikx3/onenote

最近のelectronbuilderは./AppRunに--no-sandboxを埋め込んでいます。以前は再パッケージしていましたが、今では役に立たないので、ネイティブのelectronBuilderを使用しています。

最近のelectronBuilderバージョンを使用してテストしたところ、。/ AppRunshスクリプトに--no-sandboxが埋め込まれていません。 appimageを起動すると、既知の[759164:1013/160044.572604:FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox helper binary was foundようなエラーで失敗します。 システムでkernel.unprivileged_userns_cloneフラグが有効になっている可能性があります。 その場合は、 sudo sysctl kernel.unprivileged_userns_clone=0ように無効にして、appimageファイルを再起動してみてください。

最近のelectronbuilderは./AppRunに--no-sandboxを埋め込んでいます。以前は再パッケージしていましたが、今では役に立たないので、ネイティブのelectronBuilderを使用しています。

最近のelectronBuilderバージョンを使用してテストしたところ、。/ AppRunshスクリプトに--no-sandboxが埋め込まれていません。 appimageを起動すると、既知の[759164:1013/160044.572604:FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox helper binary was foundようなエラーで失敗します。 システムでkernel.unprivileged_userns_cloneフラグが有効になっている可能性があります。 その場合は、 sudo sysctl kernel.unprivileged_userns_clone=0ように無効にして、appimageファイルを再起動してみてください。

奇妙なことに、最新のエレクトロンビルダーを使用した10kのスナップインストールがあります。 そして間違いなく、電子ビルダーはそれがそのフラグを追加することを示しています...

10kスナップがあります

私たちは、スナップのことではなく、appimageについて話している。 もちろん、Snapには上記で参照したように引数が埋め込まれています。https://github.com/electron-userland/electron-builder/blob/df5d050e47f2030e48e65c0e3b542c3aec61e9de/packages/app-builder-lib/src/targets/snap.ts#L197 -L202。

10kスナップがあります

私たちは、スナップのことではなく、appimageについて話している。 もちろん、Snapには上記で参照したように引数が埋め込まれています。https://github.com/electron-userland/electron-builder/blob/df5d050e47f2030e48e65c0e3b542c3aec61e9de/packages/app-builder-lib/src/targets/snap.ts#L197 -L202。

あなたが正しいです。 なんらかの理由でappimageで行われると考えていました。再パッケージ化のコードを削除し、サンドボックスなしを追加しましたが、もう一度試してみたところ、見つからないので、ビルドの復帰を追加しました。動作します。 申し訳ありませんが、私のcorifeus-builderで、私が何をしているかを確認できます: https

こんにちは@nornagonは、この問題がどれほど一般的であるかを考慮して、公式のエレクトロンクイックスタートチュートリアルを更新して回避策を含めることができるので、初心者は前向きな経験をすることができますか?

編集:コミュニティの励ましのおかげで、私はFR#26478を開きました

@gabefairそれは合理的な提案のようです。 PRを開くことに興味がありますか?

このページは役に立ちましたか?
0 / 5 - 0 評価