VIRTFS-PROXY-HELPER(1)
π VIRTFS-PROXY-HELPER π
okay so bestie, welcome to the manual page for virtfs-proxy-helper β it's the QEMU 9p virtfs proxy filesystem helper and honestly? it's giving "tiny daemon, huge responsibilities" π
β¨ SYNOPSIS β¨
virtfs-proxy-helper [OPTIONS]
that's it. that's the whole vibe. options only, no positional args, no drama πΈ
π¦ DESCRIPTION π¦
β οΈ READ THIS FIRST, FR FR: the 9p proxy backend is deprecated (since QEMU 8.1) and will be removed, along with this daemon, in a future version of QEMU. not "maybe", not "we'll see" β removed. π
so here's the lore. the pass-through security model in the QEMU 9p server needs root privilege to do a few file operations (like chown, chmod to any mode/uid:gid). and that model has two whole problems:
- TOCTTOU vulnerability: following symbolic links in the server could provide access to files beyond the 9p export path. π
- running QEMU with root privilege could be a security issue. π
to overcome the above issues, here's the approach, and it's actually kind of iconic: a new filesystem type proxy is introduced. Proxy FS uses a chroot + socket combination for securing the vulnerability known with following symbolic links. the intention of adding a new filesystem type is to allow qemu to run in non-root mode, while still doing privileged operations using socket IO. π«Ά
the Proxy helper (a stand-alone binary, part of qemu) is invoked with root privileges. Proxy helper chroots into the 9p export path and creates a socket pair or a named socket, based on the command line parameter. QEMU and the proxy helper communicate using this socket. the QEMU proxy fs driver sends filesystem requests to the proxy helper and receives the response back from it. β¨
and the best part? the proxy helper is designed so that it can drop root privileges β except for the capabilities needed for doing filesystem operations. main character energy, honestly. π
π OPTIONS π
the following options are supported:
-hβ display help and exit. short, sweet, slays. π-p,--pathPATH β path to export for the proxy filesystem driver. this is the 9p export path it chroots into, iykyk. π-f,--fdSOCKET_ID β use the given file descriptor as the socket descriptor for communicating with the qemu proxy fs driver. usually a helper likelibvirtwill create a socketpair and pass one of the fds as the parameter to this option. π₯-s,--socketSOCKET_FILE β creates a named socket file for communicating with the qemu proxy fs driver. πΈ-u,--uidUID β uid to give access to the named socket file; used in combination with-g. π§-g,--gidGID β gid to give access to the named socket file; used in combination with-u. π§-n,--nodaemonβ run as a normal program. by default, the program will run in daemon mode. not me being surprised by the daemon default every single time π
π AUTHOR π
M. Mohan Kumar
π COPYRIGHT π
2026, The QEMU Project Developers
and that's the whole page, bestie! π«Ά this one came from the QEMU manual, version 8.2.2, dated Apr 08, 2026 β so if you're reading this, hi from the future, drink water, and go chown responsibly πβ¨π
π¦ where this page comes from
- ubuntu noble: qemu-system-common 1:8.2.2+ds-0ubuntu1.16
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms