每个 flatpak 应用程序都会失败并显示以下消息:
$ flatpak run org.mozilla.firefox
bwrap: Unexpected capabilities but not setuid, old file caps config?
error: ldconfig failed, exit status 256
Ubuntu Mantic,使用 apt 安装 flatpak。
这肯定是与气泡膜有关,或者是与气泡膜的使用方式有关,因为:
$ bwrap
bwrap: Unexpected capabilities but not setuid, old file caps config?
$ sudo bwrap
usage: bwrap [OPTIONS...] [--] COMMAND [ARGS...]
--help Print this help
--version Print version
...
给评论者的更多信息:
$ type -a bwrap
bwrap is /bin/bwrap
bwrap is /usr/bin/bwrap
bwrap is /bin/bwrap
$ ls -l /usr/bin/bwrap /bin/bwrap
.rwxr-xr-x 72k root 28 Feb 10:38 /usr/bin/bwrap
.rwxr-xr-x 72k root 28 Feb 10:38 /bin/bwrap
$ sudo flatpak repair
[21/23] Verifying flathub:app/com.google.Chrome/x86_64/stable…
Checking remotes...
Pruning objects
Erasing .removed
$ unshare --map-root-user
$ whoami
root
$ sysctl kernel.unprivileged_userns_clone
kernel.unprivileged_userns_clone = 1
我尝试为 bwrap 设置 setuid:
$ sudo chmod 4755 /usr/bin/bwrap
这可以让 flatpaks 运行,但会出现一个难看的警告。我认为这不是一个正确的解决方案。
答案1
这不是一个答案,而是重要的说明,不适合评论,并且很可能会帮助您或其他试图帮助解决此问题的人。
注释 #1
这:
$ bwrap
bwrap: Unexpected capabilities but not setuid, old file caps config?
可以复制(在其他系统上使用默认正常运行bwrap
命令)当将容器嵌套在其他容器中并要求使用所有功能时,例如--cap-add ALL
:
$ bwrap --bind / / --cap-add ALL -- bwrap --bind / / -- bash
bwrap: Unexpected capabilities but not setuid, old file caps config?
... Bubblewrap 放弃了沙箱内的所有功能,子任务无法获得比父任务更大的权限。这就是它的工作原理,但我无法详细说明这可能是如何导致这种情况的。
现在,为什么会发生这种情况取决于您手动故意执行的操作或通过安装的某些脚本/包在不知不觉中执行的操作......所以,只有您能猜到是什么。
可能的原因可能是您启用了持久用户命名空间/沙箱或与 Bublewrap 配置/设置相关的类似内容。
笔记2
$ type -a bwrap
bwrap is /bin/bwrap
bwrap is /usr/bin/bwrap
bwrap is /bin/bwrap
... 除非有两条路线通向它,否则应该只打印bwrap is /bin/bwrap
一次... 找出原因并修复它。
注释 #3
这内核特征在最近的 Ubuntu 内核中,默认启用了允许非特权用户使用命名空间的功能...这是 Bubblewrap 在没有 setuid 位的情况下工作的必要条件(默认/usr/bin/bwrap
) 或者可能需要可执行二进制文件 ie 上的 setuid 位。
注释 #4
可执行文件的默认所有权和权限/usr/bin/bwrap
应该是:
$ ls -l /usr/bin/bwrap
-rwxr-xr-x 1 root root 72160 Feb 25 2022 /usr/bin/bwrap
...可以通过首先设置所有权来恢复:
sudo chown root:root /usr/bin/bwrap
...然后设置权限:
sudo chmod 0755 /usr/bin/bwrap
或者同时执行两个操作:
sudo dpkg-statoverride --update --add root root 0755 /usr/bin/bwrap