Мне нужно контролировать доступ пользователей к тому, как они могут использовать виртуальные машины и что они могут делать через Virsh на гипервизоре на основе KVM.
Пока что я узнал из http://wiki.libvirt.org в том, что мне нужно включить разрешения сокета unix на /etc/libvirt/libvirtd.conf
для сокета unix, создайте новую группу с именем libvirtd и добавьте в нее пользователей. Так что все прошло хорошо, однако с этими пользователями я не вижу никаких виртуальных машин, когда вижу
virsh list --all
В документации на libvirt.ogr также упоминается использование polkit и другие методы.
Если бы кто-нибудь мог помочь мне с любым рабочим примером использования простого unix socket permission
метод или polikit
или sudoer
метод или любой другой метод.
Я хотел бы иметь права пользователя таким образом, чтобы пользователь из virsh мог выполнять только ограниченные задачи, такие как не могу virsh start
но не могу virsh destroy
.
Мне удалось использовать PolicyKit в CentOS 6.5 с помощью вики libvirt:
http://wiki.libvirt.org/page/SSHPolicyKitSetup
Недостающий шаг к тому, чтобы заставить его работать virsh:
состоит в том, чтобы добавить в ваш .bash_profile следующее:
if test -x `which virsh`; then
export LIBVIRT_DEFAULT_URI=qemu:///system
fi
(это из этого Почта)
Эта настройка также позволяет довольно легко использовать virt-manager на удаленном компьютере.
Отвечая на свой вопрос. Самое простое и простое решение - sudoers. С регулярными выражениями sudoers мы можем делать много чего. Я просто добавил одно правило sudoer.
Сохраните имена всех гостевых машин таким образом, чтобы их можно было указать с помощью какого-либо регулярного выражения. В моем случае я сохранил все гостевые машины, те, которыми я хочу управлять пользователями без полномочий root, начиная с vmname-.
Приведенное ниже правило позволяет пользователям без полномочий root запускать консоль и получать виртуальную машину, а не уничтожать ее.
Cmnd_Alias KVMCMD = /usr/bin/virsh list --all,/usr/bin/virsh start vmname*
Cmnd_Alias KVMBAD = virsh destroy vmname*
Надеюсь, это поможет тому, кто ищет подобное решение.
Для правильного RBAC вам понадобится более сложная платформа управления виртуальными машинами, чем libvirt, которая предназначена для управления жизненным циклом виртуальных машин, и мало что еще. Взгляните на oVirt.org для хорошего примера