• Ilya Dryomov's avatar
    rbd: require global CAP_SYS_ADMIN for mapping and unmapping · f44d04e6
    Ilya Dryomov authored
    It turns out that currently we rely only on sysfs attribute
    permissions:
    
      $ ll /sys/bus/rbd/{add*,remove*}
      --w------- 1 root root 4096 Sep  3 20:37 /sys/bus/rbd/add
      --w------- 1 root root 4096 Sep  3 20:37 /sys/bus/rbd/add_single_major
      --w------- 1 root root 4096 Sep  3 20:37 /sys/bus/rbd/remove
      --w------- 1 root root 4096 Sep  3 20:38 /sys/bus/rbd/remove_single_major
    
    This means that images can be mapped and unmapped (i.e. block devices
    can be created and deleted) by a UID 0 process even after it drops all
    privileges or by any process with CAP_DAC_OVERRIDE in its user namespace
    as long as UID 0 is mapped into that user namespace.
    
    Be consistent with other virtual block devices (loop, nbd, dm, md, etc)
    and require CAP_SYS_ADMIN in the initial user namespace for mapping and
    unmapping, and also for dumping the configuration string and refreshing
    the image header.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
    Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
    f44d04e6
rbd.c 185 KB