libxl: Rationalise calculation of user to run qemu as

If the config specifies a user we use that.  Otherwise:

When we are not restricting qemu, there is very little point running
it as a different user than root.  Indeed, previously, creating the
"magic" users would cause qemu to become slightly dysfunctional (for
example, you can't insert a cd that the qemu user can't read).
So, in that case, default to running it as root.

Conversely, if restriction is requested, we must insist on running
qemu as a non-root user.

Sadly the admin is still required to create 2^16-epsilon users!

Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
This commit is contained in:
Ian Jackson authored and Ian Jackson committed 2017-10-11 12:51:22 +01:00
1 parent 6dd27e6ce5
commit bfc8f25556
2 files changed
+10 -5

No files matched your search

-2
View File
@@ -2250,8 +2250,6 @@ or
B<xen-qemuuser-shared>
(in which case different guests will not
be protected against each other).
And if you do not create the user,
the restriction request will be silently ineffective!
=item
+10 -3
View File
@@ -1635,6 +1635,12 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
goto end_search;
}
if (!libxl_defbool_val(b_info->u.hvm.dm_restrict)) {
LOGD(DEBUG, guest_domid,
"dm_restrict disabled, starting QEMU as root");
goto end_search;
}
user = GCSPRINTF("%s%d", LIBXL_QEMU_USER_BASE, guest_domid);
ret = libxl__dm_runas_helper(gc, user);
if (ret < 0)
@@ -1652,9 +1658,10 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
goto end_search;
}
user = NULL;
LOGD(DEBUG, guest_domid, "Could not find user %s, starting QEMU as root",
LIBXL_QEMU_USER_SHARED);
LOGD(ERROR, guest_domid,
"Could not find user %s%d or %s, cannot restrict",
LIBXL_QEMU_USER_BASE, guest_domid, LIBXL_QEMU_USER_SHARED);
return ERROR_INVAL;
end_search:
if (user != NULL && strcmp(user, "root")) {
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.