lunes, 4 de julio de 2016

La belleza de KVM y virt-manager

Luego de varias actualizaciones, me encontré con la belleza de necesitar conectarme a mis máquinas virtuales usando "virt-manager", y me topé con el hermoso mensaje:

libvirtError: authentication unavailable: no polkit agent available to authenticate action 'org.libvirt.unix.manage'

La cuestión es que en medio de estas actualizaciones, hubo una de seguro que no tuvo en cuenta algunas cosas. Mi usuario debiera ser administrador de KVM, pero no lo veo en el grupo "kvm", entonces decidí agregarlo como en la vieja escuela: tocando /etc/group, buscando el grupo kvm, y agregando mi usuario allí.

Pero con eso no alcanza. Se deberá agregar un archivo llamado "/etc/polkit-1/rules.d/49-org.libvirt.unix.manager.rules", con el siguiente contenido:

polkit.addRule(function(action, subject) {
    if (action.id == "org.libvirt.unix.manage" &&
        subject.isInGroup("kvm")) {
            return polkit.Result.YES;
        }
});

Listo, luego de haber relanzado algunos procesos, pude conectarme tranquilamente.

LA EXPLICACIÓN

Generalmente esta sección será obviada por todo el mundo, y sólo cuando encuentren más problemas quizá vuelvan para acá. Pero debo explicar un poco de esto, así que allá vamos.

Según su página oficial, polkit es una forma de entregar permisos privilegiados a procesos no privilegiados. Sudo lo podría hacer, todo el mundo pensaría...pero lo cierto es que polkit los asigna a niveles atómicos, permitiendo mayor control todavía que con sudo. 

Como cada día estamos más cerca de volvernos desarrolladores web cuando lo que queremos es gestionar un GNU/Linux, polkit maneja sus reglas de autorización usando un lenguaje muy de la onda Javascript, ubicados en /etc/polkit-1/rules.d. Tal como lo hicimos nosotros. Aviso: cuando el /etc/passwd se deba escribir con tags HTML, me paso a otro sistema operativo. 

Qué es lo que hicimos en nuestro caso? Le dijimos a polkit que si la action.id es org.libvirt.unix.manage, que es la que nos está generando el error, y el que lo invoca está en el grupo "kvm", que es al que nos hemos agregado, entonces el resultado es una hermosa autorización. Sencillo, no? Así de fácil es manejar la seguridad de nuestros equipos ahora. A disfrutarlo...