Saltar al contenido principal

ISOs disponibles usuarios

Para que los usuarios del entorno Proxmox puedan leer y usar imágenes ISO y plantillas de contenedores en sus instalaciones, conviene crear un almacenamiento específico para esos archivos. De este modo mejoramos la organización y seguridad: los usuarios sólo acceden a ese storage, no a todo el almacenamiento local. La opción ideal es disponer de un disco físico dedicado, pero si el presupuesto es limitado podemos usar un dataset de ZFS (con cuota) o un recurso compartido NFS. Ambos casos permiten separar las ISOs del almacenamiento principal.

Creación de roles

Primero definimos roles personalizados con los permisos adecuados. En la interfaz de Proxmox VE vamos a DatacenterRoles, pulsamos Create y creamos un rol, por ejemplo CustomISO.DataStore. Luego asignamos los permisos según lo que el usuario deba poder hacer:

  • Lectura de ISOs: Asignamos el permiso Datastore.Audit. Este permiso permite al usuario listar y ver información del almacenamiento, pero no subir ni modificar imágenes ISO (sólo lectura segura).

  • Carga de ISOs locales: Si queremos permitir que el usuario suba imágenes ISO al storage, agregamos también Datastore.AllocateTemplate. Este permiso autoriza la creación de nuevos volúmenes de plantillas e ISOs en el almacenamiento.

  • Descarga de ISOs externas: Para habilitar la función Download from URL en la interfaz (descargar ISO desde internet), creamos otro rol (por ejemplo CustomISO.Sys) con el permiso Sys.AccessNetwork. Este permiso adicional es necesario porque Proxmox debe resolver URLs en la red desde el nodo

Nota: Los nuevos roles solo tienen permisos básicos. El sistema exige además que el usuario tenga permisos suficientes en la ruta donde se aplica el rol. Por ejemplo, Datastore.AllocateTemplate en el almacenamiento, y Sys.AccessNetwork en el nodo desde el que se descarga la ISO.

Creación de almacenamiento

ZFS Dataset

Por defecto, Proxmox guarda las imágenes ISO en /var/lib/vz/template/iso. Sin embargo, ZFS no aplica cuotas a subdirectorios: la propiedad de cuota se pone sobre un dataset completo. Por ello, creamos un subdataset ZFS dedicado para las ISOs y le asignamos cuota. Por ejemplo, suponiendo un pool rpool con dataset principal rpool/var-lib-vz (que suele montarse en /var/lib/vz):

zfs create rpool/var-lib-vz/iso
zfs set quota=60G rpool/var-lib-vz/iso

Con esto, hemos creado un dataset llamado iso que se monta en /var/lib/vz/iso, y le hemos dado una cuota de 60 GB. La propiedad quota limita el espacio que puede usar ese dataset y sus descendientes.

A continuación integramos ese dataset en Proxmox:

  1. Agregar storage de tipo Directorio: En DatacenterStorage pulsamos Add y elegimos Directory.

  2. Configurar el nuevo storage: Asignamos un ID descriptivo, por ejemplo local-iso. En Directory ponemos la ruta /var/lib/vz/iso (la carpeta donde se montó el dataset). En Content marcamos ISO image y Container template, lo que permite que este directorio contenga imágenes ISO y plantillas de contenedor.

  3. Deshabilitar ISO en local existente: Editamos el storage llamado local (el almacenamiento por defecto) y desmarcamos allí ISO image y Container template. Así las ISOs nuevas solo irán a local-iso y evitamos confusiones.

  4. Mover ISOs existentes: Si ya teníamos archivos ISO en /var/lib/vz/template/iso, podemos moverlos al nuevo storage con:

    mv /var/lib/vz/template/iso/* /var/lib/vz/iso/

    Esto centraliza todas las ISOs en el nuevo dataset.

Esta configuración sitúa los archivos ISO en un dataset ZFS separado (montado en /var/lib/vz/iso), con una cuota limitada. Al agregarlo como Directory storage, Proxmox lo trata como un almacenamiento local donde almacenar solo imágenes ISO y plantillas.

NFS (compartido por red)

Otra opción es almacenar las imágenes ISO en un servidor NFS (por ejemplo un NAS) para liberar espacio local. Para ello:

  1. Configurar el servidor NFS: Creamos un recurso compartido NFS en el servidor que contenga las imágenes ISO. Por ejemplo, exportar un directorio /mnt/isos que contenga las ISOs.

  2. Verificar red y puertos: El nodo Proxmox debe poder alcanzar al servidor NFS por la red. Normalmente es necesario abrir en el firewall el puerto 2049 (TCP/UDP, NFS) y 111 (RPCbind/portmapper). En NFSv4 suele bastar con 2049, pero en NFSv3 también se usa el puerto 111 para consultas.

  3. Agregar storage NFS en Proxmox: En DatacenterStorage pulsamos Add y seleccionamos NFS. Luego definimos:

    • ID: nombre del almacenamiento (por ejemplo nfs-iso).

    • Server: la IP o nombre del servidor NFS.

    • Export: la ruta del recurso (por ejemplo /mnt/isos).

    • Content: marcamos ISO image y Container template.

  4. Hosts/DNS (si es necesario): Si no usamos DNS, podemos mapear la IP del servidor NFS a un nombre en /etc/hosts de cada nodo. En la GUI de Proxmox, bajo el nodo (Node) → SystemHosts, se puede editar /etc/hosts desde la web. Esto facilita usar nombres en lugar de direcciones IP.

Así los usuarios verán las ISOs almacenadas allí sin ocupar espacio local, lo que puede ahorrar recursos.

Asignación de permisos

Con los roles y almacenes creados, hay que asignar los permisos a los usuarios o grupos. En DatacenterPermissions hacemos lo siguiente:

  • Pulsamos Add y elegimos User Permission, Group Permission o API Token Permission, según corresponda.

  • En la ventana emergente:

    • Path: seleccionamos la ruta del almacenamiento. Por ejemplo /storage/local-iso para el storage local-iso. Nota: En Proxmox, /storage/<ID> es la ruta lógica al storage Directory.

    • Role: seleccionamos el rol que creamos (por ejemplo CustomISO.DataStore para permisos de ISO)

    • User/Group/API Token: elegimos el usuario o grupo (o token) al que se asigna.

    • Propagate: desmarcamos esta opción, para que el permiso no se propague recursivamente más allá del nivel indicado.

  • Pulsamos Add.

Esto da al usuario (o grupo) permiso Datastore.Audit (y opcionalmente Datastore.AllocateTemplate) sobre el almacenamiento de ISOs. Si habilitamos la descarga vía URL, agregamos otro permiso:

  • Repetimos Add, pero esta vez en Path ponemos el nodo donde se descargará la ISO, por ejemplo /nodes/proxmox, y asignamos el rol CustomISO.Sys. Este permiso Sys.AccessNetwork permitirá que ese usuario use la función de descarga de imágenes al nodo.

Nota: Si asignamos permisos a un API token, el usuario dueño del token debe tener al menos los mismos permisos. En Proxmox los tokens no pueden tener más privilegios que su usuario asociado, por eso hay que otorgar los permisos correspondientes también al usuario.

Finalmente, un usuario con estos permisos podrá ver y (si está permitido) subir imágenes ISO al storage dedicado (CustomISO.DataStore), y usar la función Download from URL si tiene el permiso CustomISO.Sys en el nodo. La interfaz ocultará los otros nodos y recursos a los que no tenga acceso, mostrando solo el almacenamiento de ISOs asignado.

Conclusión

En resumen, es conveniente disponer de:

  • Un almacenamiento local con cuota limitada (por ejemplo en ZFS) para ISOs de uso frecuente. Al estar en el propio servidor Proxmox, ofrece alta velocidad de transferencia y menor latencia en instalaciones críticas.

  • Un almacenamiento compartido (NFS) para ISOs de uso ocasional o archivo masivo. Esto libera espacio en disco local y permite centralizar archivos ISO en un NAS.

Esta separación mejora la seguridad y la organización. Cada usuario obtiene acceso restringido únicamente al almacenamiento de ISOs que necesita, sin tocar otros recursos. Además, definimos claramente quién puede subir ISOs (Datastore.AllocateTemplate) y quién sólo las lee (Datastore.Audit), así como la capacidad de descargar imágenes externas (Sys.AccessNetwork). Con esto optimizamos el uso del espacio en disco, evitamos cuellos de botella y facilitamos la administración de las imágenes ISO en Proxmox.