web-dev-qa-db-ja.com

FirefoxとKeePassXCをフラットパックでセットアップし、KeePassXC-Browserアドオンを機能させる方法は?

KeePassXCがサンドボックス化されている場合 フラットパック内 、サンドボックス化されている場合、つまりdebとしてインストールされている場合のみ、ブラウザーはそれにアクセスできます。/rpmパッケージまたはホスト上の同様のもの。ブラウザー、つまり Firefox とKeePassXCの両方のサンドボックス化、または少なくともブラウザーと、セキュリティ上の理由で実際に必要なKeePassXCのネイティブインストールは不可能です。

TL; DR:

  • これはそのまま使用できます:Firefox(ホストインストール)、KeePassXC(flathubのflatpak)
  • これは関係ありません:Firefox(サンドボックス)、KeePassXC(ホストまたはサンドボックス、問題ではありません)

それでは、そのコミュニケーションを機能させる方法は?

4
rugk

バックグラウンド

ソリューションだけが必要な場合は、この部分をスキップできます。しかし、好奇心旺盛な方のために、私たちが直面する問題について説明します。

  • KeePassXCは$XDG_RUNTIME_DIR/kpxc_serverにアプリケーションがリッスンするためのUNIXソケットも作成します。 keepassxc-proxyが開始されます– ネイティブメッセージング を介してブラウザーによって(アドオンによってトリガーされます[email protected]、つまりKeePassXC-ブラウザ)、そのソケットをリッスンしてメッセージを検索しようとします。
  • Firefoxがサンドボックス化されていない場合、そのプロキシは通常どおり起動できます。それがおそらく必要とする唯一のものは、KeePassXCフラットパックに入ることです。
  • Flathub KeePassXC パッチがあります これにより、keepassxc-proxyをflatpak run経由で開始できます。つまり、Firefoxで
  • これが、これまでのところ、ホストにインストールされたFirefoxが機能する理由です…
  • Firefoxがフラットパックとしてインストールされている場合に機能しない理由:非常に優れた公式 Firefox flatpak by Mozilla には、ブラウザとしての権限がほとんどありません。例えば。ファイルシステムへの一般的なアクセス権はありません( ポータル を使用します)。とにかく、それが何をするにしても、それは1つのことを行うことはできません: ホストまたは別のフラットパックでプロセスを起動します

そのため、ラッパースクリプトを作成して flatpak-spawn を作成し、Firefoxがサンドボックスをエスケープするようにすることで、問題を解決できます。しかし、Firefoxのサンドボックスが既にどれほど美しく安全なものであるかを見て、そのような機能のセキュリティをあえて破壊することはしません。結局のところ、セキュリティPOVから、Firefoxをホストにインストールすることもできますが、それでもなおです。嬉しいお知らせ:このソリューションは、すべてのサンドボックスとセキュリティの側面を保持します!

ただし、Firefoxでプロキシを実行する必要があるという事実を解決したとしても、さらに問題があります。ネタバレするために、これは私たちが解決する必要がある主要なポイントです:

  1. Firefoxによるkeepassxc-proxyの開始(解決策:Firefoxサンドボックス内で実行)
  2. FirefoxがKeePassXCのソケットにアクセスすることを許可する注:このステップでは、バリエーションを実行できます:Firefox(サンドボックス)、KeePassXC(ホストインストール)
  3. UNUXソケットをKeePassXCフラットパックからフラットパック外の他のアプリケーションに公開します。 (解決策:シンボリックリンク)

現在の回避策

v1.1

テスト済み:Fedora 32、フラットハブのorg.mozilla.firefox v75、フラットハブのorg.keepassxc.KeePassXC v2.5.4

Firefoxによるkeepassxc-proxyの起動

  1. まず最悪のこと:keepassxc-proxyをFirefoxのフラットパック内で実行したいので、バイナリとしてcargo build --releaseが必要です。私たちにとっては良いことです。依存性はそれほど多くなく、スタンドアロンアプリケーションとして利用できます。
    1. それで、私は Rustプロキシアプリケーション を選択しました(なぜ私がすべきでないのですか?????)。あなたが私を信頼しているなら、あなたは私のコンパイルされたバイナリを以下で得ることができます、先の2つのステップにスキップしてください。
    2. Gitリポジトリのクローンを作成してコンパイルします(./target/releaseを実行)。
    3. 結果はkeepassxc-proxyにあります。 211ae91バイナリ、バージョン .rustc_info.json 、x86_64用のrustc 1.43.0(Fedora 32の現在の安定版)でコンパイル(そして、それが役立ち、詳細を知りたい場合- そのc5c4c6c011a4d64f7e4dd6c444dcc70bee74d23ffb28c9b65f7ff6d89a8f86ea )。そしてaltghough Rustは(まだ)完全に再現可能なコンパイルではありません Fedora 32を搭載した2台のマシンで同じビットごとの結果を得ました。SHA-256ハッシュは~/.var/app/org.mozilla.firefox/.mozilla/native-messaging-hostsです。したがって、危険な気分になっている場合は、ここに私のkeepassxc-proxyバイナリをダウンロードしてくださいができます。 ( GitHubによってホストされている; P
  2. 次に、新しいバイナリについてFirefoxに通知する必要があります。
    1. native-messaging-hostsにアクセスします。実際、org.keepassxc.keepassxc_browser.jsonはまだ存在していない可能性があるため、作成してください。
    2. そこにファイル{ "allowed_extensions": [ "[email protected]" ], "description": "KeePassXC integration with native messaging support, workaround for flatpaked Firefox, see https://is.Gd/flatpakFirefoxKPXC", "name": "org.keepassxc.keepassxc_browser", "path": "/home/REPLACE_WITH_USERNAME/.var/app/org.mozilla.firefox/.mozilla/native-messaging-hosts/keepassxc-proxy", "type": "stdio" } を作成し、次の内容を貼り付けます:
      REPLACE_WITH_USERNAME
      絶対パスのみが機能することに注意してください(そうでしょう)、$USERkeepassxc-proxyの名前に置き換えて、パスが独自の機能ディレクトリにつながるようにします。
    3. 私が何をしているのかがわかります:ダウンロード/コンパイルしたchmod +xを同じdirに配置します。もちろん、他のパスを使用することもできますが、これは明らかにFirefoxからアクセスできる最初のパスであり、すべてが1か所にあります。 (より良い提案がある場合は、遠慮なくお知らせください。)注:実行可能でない場合は、実行可能にすることを忘れないでください($XDG_RUNTIME_DIR/kpxc_server)。

Firefoxがソケットにアクセスできるようにする

KeePassXCは、デフォルトで$ Sudo flatpak override --filesystem=xdg-run/kpxc_server:ro org.mozilla.firefox にソケットを作成します。これが、Firefox flatpakにアクセス権を与えるために必要なものです(読み取り専用で十分です)。

幸い、これは簡単です。とにかく走れ:

$XDG_RUNTIME_DIR/app/org.keepassxc.KeePassXC/kpxc_server

Hooray!:ホストにKeePassXCをインストールする人(なしサンドボックス/フラットパック)、これで十分です。 KeePassXCを起動し、Firefoxを、次に起動すると、接続できるはずです。 :tada:ただし、下部にある「既存の問題」セクションに注意してください。

フラットパックでKeePassXCも実行する場合は、続行します。

KeePassXCフラットパックからのUNIXソケットの公開

注:技術的な背景がわからない場合は、以下の箇条書き(ポイント1)にスキップしてください。

FlathubからフラットパックされたKeePassXCは、Unixソケットを$XDG_RUNTIME_DIRに、flatpaksが行うべき場所に作成します。 (「ネイティブ」のKeePassXCのように$XDG_RUNTIME_DIR/kpxc_serverを直接使用する場合、サンドボックスにのみ存在します。)

ご存知のように、通常のkeepassxc-proxyは$XDG_RUNTIME_DIRのファイルを想定しています。これを解決するには、シンボリックリンクを作成するだけです。確認できるように、これで実際に問題が解決されます。非常に奇妙な理由により、Flatpakサンドボックスにより、Firefox(および他のすべてのフラットパック!に注意してください)がUNIXソケットファイルを参照できるようになりました。後で判明するはずですが、このシンボリックリンクを他の場所に移動しても、これは機能しません(別のファイル名を指定しても、機能しなくなります。さまざまなことを試しました)。

ただし、~/.local/share/user-tmpfiles.dは通常、シャットダウン時に削除されます。したがって、起動時またはユーザーログイン時に再作成する必要があります。私たちにとっては良いことですが、すでにそのためのツールです。 (もちろん、自動起動でシェルスクリプトでマングルすることもできますが、これは醜い方法です。)そのため、 systemd-tmpfiles を使用しています。 (実際には tmpfiles.d のmanページのほうが便利です。)

  1. user-tmpfiles.dにアクセスします。繰り返しますが、systemd-tmpfilesディレクトリがまだ存在していない可能性が高くなります。もしそうなら...まあ...あなたは何をすべきか知っています...
  2. 次の設定ファイルをダウンロードしてそこに配置します:kpxc_server.confこれは基本的に_ [SOMECODE]の設定ファイルです_これは、ユーザーのシンボリックリンクを作成することを示しています。
  3. 再起動すると、systemd-tmpfilesが変更を適用して構成ファイルを作成できるようになります。

Hooray!:その後、KeePassXC flatpakを起動し、その後Firefoxに接続すると、接続できるはずです。 :tada:

以下の「既存の問題」セクションに注意してください。

既存の問題

  • Firefoxは、何らかの理由で$XDG_RUNTIME_DIR/kpxc_serverファイルを表示できません。ifファイル(それぞれのシンボリックリンクターゲット)がまだ存在しません。実際には、これは1つの大きな欠点になります:あなたは常にする必要があります開始KeePassXCbeforeFirefox
  • さらに奇妙な理由により、この回避策の設定がある場合、フラットパックされていないネイティブFirefoxを実行し、フラットパック内にプロキシを生成して接続する通常の方法(flatpak run org.keepassxc.KeePassXCなど)は機能しない可能性があります。これを機能させるには、シンボリックリンクを再度削除してください。

デバッグのヒント

  • Firefoxでは、about:debuggingを使用してアドオンの内部にアクセスします。 [email protected]はアドオンIDです。失敗した試行も実際に記録します。プロキシを開始できない場合とプロキシを開始できる場合では結果が異なります(ログと目に見える)が、接続が成功しなかった場合(UNIXソケットがそこにないためなど)に注意してください。
  • フラットパックに手動でアクセスし、シェルでアクセス/ルックアップを「確認」するには、flatpak run --command=/bin/sh org.mozilla.firefoxのようなものを使用します。
  • ソケットファイルがアクセス可能かどうかを確認するには(シンボリックリンクが存在しないファイルを指している可能性があります)catそれだけで、catがリソースを見つけられないという奇妙なエラーが表示されます

私が試したこと

機能するもの機能しない機能:将来のソリューションおよびより良い™回避策のために保持されます。

  • $XDG_RUNTIME_DIR/app内のすべてのものは高度にサンドボックス化されています。フラットパックのオーバーライドを使用しても、Firefoxフラットパックに../org.keepassxc.KeePassXCディレクトリのコンテンツを読み取れませんでした。クレイジーなシンボリックリンクがあっても、それはそれ自身のディレクトリです。 (試してみてください、おそらくあなたはそれを作るでしょう!少なくともあなたは何かを学びます。:wink :.)
  • ただし、動作するものは次のとおりです。KeePassXCフラットパックをオーバーライドして、Mozillaにアクセスできます。 writeアクセスのみが可能です!したがって、プロキシをそこに配置する場合(ここでも、シンボリックリンクは機能しません!)、Firefoxもそれを読み取ることができます。
  • シンボリックリンクは、サンドボックス外のアプリケーションで作成する必要があります。その内部には、再びサンドボックス化されており、1つだけが内部で表示されています。

最終メモ

それを理解するにはかなりの時間がかかりました。

私はこの回避策の改善を続け、 このGitHubの問題 で解決策を見つけようとします。興味があれば、フォローするのが一番です。


私はこの質問と回答に Fedoraコミュニティ および Flathubフォーラム をクロスポストしました。

5
rugk