如何通过 firejail 运行本地应用程序?

如何通过 firejail 运行本地应用程序?

我已经在本地安装了 debian 软件包。我随机选择了 Opera,通过 提取dkpg -x opera-x.y.z.deb ~/bin/opera_package,并在我的用户~/bin文件夹(位于用户路径中)中创建了一个符号链接。

尝试在侧面消防监狱中奔跑

$ firejail opera

Reading profile /etc/firejail/opera.profile
Reading profile /etc/firejail/disable-mgmt.inc
Reading profile /etc/firejail/disable-secret.inc
Reading profile /etc/firejail/disable-common.inc
Reading profile /etc/firejail/disable-devel.inc
Reading profile /etc/firejail/whitelist-common.inc
Parent pid 14762, child pid 14763

Child process initialized
/bin/bash: opera: command not found

parent is shutting down, bye...

如果我尝试使用绝对路径(从我的主文件夹)运行:

$ firejail /bin/local_packages/opera/usr/lib/x86_64-linux-gnu/opera/opera
Reading profile /etc/firejail/opera.profile
Reading profile /etc/firejail/disable-common.inc
Reading profile /etc/firejail/disable-programs.inc
Reading profile /etc/firejail/disable-devel.inc
Reading profile /etc/firejail/whitelist-common.inc
Parent pid 15796, child pid 15797
Child process initialized
/bin/bash: /bin/local_packages/opera/usr/lib/x86_64-linux-gnu/opera/opera: No such file or directory

Parent is shutting down, bye...

浏览器 GUI 永远不会启动,并且 CLI 会报告进程 DOA。我假设我需要调整disable-common.inc

# grep -Rin 'bin' .
./disable-common.inc:125:# The user ~/bin directory can override commands such as ls
./disable-common.inc:126:read-only ${HOME}/bin

我的问题:

  • 如何通过 firejail 运行本地应用程序?
  • 是否有本地应用程序的配置文件?
  • 我需要编辑disable-common.profile吗?
  • 是否有允许文件夹的 CL 选项?
  • 我是否只需选择一个与 不同的文件夹~/bin/

我的目标:

我想...

  1. 编译后从 github.com 克隆的沙箱应用程序
  2. 将源代码和二进制文件都保存在我的用户文件夹中
  3. 任何时候都不需要sudo(安装之外firejail

答案1

Firejail 当然应该能够开箱即用地做到这一点,我自己就是这样使用的。尝试运行firejail bash并检查是否看到有问题的可执行文件。此外,opera可能是一个 shell 脚本,用于设置环境并运行另一个二进制文件,该二进制文件被firejail.

答案2

为 firejail 提供的文档可用这里。不幸的是,它不是很全面,更像是用户指南。

L29Ah的回答为我提供了足够的信息来弄清楚如何做到这一点,但不幸的是,答案没有提供有用的示例和更多信息。因此,我将尝试回答所有问题并展示一些真正的方法来做到这一点。

  • 是否有本地应用程序的配置文件?从看在源代码中,firejail 从命令行中的第一个参数中提取命令名称,您告诉它按以下方式运行:首先,它在找到的第一个空白字符处截断该参数的字符串值,然后删除所有前导目录组件在路径中。因此,命令 'firejail /home/me/various/"commandName commandNameSecondWord" ' 将搜索名为“commandName.profile”的配置文件。对于从 $HOME 下运行的程序与 /usr/bin 等系统目录下运行的程序没有特殊处理。还可以通过在命令行上使用一个或多个“--profile=...”选项来绕过所有这些。
  • 我需要编辑disable-common.profile吗?不。首先,我不建议编辑此文件,因为它包含在其他 firejail 配置文件中。其次,即使包含此文件,我运行特定的本地程序也没有问题。第三,如果该文件中的某些内容出现问题,那么您应该编写一个不包含该文件的自定义配置文件,并且如果您仍然需要其中的某些部分,只需将它们复制到您的自定义配置文件中即可。
  • 我是否只选择与 ~/bin/ 不同的文件夹?不,情况更复杂。
  • 是否有允许文件夹的 CL 选项?是的,有很多方法可以做到这一点。然而,通常情况下,您会为正在运行的特定程序编写一个配置文件,并将其放在 $HOME/.config/firejail 中。 “快速而肮脏”的命令行参数“--private-home=...”可能就足够了,它可以将顶级文件和目录复制到沙箱文件系统中。请注意,复制文件的大小限制为 500MB,复制文件会减慢沙盒应用程序的启动速度。
  • 如何通过 firejail 运行本地应用程序?这个问题有点笼统,因为每个应用程序可能需要不同的配置(这就是 firejail 提供开箱即用的整个配置文件库的全部原因),并且配置完全取决于您想要如何限制应用程序(或不)。但是,我设法通过将应用程序安装在主目录中名为 $HOME/.local_fj 的顶级目录下并在自定义命令配置文件中添加“private-home .local_fj”来运行我的应用程序(上述 500MB 限制仍然适用) 。另一种可能性可能是使用“白名单 ${HOME}/.local_fj/programInstallDir”。在任一情况下,确保任何“noexec”命令不会阻止从程序所在的目录执行程序。 (注意:我不是 firejail 的专家用户——几乎可以肯定,还有其他我不熟悉的方法可以做到这一点。)

相关内容