背景

背景

如果 KeePassXC 是沙盒的在扁平包装中,浏览器只能访问它,如果它们是不是沙盒化,即作为 deb/rpm 软件包或类似软件包安装在主机上。对浏览器进行沙箱处理,即火狐浏览器,而 KeePassXC – 或者至少是浏览器并本地安装 KeePassXC,这是出于安全原因您实际上想要的 – 是不可能的。

长话短说:

  • 这应该开箱即用:Firefox(主机安装)、KeePassXC(来自 flathub 的 flatpak)
  • 这不是:Firefox(沙盒)、KeePassXC(主机或沙盒,无关紧要)

那么如何让这种沟通发挥作用呢?

答案1

背景

如果您只想要解决方案,可以跳过这部分。但为了好奇,我将解释我们面临的问题:

  • KeePassXC 也创建了一个 UNIX 套接字供应$XDG_RUNTIME_DIR/kpxc_server用程序监听。keepassxc-proxy已开始 – 通过本地消息传递通过浏览器(由插件触发[email protected],即 KeePassXC-Browser)并尝试侦听该套接字以查找消息。
  • 如果 Firefox 未沙箱化,则该代理可以照常启动。它可能需要做的唯一一件事就是进入 KeePassXC flatpak。
  • Flathub KeePassXC有补丁允许 keepassxc-proxy 通过 启动flatpak run,即 Firefox 现在可以运行
  • 这就是到目前为止,安装在主机上的 Firefox 确实可以工作的原因……
  • 现在为什么如果 Firefox 作为 flatpak 安装就不起作用:非常好的官方Mozilla 的 Firefox Flatpak作为浏览器确实没有什么权限。例如,它没有对文件系统的任何通用访问权限(它使用门户网站)。无论如何,无论它做什么,它都不能做一件事:在主机或另一个 flatpak 中生成进程

所以我们可以通过制作包装脚本来解决这个问题使用 flatpak-spawn让 Firefox 逃脱它的沙箱。然而,看到 Firefox 沙箱已经构建得多么可爱和安全,我不敢破坏这样一个功能的安全性。毕竟,从安全角度来看,您也可以再次在主机上安装 Firefox。好消息即将到来:该解决方案保留了所有沙箱和安全方面!

然而,即使我们已经解决了 Firefox 必须运行代理的问题,但还有更多问题。剧透一下,这是我们需要解决的要点:

  1. 通过 Firefox 启动 keepassxc-proxy (解决方案:我们在 Firefox 沙箱中运行它)
  2. 允许 Firefox 访问 KeePassXC 的套接字 注意:在这一步,您已经可以运行变体:Firefox(沙盒)、KeePassXC(主机安装)
  3. 将 KeePassXC flatpak 中的 UNUX 套接字暴露给 Flatpak 之外的其他应用程序。 (解决方案:符号链接)

目前的解决方法

v1.2

测试环境:Fedora 32、org.mozilla.firefox来自 flathub 的 v75、org.keepassxc.KeePassXC来自 flathub 的 v2.5.4

通过 Firefox 启动 keepassxc-proxy

  1. 首先是最糟糕的事情:我们需要keepassxc-proxy二进制文件,因为我们希望它在 Firefox flatpak 内运行。对我们有好处:它没有太多依赖项,并且可以作为独立应用程序使用。
    1. 所以我选择了Rust 代理应用程序(因为我为什么不应该呢?

答案2

鲁克的回答是在正确的轨道上,但我不得不改变一些事情要使其在 Ubuntu 22.04 上与 keepassxc 2.7.1 配合使用:

  • 该存储库已过时,请使用https://github.com/varjolintu/keepassxc-proxy-rust反而
  • 由于主机和 flatpak 中可用的 libc 不匹配,我必须创建一个静态链接的二进制文件
  • 从 Flatpak 的角度来看,.json 文件中的路径需要是绝对路径
  • 由于更改了套接字名称,需要调整 flatpak override 命令

看我的博客文章获取详细说明。

答案3

受到 @decocijo 和 @rugk 答案的启发,这是基于 Chrome 的浏览器 (Vivaldi) 的工作示例,并且还为 Firefox 提供了更直接的方法。

Github 要点

git clone https://github.com/varjolintu/keepassxc-proxy-rust
cd keepassxc-proxy-rust

# compile
# add deps if needed
sudo dnf install gcc rustup
rustup-init
rustup target add x86_64-unknown-linux-musl
RUSTFLAGS='-C link-arg=-s' cargo build --release --target x86_64-unknown-linux-musl
cp target/x86_64-unknown-linux-musl/release/keepassxc-proxy ~/.var/app/com.vivaldi.Vivaldi/config/vivaldi/NativeMessagingHosts/

# modify flatpaks
sudo flatpak override --filesystem=xdg-run/app/org.keepassxc.KeePassXC:ro com.vivaldi.Vivaldi
sudo flatpak override --filesystem=xdg-run/org.keepassxc.KeePassXC:ro com.vivaldi.Vivaldi
sudo flatpak override --filesystem=/var/home/m8/.var/app/com.vivaldi.Vivaldi/config/vivaldi/NativeMessagingHosts org.keepassxc.KeePassXC

# modify keepassxc browser path
In the KeePassXC UI.
- Tools
  - Settings
    - Browser Integration
      - General
        - Enable Browser Integration
        - Tick Vivaldi
      - Advanced
        - Use a custom location
          - Chromium
            - ~/.var/app/com.vivaldi.Vivaldi/config/vivaldi/NativeMessagingHosts

相关内容