Назад | Перейти на главную страницу

libvirtd: kvm: Права доступа пользователей Centos 6

Мне нужно контролировать доступ пользователей к тому, как они могут использовать виртуальные машины и что они могут делать через 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 для хорошего примера