为什么QEMU的hostfwd选项有时需要root访问,有时不需要

为什么QEMU的hostfwd选项有时需要root访问,有时不需要

QEMU 的此命令不需要 root 访问权限:

qemu-system-x86_64 -m 3072 -smp 2 -hda Debian9.qcow2 -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22,hostfwd=tcp::9000-:9000

当我添加 443 和 80 端口时,我需要 root 访问权限:

sudo qemu-system-x86_64 -m 3072 -smp 2 -hda Debian9.qcow2 -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22,hostfwd=tcp::9000-:9000,hostfwd=tcp::443-:443,hostfwd=tcp::80-:80

如果没有 root 访问权限,我会收到此错误消息:

qemu-system-x86_64: -netdev user,id=net0,hostfwd=tcp::5555-:22,hostfwd=tcp::9000-:9000,hostfwd=tcp::443-:443,hostfwd=tcp::80-:80: Could not set up host forwarding rule 'tcp::80-:80'

这是否意味着 QEMU 软件中的 TCP 端口访问受到保护?

答案1

< 1024 的端口是特权,并且只有根进程(或带有CAP_NET_BIND_SERVICE 能力在 Linux 中)可以将套接字绑定到它们。

qemu 中的主机转发通过 qemu 将套接字绑定到主机上的端口来工作;如果 qemu 进程以普通用户身份运行且没有额外的上限,则它将无法绑定到 80 或 443。

如果你使用的是 Linux,你可以使用 来解决这个问题setcap CAP_NET_BIND_SERVICE+ep /path/to/qemu-system-x86_64,但这就是我所做的不是推荐。

相关内容