Skip to content
Snippets Groups Projects
  • Richard W.M. Jones's avatar
    3d212b41
    nbd/server: Add --selinux-label option · 3d212b41
    Richard W.M. Jones authored
    Under SELinux, Unix domain sockets have two labels.  One is on the
    disk and can be set with commands such as chcon(1).  There is a
    different label stored in memory (called the process label).  This can
    only be set by the process creating the socket.  When using SELinux +
    SVirt and wanting qemu to be able to connect to a qemu-nbd instance,
    you must set both labels correctly first.
    
    For qemu-nbd the options to set the second label are awkward.  You can
    create the socket in a wrapper program and then exec into qemu-nbd.
    Or you could try something with LD_PRELOAD.
    
    This commit adds the ability to set the label straightforwardly on the
    command line, via the new --selinux-label flag.  (The name of the flag
    is the same as the equivalent nbdkit option.)
    
    A worked example showing how to use the new option can be found in
    this bug: https://bugzilla.redhat.com/show_bug.cgi?id=1984938
    
    Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1984938
    
    
    Signed-off-by: default avatarRichard W.M. Jones <rjones@redhat.com>
    Reviewed-by: default avatarDaniel P. Berrangé <berrange@redhat.com>
    
    [eblake: rebase to configure changes, reject --selinux-label if it is
    not compiled in or not used on a Unix socket]
    Note that we may relax some of these restrictions at a later date,
    such as making it possible to label a TCP socket, although it may be
    smarter to do so as a generic QMP action rather than more one-off
    command lines in qemu-nbd.
    Signed-off-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20211115202944.615966-1-eblake@redhat.com>
    Reviewed-by: default avatarThomas Huth <thuth@redhat.com>
    [eblake: adjust meson output as suggested by thuth]
    Signed-off-by: default avatarEric Blake <eblake@redhat.com>
    3d212b41
    History
    nbd/server: Add --selinux-label option
    Richard W.M. Jones authored
    Under SELinux, Unix domain sockets have two labels.  One is on the
    disk and can be set with commands such as chcon(1).  There is a
    different label stored in memory (called the process label).  This can
    only be set by the process creating the socket.  When using SELinux +
    SVirt and wanting qemu to be able to connect to a qemu-nbd instance,
    you must set both labels correctly first.
    
    For qemu-nbd the options to set the second label are awkward.  You can
    create the socket in a wrapper program and then exec into qemu-nbd.
    Or you could try something with LD_PRELOAD.
    
    This commit adds the ability to set the label straightforwardly on the
    command line, via the new --selinux-label flag.  (The name of the flag
    is the same as the equivalent nbdkit option.)
    
    A worked example showing how to use the new option can be found in
    this bug: https://bugzilla.redhat.com/show_bug.cgi?id=1984938
    
    Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1984938
    
    
    Signed-off-by: default avatarRichard W.M. Jones <rjones@redhat.com>
    Reviewed-by: default avatarDaniel P. Berrangé <berrange@redhat.com>
    
    [eblake: rebase to configure changes, reject --selinux-label if it is
    not compiled in or not used on a Unix socket]
    Note that we may relax some of these restrictions at a later date,
    such as making it possible to label a TCP socket, although it may be
    smarter to do so as a generic QMP action rather than more one-off
    command lines in qemu-nbd.
    Signed-off-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20211115202944.615966-1-eblake@redhat.com>
    Reviewed-by: default avatarThomas Huth <thuth@redhat.com>
    [eblake: adjust meson output as suggested by thuth]
    Signed-off-by: default avatarEric Blake <eblake@redhat.com>