返回

如何在 `bwrap` 沙盒中使用 `xdg-open` 打开未沙盒目录?

Linux

如何在 bwrap 环境中使用 xdg-open 在未沙盒的文件系统中打开目录

引言

bwrap 是一种隔离工具,可用于运行应用程序,使其无法访问主文件系统。这对于提高安全性很有用,但它也会带来一些挑战,例如如何从沙盒访问主机文件系统中的文件。

问题:在 bwrap 沙盒中使用 xdg-open 打开未沙盒目录

在使用 bwrap 沙盒时,你可能希望打开一个不在沙盒内的目录。然而,默认情况下,xdg-open 将在沙盒内打开目录,这可能是你所不希望的。

解决方法

有几种方法可以在 bwrap 沙盒中使用 xdg-open 打开未沙盒目录:

方法 1:使用 --private-bind 挂载

--private-bind 挂载选项允许你在沙盒内创建私有挂载点,同时仍然可以访问主机文件系统中的文件。使用此选项,你可以将主机文件系统中的目录私有挂载到沙盒中,然后使用 xdg-open 在沙盒中打开该目录。

例如,以下命令将 /host-dir 私有挂载到沙盒中的 /sandbox-dir

$ bwrap --dev-bind / / --private-bind /host-dir:/sandbox-dir --chdir ~ ...

然后,你可以使用以下命令在沙盒中打开 /host-dir/app_files/demo 目录:

$ xdg-open /sandbox-dir/app_files/demo

方法 2:使用 --share-tmp 选项

--share-tmp 选项将沙盒的临时目录与主机文件系统中的临时目录共享。这使你可以在沙盒中使用 xdg-open 打开主机文件系统中的目录,而无需创建任何私有挂载点。

例如,以下命令将沙盒的临时目录与主机文件系统中的 /tmp 目录共享:

$ bwrap --dev-bind / / --share-tmp --chdir ~ ...

然后,你可以使用以下命令在沙盒中打开 /tmp/app_files/demo 目录:

$ xdg-open /tmp/app_files/demo

方法 3:使用符号链接

你还可以使用符号链接将沙盒中的目录链接到主机文件系统中的目录。这是一种简单的方法,可以让你在沙盒中访问主机文件系统中的目录,而无需使用 bwrap 的任何特殊选项。

例如,以下命令将 /host-dir/app_files 符号链接到沙盒中的 /sandbox-dir/app_files

$ ln -snf /host-dir/app_files /sandbox-dir/app_files

然后,你可以使用以下命令在沙盒中打开 /sandbox-dir/app_files/demo 目录:

$ xdg-open /sandbox-dir/app_files/demo

结论

有几种方法可以在 bwrap 沙盒中使用 xdg-open 打开未沙盒目录。选择最适合你的方法取决于你的具体需求。

常见问题解答

  • 问:我应该使用哪种方法?
    • 答:这取决于你的特定需求。--private-bind 选项最灵活,但也很复杂。--share-tmp 选项更简单,但需要共享临时目录。符号链接是一种简单的方法,但需要手动创建符号链接。
  • 问:我可以打开任何目录吗?
    • 答:不,你只能打开具有适当权限的目录。
  • 问:这在哪些情况下有用?
    • 答:这在需要从沙盒访问主机文件系统中的文件时很有用,例如在文本编辑器中打开文件或在图像查看器中打开图像。
  • 问:还有其他方法吗?
    • 答:是的,还有其他方法,例如使用 fuseaufs 文件系统。
  • 问:是否存在安全风险?
    • 答:存在一些安全风险,例如特权提升,因此在使用这些方法时要小心。