Qemu
為什麼 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 埠訪問?
< 1024 的埠是特權埠,只有根程序(或 Linux 中具有
CAP_NET_BIND_SERVICE
功能的程序)才能將套接字綁定到它們。qemu 中的主機轉發通過 qemu 將套接字綁定到主機上的埠來工作;如果 qemu 程序作為普通使用者執行而沒有額外的上限,它將無法綁定到 80 或 443。
如果您使用的是 Linux,則可以使用 解決此問題
setcap CAP_NET_BIND_SERVICE+ep /path/to/qemu-system-x86_64
,但我不建議這樣做。