• Ming Lei's avatar
    ublk_drv: add mechanism for supporting unprivileged ublk device · 4093cb5a
    Ming Lei authored
    unprivileged ublk device is helpful for container use case, such
    as: ublk device created in one unprivileged container can be controlled
    and accessed by this container only.
    
    Implement this feature by adding flag of UBLK_F_UNPRIVILEGED_DEV, and if
    this flag isn't set, any control command has been run from privileged
    user. Otherwise, any control command can be sent from any unprivileged
    user, but the user has to be permitted to access the ublk char device
    to be controlled.
    
    In case of UBLK_F_UNPRIVILEGED_DEV:
    
    1) for command UBLK_CMD_ADD_DEV, it is always allowed, and user needs
    to provide owner's uid/gid in this command, so that udev can set correct
    ownership for the created ublk device, since the device owner uid/gid
    can be queried via command of UBLK_CMD_GET_DEV_INFO.
    
    2) for other control commands, they can only be run successfully if the
    current user is allowed to access the specified ublk char device, for
    running the permission check, path of the ublk char device has to be
    provided by these commands.
    
    Also add one control of command UBLK_CMD_GET_DEV_INFO2 which always
    include the char dev path in payload since userspace may not have
    knowledge if this device is created in unprivileged mode.
    
    For applying this mechanism, system administrator needs to take
    the following policies:
    
    1) chmod 0666 /dev/ublk-control
    
    2) change ownership of ublkcN & ublkbN
    - chown owner_uid:owner_gid /dev/ublkcN
    - chown owner_uid:owner_gid /dev/ublkbN
    
    Both can be done via one simple udev rule.
    
    Userspace:
    
    	https://github.com/ming1/ubdsrv/tree/unprivileged-ublk
    
    'ublk add -t $TYPE --un_privileged=1' is for creating one un-privileged
    ublk device if the user is un-privileged.
    
    Link: https://lore.kernel.org/linux-block/YoOr6jBfgVm8GvWg@stefanha-x1.localdomain/Suggested-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
    Signed-off-by: default avatarMing Lei <ming.lei@redhat.com>
    Link: https://lore.kernel.org/r/20230106041711.914434-7-ming.lei@redhat.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    4093cb5a
ublk_drv.c 55.9 KB