我正在使用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
。