LXC 容器内的 dhcpd (isc-dhcp-server) 有什么问题?为什么它什么都不做?

LXC 容器内的 dhcpd (isc-dhcp-server) 有什么问题?为什么它什么都不做?

我在各种 Ubuntu 机器上尝试了很多次:LXC 容器内的可执行文件(通过包dhcpd安装)似乎/usr/sbin/dhcpdisc-dhcp-server从命令行执行时,它唯一会做的事情就是以退出代码 1 退出

我想手动执行程序以获取交互式错误消息并调试配置中的问题。

例如,在执行时,$ dhcpd --version我希望至少有主机上的版本

$ dhcpd --version
isc-dhcpd-4.3.5
$ 

在 LXC 容器内部(但不在 VirtualBox 中),dhcpd无论命令行选项如何,始终不会向标准输出任何内容。


编辑:

我比较了在 LXC 容器和主机上运行的输出strace dhcpd --version。只有一个区别,在输出的最后。在 LXC 客户机上:

connect(3, {sa_family=AF_UNIX, sun_path="/dev/log"}, 110) = 0
write(2, "isc-dhcpd-", 10)              = -1 EACCES (Permission denied)
write(2, "4.3.5", 5)                    = -1 EACCES (Permission denied)
write(2, "\n", 1)                       = -1 EACCES (Permission denied)
futex(0x7f2637e2882c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
exit_group(0)                           = ?
+++ exited with 0 +++

而在主机上类似部分内容如下:

connect(3, {sa_family=AF_UNIX, sun_path="/dev/log"}, 110) = 0
write(2, "isc-dhcpd-", 10isc-dhcpd-)              = 10
write(2, "4.3.5", 54.3.5)                    = 5
write(2, "\n", 1
)                       = 1
futex(0x7f95cadac82c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
exit_group(0)                           = ?
+++ exited with 0 +++

我在 LXD 上提交了有关此问题的 issue,请参阅https://github.com/lxc/lxd/issues/5378

答案1

尝试运行“strace dhcpd --version”看看是否提供更多信息。

编辑:

write(2, "isc-dhcpd-", 10)              = -1 EACCES (Permission denied)

这意味着该进程无法写入 STDERR(文件描述符 2)。

恭喜你,你确实遇到了 Ubuntu 漏洞1641236或者1667016 引自lxc 问题 2930

不过,您确实有几个可用的解决方法:使用 ssh 而不是“lxc exec”应该可以正常工作(因为 ssh 将分配其自己的 pts 对)使用“lxc exec”然后运行“脚本”会话应该具有与 ssh 相同的效果您可以通过将配置文件符号链接到 /etc/apparmor.d/disable/ 来关闭 tcpdump apparmor 配置文件,然后在容器中重新加载 apparmor(或重新启动它)。

最后一个解决方法似乎对这两个错误都有效

ln -s /etc/apparmor.d/usr.sbin.dhcpd /etc/apparmor.d/disable/

相关内容