libvirt/tools
Daniel P. Berrangé 4feeb2d986 tools: split virt-login-shell into two binaries
The virt-login-shell binary is a setuid program that takes
no arguments. When invoked it looks at the invoking uid,
resolves it to a username, and finds an LXC guest with the
same name. It then starts the guest and runs the shell in
side the namespaces of the container.

Given this set of tasks the virt-login-shell binary needs
to connect to libvirtd, make various other libvirt API calls.
This is a problem for setuid binaries as various libraries
that libvirt.so links to are not safe. For example, they have
constructor functions which execute an unknown amount of code
that can be influenced by env variables.

For this reason virt-login-shell doesn't use libvirt.so,
but instead links to a custom, cut down, set of source files
sufficient to be a local client only.

This introduces a problem for integrating glib2 into libvirt
though, as once integrated, there would be no way to build
virt-login-shell without an external dependancy on glib2 and
this is definitely not setuid safe.

To resolve this problem, we split the virt-login-shell binary
into two parts. The first part is setuid and does almost
nothing. It simply records the original uid+gid, and then
invokes the virt-login-shell-helper binary. Crucially when
it does this it completes scrubs all environment variables.
It is thus safe for virt-login-shell-helper to link to the
normal libvirt.so. Any things that constructor functions
do cannot be influenced by user control env vars or cli
args.

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2019-08-07 16:54:01 +01:00
..
bash-completion tools: Provide bash autompletion file 2018-01-11 18:53:04 +01:00
nss libvirt_nss: Report newer addresses first 2019-07-15 13:48:19 +02:00
wireshark tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
libvirt_recover_xattrs.sh tools: Slightly rework libvirt_recover_xattrs.sh 2019-07-03 08:36:03 +02:00
libvirt_win_icon_16x16.ico Move virsh into tools/ directory 2009-09-21 14:41:45 +01:00
libvirt_win_icon_32x32.ico Move virsh into tools/ directory 2009-09-21 14:41:45 +01:00
libvirt_win_icon_48x48.ico Move virsh into tools/ directory 2009-09-21 14:41:45 +01:00
libvirt_win_icon_64x64.ico Move virsh into tools/ directory 2009-09-21 14:41:45 +01:00
libvirt-guests.service.in Use https:// links for most sites 2017-10-16 10:22:34 +01:00
libvirt-guests.sh.in tools: do not report unknown guests in print_guests_shutdown 2018-04-24 10:46:41 +02:00
libvirt-guests.sysconf lxc: allow use of lxc:///system URI as preferred format 2018-04-12 16:52:01 +01:00
Makefile.am tools: split virt-login-shell into two binaries 2019-08-07 16:54:01 +01:00
virsh_win_icon.rc Move virsh into tools/ directory 2009-09-21 14:41:45 +01:00
virsh-checkpoint.c backup: Implement virsh support for checkpoints 2019-07-26 16:48:58 -05:00
virsh-checkpoint.h backup: Implement virsh support for checkpoints 2019-07-26 16:48:58 -05:00
virsh-completer.c backup: Implement virsh support for checkpoints 2019-07-26 16:48:58 -05:00
virsh-completer.h backup: Implement virsh support for checkpoints 2019-07-26 16:48:58 -05:00
virsh-console.c tools: console: Use proper constructor 2019-08-05 19:39:44 +02:00
virsh-console.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virsh-domain-monitor.c backup: Implement virsh support for checkpoints 2019-07-26 16:48:58 -05:00
virsh-domain-monitor.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virsh-domain.c lib: Format PCI address differently 2019-08-05 19:42:15 +02:00
virsh-domain.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virsh-edit.c Remove even more Author(s): lines from source files 2019-01-03 13:24:18 +01:00
virsh-host.c Always put _LAST enums on second line of VIR_ENUM_IMPL 2019-04-11 12:47:23 -04:00
virsh-host.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virsh-interface.c Remove even more Author(s): lines from source files 2019-01-03 13:24:18 +01:00
virsh-interface.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virsh-network.c virsh: add support for network port APIs 2019-06-17 15:30:36 +01:00
virsh-network.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virsh-nodedev.c tools: Introduce virshNodedevCapabilityNameCompleter 2019-07-18 16:53:33 +02:00
virsh-nodedev.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virsh-nwfilter.c Remove even more Author(s): lines from source files 2019-01-03 13:24:18 +01:00
virsh-nwfilter.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virsh-pool.c storage: Add iscsi-direct pool list type flag 2019-07-13 17:40:09 +02:00
virsh-pool.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virsh-secret.c util: Move enum convertors into virenum.(c|h) 2019-04-10 09:12:04 +02:00
virsh-secret.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virsh-snapshot.c snapshot: Add VIR_DOMAIN_SNAPSHOT_CREATE_VALIDATE flag 2019-07-10 17:34:58 -05:00
virsh-snapshot.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virsh-util.c backup: Implement virsh support for checkpoints 2019-07-26 16:48:58 -05:00
virsh-util.h backup: Implement virsh support for checkpoints 2019-07-26 16:48:58 -05:00
virsh-volume.c Always put _LAST enums on second line of VIR_ENUM_IMPL 2019-04-11 12:47:23 -04:00
virsh-volume.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virsh.c backup: Implement virsh support for checkpoints 2019-07-26 16:48:58 -05:00
virsh.h backup: Implement virsh support for checkpoints 2019-07-26 16:48:58 -05:00
virsh.pod backup: Prevent snapshots and checkpoints at same time 2019-07-29 08:22:29 -05:00
virt-admin-completer.c Remove even more Author(s): lines from source files 2019-01-03 13:24:18 +01:00
virt-admin-completer.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virt-admin.c util: Move enum convertors into virenum.(c|h) 2019-04-10 09:12:04 +02:00
virt-admin.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virt-admin.pod tools: Fix grammar 2019-04-15 17:37:52 +02:00
virt-host-validate-bhyve.c internal: Move <stdio.h> include to internal.h 2018-09-20 10:16:38 +02:00
virt-host-validate-bhyve.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virt-host-validate-common.c Always put _LAST enums on second line of VIR_ENUM_IMPL 2019-04-11 12:47:23 -04:00
virt-host-validate-common.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virt-host-validate-lxc.c virt-host-validate: require freezer for LXC 2018-10-05 15:53:29 +02:00
virt-host-validate-lxc.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virt-host-validate-qemu.c virt-host-validate: rewrite cgroup detection to use util/vircgroup 2018-10-05 15:53:29 +02:00
virt-host-validate-qemu.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
virt-host-validate.c src: More cleanup of some system headers already contained in internal.h 2018-09-20 10:16:39 +02:00
virt-host-validate.pod Use https:// links for most sites 2017-10-16 10:22:34 +01:00
virt-login-shell-helper.c tools: split virt-login-shell into two binaries 2019-08-07 16:54:01 +01:00
virt-login-shell.c tools: split virt-login-shell into two binaries 2019-08-07 16:54:01 +01:00
virt-login-shell.conf virt-login-shell: add ability to auto-detect shell from container 2016-06-10 11:03:02 +01:00
virt-login-shell.pod Use https:// links for most sites 2017-10-16 10:22:34 +01:00
virt-pki-validate.in tools: Fix permissions for virt-pki-validate.in 2019-07-01 17:20:32 +02:00
virt-pki-validate.pod Use https:// links for most sites 2017-10-16 10:22:34 +01:00
virt-sanlock-cleanup.in build: Extract pod from source files 2016-04-25 15:40:43 +02:00
virt-sanlock-cleanup.pod Use https:// links for most sites 2017-10-16 10:22:34 +01:00
virt-xml-validate.in virt-xml-validate: Allow input to be read from stdin 2019-06-10 15:39:16 +02:00
virt-xml-validate.pod virt-xml-validate: Add schema for nwfilterbinding 2018-07-19 16:16:57 -04:00
vsh-table.c vsh-table: allow empty columns 2019-02-12 10:14:53 +01:00
vsh-table.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00
vsh.c virsh: clean up includes 2019-07-25 15:06:15 +02:00
vsh.h tools: use #pragma once in headers 2019-06-19 17:12:34 +02:00