在非特权(rootless/fakeroot)网络命名空间内使用 iptables 会导致“/run/xtables.lock”出现权限错误

在非特权(rootless/fakeroot)网络命名空间内使用 iptables 会导致“/run/xtables.lock”出现权限错误

我正在使用unshare创建一个非特权网络命名空间:

unshare -Unr

这为我们提供了一个能够使用 iptables 的网络命名空间。

然而运行后:

iptables -L

我们得到:

Fatal: can't open lock file /run/xtables.lock: Permission denied

这是因为 iptables 使用/run/xtables.lock进行并发控制,这需要与主机命名空间和可能的其他网络命名空间隔离。为此,我似乎需要一个挂载命名空间。

unshare -Umnr
touch /tmp/randomfile
mount --bind /tmp/randomfile /run/xtables.lock
iptables -L

现在它可以工作了。

但是我们无法保证该/run/xtables.lock文件存在。启动时它可能不存在。在这种情况下,调用mount --bind将失败,因为目标挂载点不存在。在命名空间内,我也无法直接创建,/run/xtables.lock因为我没有在其中创建文件的 root 权限/run

这个问题的解决方案是什么?我无法直接挂载整个,/run因为它包含我们需要的主机命名空间中的重要二进制文件和配置。我还尝试在 上使用 overlayfs /run,但在尝试挂载 时遇到了权限问题/run

相关内容