我正在尝试使用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-bin
,private-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