実行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
ファイルをchown
とchmod
の場合は正常に機能しますが、私の直感では、これらのコマンドがなくてもnpm install electron@latest
は機能するはずです。 これは予想される動作ですか?
残念ながら、これを自動的に正しく構成する方法はありません。適切な権限を設定するには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にとっては幸いですが、私たちにとっては残念なことですが、そうではありません。
私が見たオプションは次のとおりです。
私は(2)に傾いています。 デプロイされたアプリのセキュリティを損なうことなく、開発が容易になります。
私は彼らの働きに精通していないので、私はまだスナップ/フラットパックについて何をすべきかわかりません。 Mac App StoreバージョンのElectronをビルドするときのように、その状況でサンドボックスを完全に無効にできるように、アプリをすでに十分にサンドボックス化している可能性があります。
今のところ、私は最初のオプションがもっと好きです。
- パッケージ化されていないアプリを起動するときにのみサンドボックス方式を使用できない場合は、サンドボックスなしで起動します。 Electronがパッケージ化されたアプリを起動している場合は、サンドボックスなしで起動することを拒否します。
そのようなシナリオは、どういうわけか誤解を招くでしょう。 サンドボックス化せずにパッケージ化されていないアプリを正常に実行している可能性がありますが、パッケージ化されたアプリがサンドボックス化を有効にした場合と同じように機能しない可能性があります。 たとえば、 remote
インターフェイスを介さずにレンダラープロセスからメインプロセスにアクセスする場合のように。 または、アプリをAppImage / Snap / Flatpakパッケージにラップする場合。
- いずれの場合も、サンドボックス化の方法が利用できない場合は、サンドボックス化せずに起動し、警告を出力します。
したがって、サンドボックスとして設計および開発されたパッケージ化されたアプリは、サンドボックスが利用できない場合、サンドボックスなしで実行される可能性があります。 これは私にはよく聞こえません。
- 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にロールバックするのは嫌だ🤨
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'
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
が次のようになるかどうか、私はもっと心配しています。
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
その修正は、 --privileged
をdocker 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ええ、私のラップトップにはすでにそのユーザー設定があります。
@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が正しく機能していないため、これはバグです。
@ 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$
私はこれを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
を使用している場合は、次のように追加します。
皆さんのために、それを機能させたいのであれば、私はヘルパーを作成しました:
このような解決策は、この問題の議論ですでに何度も言及されています。これが、electronv5が機能する前に私が書いた理由です。
@vladimiryありがとう、私はこの解決策を逃しました、私はtypescriptの代わりにjavascriptネイティブ解決策を追加しました...
唯一の問題は、パックハック後にこれを行うと、パネル上で電子からのアイコンが使用されないことですが、2番目のアイコンが生成されます。どうすれば解決できますか? サンドボックスなしのフラグがそれを行うのだと思います。 誰でも?
--no-sandbox
でのみ発生します:
@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でデフォルトで
したがって、この提案に関して:
- 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を使用しています。
状況は次のとおりです。
CLONE_NEWUSER
と呼ばれるOS機能を使用します。 一部のカーネルは、十分な注意を払って特権ユーザーに制限されたこの機能で構築されています。 詳細については、こちらをご覧ください[lwn、2016]。CLONE_NEWUSER
が利用できない場合、Chromiumは、rootにsetuidされたヘルパーバイナリを必要とする別のサンドボックスメカニズムの使用にフォールバックします。 このバイナリが存在しないか、適切な権限( 4755
_およびrootが所有_)を持っていない場合、サンドボックスは起動に失敗します。npm install
間にルートアクセスを要求したくないため、これらのアクセス許可をnpm install
に設定しません。2つの回避策があります。
CLONE_NEWUSER
への非特権アクセスを有効にします。 一部のカーネルは、これをsysctl kernel.unprivileged_userns_clone=1
変更することをサポートしています。--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
はこれをサポートしていないため、フックを追加して自分で行う必要がありました。
ありがとう。 それは本当に脅威モデルに依存しており、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
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-ロボット
はい。 あなたは部分的に正しいです。
最新のエレクトロンビルダーは、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ファイルを開始します./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リポジトリ)を共有してください。
最近の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を開くことに興味がありますか?
最も参考になるコメント
CONFIG_USER_NS=y
はユーザー名前空間機能を有効にしますが、デフォルトでは特権ユーザーに制限されています。 これはsysctl kernel.unprivileged_userns_clone=1
示唆しています