73 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
		
		
			
		
	
	
			73 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
|   | QEMU 9p virtfs proxy filesystem helper
 | ||
|  | ======================================
 | ||
|  | 
 | ||
|  | Synopsis
 | ||
|  | --------
 | ||
|  | 
 | ||
|  | **virtfs-proxy-helper** [*OPTIONS*]
 | ||
|  | 
 | ||
|  | Description
 | ||
|  | -----------
 | ||
|  | 
 | ||
|  | Pass-through security model in QEMU 9p server needs root privilege to do
 | ||
|  | few file operations (like chown, chmod to any mode/uid:gid).  There are two
 | ||
|  | issues in pass-through security model:
 | ||
|  | 
 | ||
|  | - TOCTTOU vulnerability: Following symbolic links in the server could
 | ||
|  |   provide access to files beyond 9p export path.
 | ||
|  | 
 | ||
|  | - Running QEMU with root privilege could be a security issue.
 | ||
|  | 
 | ||
|  | To overcome above issues, following approach is used: A new filesystem
 | ||
|  | type 'proxy' is introduced. Proxy FS uses chroot + socket combination
 | ||
|  | for securing the vulnerability known with following symbolic links.
 | ||
|  | Intention of adding a new filesystem type is to allow qemu to run
 | ||
|  | in non-root mode, but doing privileged operations using socket IO.
 | ||
|  | 
 | ||
|  | Proxy helper (a stand alone binary part of qemu) is invoked with
 | ||
|  | root privileges. Proxy helper chroots into 9p export path and creates
 | ||
|  | a socket pair or a named socket based on the command line parameter.
 | ||
|  | QEMU and proxy helper communicate using this socket. QEMU proxy fs
 | ||
|  | driver sends filesystem request to proxy helper and receives the
 | ||
|  | response from it.
 | ||
|  | 
 | ||
|  | The proxy helper is designed so that it can drop root privileges except
 | ||
|  | for the capabilities needed for doing filesystem operations.
 | ||
|  | 
 | ||
|  | Options
 | ||
|  | -------
 | ||
|  | 
 | ||
|  | The following options are supported:
 | ||
|  | 
 | ||
|  | .. program:: virtfs-proxy-helper
 | ||
|  | 
 | ||
|  | .. option:: -h
 | ||
|  | 
 | ||
|  |   Display help and exit
 | ||
|  | 
 | ||
|  | .. option:: -p, --path PATH
 | ||
|  | 
 | ||
|  |   Path to export for proxy filesystem driver
 | ||
|  | 
 | ||
|  | .. option:: -f, --fd SOCKET_ID
 | ||
|  | 
 | ||
|  |   Use given file descriptor as socket descriptor for communicating with
 | ||
|  |   qemu proxy fs drier. Usually a helper like libvirt will create
 | ||
|  |   socketpair and pass one of the fds as parameter to this option.
 | ||
|  | 
 | ||
|  | .. option:: -s, --socket SOCKET_FILE
 | ||
|  | 
 | ||
|  |   Creates named socket file for communicating with qemu proxy fs driver
 | ||
|  | 
 | ||
|  | .. option:: -u, --uid UID
 | ||
|  | 
 | ||
|  |   uid to give access to named socket file; used in combination with -g.
 | ||
|  | 
 | ||
|  | .. option:: -g, --gid GID
 | ||
|  | 
 | ||
|  |   gid to give access to named socket file; used in combination with -u.
 | ||
|  | 
 | ||
|  | .. option:: -n, --nodaemon
 | ||
|  | 
 | ||
|  |   Run as a normal program. By default program will run in daemon mode
 |