创建自定义配置文件以使用 firejail 运行 man

创建自定义配置文件以使用 firejail 运行 man

我正在尝试使用firejail(版本 0.9.58.2)用于我的Debian Stable计算机上的应用程序沙箱。据我了解,可以为每个应用程序创建一个自定义配置文件,但我没有成功这样做。

目前我正在尝试编写一个自定义man.profile文件,因为它听起来很容易。我将包含以下内容的文件放在我的~/.config/firejail/目录中:

noblacklist /usr/share/man/
noblacklist /usr/lib/man-db/

include whitelist-var-common.inc

seccomp
shell none

private-bin sed,less,man,groff,nroff,tbl,bash
private-dev

但是当我运行时man less,我的寻呼机仅打开一个空页面,关闭后我可以看到以下错误消息:

Reading profile /home/$USER/.config/firejail/man.profile
Reading profile /etc/firejail/whitelist-var-common.inc
Parent pid 42020, child pid 42045
7 programs installed in 10.65 ms
Child process initialized in 10.69 ms
/usr/bin/man: command exited with status 255: (cd /usr/share/man && /usr/lib/man-db/zsoelim) | (cd /usr/share/man && /usr/lib/man-db/manconv -f UTF-8:ISO-8859-1 -t ISO-8859-1//IGNORE) | (cd /usr/share/man && tbl) | (cd /usr/share/man && nroff -mandoc -rLL=189n -rLT=189n -Tutf8)

我究竟做错了什么?任何想法/指针表示赞赏!


更新(感谢@@artem-s-tashkinov):运行时strace -f -e file -o /tmp/man.log man less(第一次执行后sudo firecfg --clean)并检查输出时,/tmp/man.log我发现在调用时读取了其他几个文件man less。因此,我更新了以 和 开头的行private-binprivate-lib包括以下内容:

private-bin sed,less,man,groff,nroff,tbl,bash,terminfo,locale
private-lib /usr/lib/man-db,/usr/share/groff,/usr/share/locale,/usr/share/terminfo,/usr/share/man,/usr/lib/x86_64-linux-gnu,/lib/x86_64-linux-gnu,/usr/lib/charset.alias,/etc/ld.so.preload,/etc/ld.so.cache,/etc/manpath.config,/etc/suid-debug,/etc/terminfo,/etc/sysless,/etc/localtime

但结果仍然是否定的:man less产生以下错误:

bin/bash: error while loading shared libraries: libtinfo.so.6: cannot open shared object file: No such file or directory                                                                        
/usr/bin/man: command exited with status 127: (cd /usr/share/man && /usr/lib/man-db/zsoelim) | (cd /usr/share/man && /usr/lib/man-db/manconv -f UTF-8:ISO-8859-1 -t UTF-8//IGNORE) | (cd /usr/share/man && preconv -e UTF-8) | (cd /usr/share/man && tbl) | (cd /usr/share/man && nroff -mandoc -rLL=189n -rLT=189n -Tutf8)                                                                        

libtinfo.so.6当查找使用find /lib -name "*libtinfo*"结果的位置时/lib/x86_64-linux-gnu/,它包含在private-lib- 行中。

private-bin当消除以和开头的行时private-lib,它可以工作(但显然没有额外的沙箱)。

答案1

首先通过运行它strace -fF -e file -o /tmp/man.log man less来查看需要包含哪些额外目录才能使命令在 firejail 下工作。

至少在我的 Fedora 32 上需要这些附加目录:

  • /usr/共享/groff
  • /usr/share/locale - 这可能已经包含在whitelist-var-common.inc
  • /usr/share/terminfo

相关内容