rug*_*ugk 5 password firefox password-store keepassx flatpak
如果 KeePassXC在 Flatpak 中被沙盒化,浏览器只能访问它,如果它们没有被沙盒化,即作为 deb/rpm 包或类似的安装在主机上。对浏览器,即Firefox和 KeePassXC 进行沙盒处理——或者至少是浏览器并本地安装 KeePassXC,出于安全原因,您实际上想要这样做——是不可能的。
特尔;博士:
那么如何使这种沟通有效呢?
如果您只想要解决方案,则可以跳过此部分。但出于好奇,我将解释我们面临的问题:
$XDG_RUNTIME_DIR/kpxc_server
为应用程序创建了一个 UNIX 套接字来监听。keepassxc-proxy
启动-通过本地消息-由浏览器(由附加触发keepassxc-browser@keepassxc.org
和尝试,即KeePassXC浏览器的)听套接字上找到的消息。flatpak run
,即 Firefox 现在可以运行所以我们可以通过制作包装脚本并使用 flatpak-spawn让 Firefox 逃离它的沙箱来解决这个问题。然而,看到 Firefox 沙箱已经构建的多么可爱和安全,我不敢破坏这样一个功能的安全性。毕竟,从安全 POV 中,您也可以再次在主机上安装 Firefox。好消息:这个解决方案保留了所有沙箱和安全方面!
然而,即使我们已经解决了 Firefox 必须运行代理的事实,还有更多的问题。剧透一下,以下是我们需要解决的要点:
v1.2
测试:Fedora 32,org.mozilla.firefox
来自 flathub 的 v75,org.keepassxc.KeePassXC
来自 flathub 的 v2.5.4
keepassxc-proxy
一个二进制文件,因为我们想让它在 Firefox flatpak 中运行。对我们有好处:它没有太多的依赖,并且可以作为一个独立的应用程序使用。
cargo build --release
)。./target/release
。的keepassxc-proxy
二进制版本211ae91
,与rustc 1.43.0编译(目前稳定的Fedora 32),用于x86_64的(如果它可以帮助你想知道更多的是.rustc_info.json
)。尽管Rust 还没有(还)完全可重复地编译,但我确实在两台装有 Fedora 32 的机器上得到了相同的逐位结果。 SHA-256 哈希是c5c4c6c011a4d64f7e4dd6c444dcc70bee74d23ffb28c9b65f7ff6d89a8f86ea
. 因此,如果您处于危险情绪中,可以在此处下载我的 keepassxc-proxy 二进制文件。(由 GitHub 托管;P)~/.var/app/org.mozilla.firefox/.mozilla/native-messaging-hosts
。实际上,native-messaging-hosts
可能性尚不存在,因此请创建它。org.keepassxc.keepassxc_browser.json
在其中创建一个文件,然后粘贴以下内容:
{
"allowed_extensions": [
"keepassxc-browser@keepassxc.org"
],
"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"
}
Run Code Online (Sandbox Code Playgroud)
请注意,只有绝对路径有效(我猜),因此请替换REPLACE_WITH_USERNAME
为您的$USER
姓名,以便路径指向它自己的工作目录。keepassxc-proxy
放在同一个 dir 中。显然,您可以在那里使用任何其他路径,但这是 Firefox 显然可以访问的第一个路径,并且您将所有内容都集中在一个地方。(如果您有更好的建议,请随时告诉我。)chmod +x
如果不是,请记住使其可执行 ( )。默认情况下,KeePassXC 在$XDG_RUNTIME_DIR/kpxc_server
. 所以这就是我们需要给 Firefox flatpak 访问权限(只读显然就足够了)。
幸运的是,这很容易。赶紧跑:
$ sudo flatpak override --filesystem=xdg-run/kpxc_server:ro org.mozilla.firefox
Run Code Online (Sandbox Code Playgroud)
万岁!:对于那些在主机上安装 KeePassXC (没有任何沙箱/flatpak)的人来说,这就足够了。启动 KeePassXC,然后启动Firefox,它应该能够连接。:tada: 不过,请注意底部的“现有问题”部分。
如果您还想在 flatpak 中运行 KeePassXC,请继续。
注意:如果您不想了解技术背景,请再次跳到下面的要点(第 1 点)。
来自 Flathub 的 flatpaked KeePassXC 在 flatpaks 应该这样做的位置创建它的 Unix 套接字,在$XDG_RUNTIME_DIR/app/org.keepassxc.KeePassXC/kpxc_server
. (如果它$XDG_RUNTIME_DIR
像“原生”KeePassXC 一样直接使用,它只会存在于沙箱中。)
正如我们所知,通常的 keepassxc-proxy 期望文件位于$XDG_RUNTIME_DIR/kpxc_server
. 为了解决这个问题,我们只需创建一个符号链接。正如您可以验证的那样,这实际上解决了我们的问题。出于一些非常奇怪的原因,Flatpak 沙箱现在允许 Firefox(以及所有其他 flatpak!仅供参考,请注意。)查看该 UNIX 套接字文件。稍后会证明,当您将该符号链接移动到其他任何地方时,这不起作用(即使另一个文件名已经阻止它工作 - 我已经尝试了很多东西。)。
但是,$XDG_RUNTIME_DIR
通常在关机时删除。所以我们需要在启动/用户登录时重新创建它。对我们有好处,已经是一个工具。(当然,您也可以在自动启动中修改 shell 脚本,但这很丑陋。)这就是我们使用systemd-tmpfiles 的原因。(tmpfiles.d的手册页实际上对我们更有用。)
~/.local/share/user-tmpfiles.d
。同样,该user-tmpfiles.d
目录很可能还不存在。如果是这样......好吧......你知道该怎么做......systemd-tmpfiles
它说它为用户创建符号链接。systemd-tmpfiles
可以应用更改并创建配置文件。(或者,您也可以手动运行systemd-tmpfiles --user --create
以应用更改。)万岁!:然后启动 KeePassXC flatpak,然后启动Firefox,它应该能够连接。:tada:
请注意下面的“现有问题”部分。
$XDG_RUNTIME_DIR/kpxc_server
文件。实际上,这会导致一个很大的缺点:您总是需要在Firefox之前启动KeePassXC。flatpak run org.keepassxc.KeePassXC
)来连接它的常用方法可能无法正常工作。再次删除符号链接以使其工作。about:debugging
访问附加组件内部。keepassxc-browser@keepassxc.org
是附加 ID。它实际上还记录了失败的尝试。请注意,当它无法启动代理时和它可以启动代理时有不同的结果(日志和可见),但没有连接成功(因为 UNIX 套接字不存在,例如)flatpak run --command=/bin/sh org.mozilla.firefox
.cat
,您将看到一个奇怪的错误,cat
无法找到资源事情做不工作: 保存作未来的解决方案,更好的解决办法™。
$XDG_RUNTIME_DIR/app
都是高度沙盒化的,即使使用 flatpak 覆盖,我也无法让 Firefox flatpak 读取../org.keepassxc.KeePassXC
目录的内容。即使在它自己的目录中有疯狂的符号链接。(尽管尝试一下,也许你会成功!至少你会学到一些东西。:wink:.)这花了相当长的时间才弄明白。
我确实尝试继续改进此解决方法并在此 GitHub 问题中找到解决方案。如果您有兴趣,最好关注那里。
我在 Fedora 社区和Flathub 论坛中交叉发布了这个问题和答案。
归档时间: |
|
查看次数: |
590 次 |
最近记录: |