Qemu

為什麼 QEMU 的 hostfwd 選項有時需要 root 訪問權限而有時不需要

  • February 24, 2020

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 埠訪問?

< 1024 的埠是特權埠,只有根程序(或 Linux 中具有CAP_NET_BIND_SERVICE 功能的程序)才能將套接字綁定到它們。

qemu 中的主機轉發通過 qemu 將套接字綁定到主機上的埠來工作;如果 qemu 程序作為普通使用者執行而沒有額外的上限,它將無法綁定到 80 或 443。

如果您使用的是 Linux,則可以使用 解決此問題setcap CAP_NET_BIND_SERVICE+ep /path/to/qemu-system-x86_64,但我建議這樣做。

引用自:https://unix.stackexchange.com/questions/504886