如何在 `bwrap` 沙盒中使用 `xdg-open` 打开未沙盒目录?
2024-03-14 02:31:30
如何在 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
选项更简单,但需要共享临时目录。符号链接是一种简单的方法,但需要手动创建符号链接。
- 答:这取决于你的特定需求。
- 问:我可以打开任何目录吗?
- 答:不,你只能打开具有适当权限的目录。
- 问:这在哪些情况下有用?
- 答:这在需要从沙盒访问主机文件系统中的文件时很有用,例如在文本编辑器中打开文件或在图像查看器中打开图像。
- 问:还有其他方法吗?
- 答:是的,还有其他方法,例如使用
fuse
或aufs
文件系统。
- 答:是的,还有其他方法,例如使用
- 问:是否存在安全风险?
- 答:存在一些安全风险,例如特权提升,因此在使用这些方法时要小心。