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を追加するには、ルートアクセスが必要です。

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

ルートアクセスがない場合は、次のエラーメッセージが表示されます。

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でこの問題を解決できます。いいえおすすめです。

関連情報