Cómo Añadir Recursos NFS a Proxmox y cualquier contenedor

Uno de los problemas de los contenedores sin privilegios es la imposibilidad de cargar carpetas de red vía fstab. Además, si ese contenedor está expuesto, corremos el riesgo de que un atacante puede acceder a nuestras credenciales para acceder al contenido de nuestra red. Para evitar esto, existe otra vía distinta para añadir un recurso de red a un contenedor de Proxmox.

Paso 1: Compartir el recurso en el origen

En el caso del ejemplo, vamos a crear una carpeta compartida vía nfs.

Que es nfs y como funciona

NFS es un protocolo para compartir carpetas y archivos por red. Un equipo hace de servidor y “exporta” una carpeta; otro hace de cliente y la monta. Así, el cliente accede a esos archivos casi como si fueran locales.

En seguridad, NFS tradicionalmente no funciona como “usuario y contraseña” al estilo de otros servicios. Lo habitual es que el servidor controle qué equipos pueden acceder a una carpeta exportada, por ejemplo por IP, nombre de host o red, mediante la configuración de exportación.

El punto clave es que, en el modo clásico AUTH_SYS (o sec=sys), el servidor confía en la identidad Unix que le dice el cliente: UID y GID. Eso significa que la seguridad depende mucho de que los clientes sean de confianza, porque esa identidad no va protegida criptográficamente.

En definitiva, nfs no hace uso de usuarios y contraseñas, en el momento de compartir el recurso, se indica que direcciones ip o que redes tienen acceso al recurso, de forma que la conexión desde esos equipos se realiza de forma directa y transparente.

Maproot User

Maproot User en NFS es la opción que indica a qué usuario local del servidor se va a traducir el acceso que llega como root desde el cliente. Es decir, cuando en el equipo cliente alguien accede como UID 0 (root), el servidor no lo trata necesariamente como root real, sino como el usuario que pongas en Maproot User.

Ejemplo:

  • Si pones Maproot User = nobody o un usuario sin privilegios, el root del cliente quedará limitado en el servidor.
  • Si pones Maproot User = root, el root del cliente actuará como root en el servidor, lo que da mucho poder y suele ser más arriesgado. El manual de FreeBSD describe -maproot=user precisamente como el credencial que se usará para el acceso remoto por root.

Creando el recurso nfs

En nuestro ejemplo, vamos a crear el recurso desde TrueNas por lo que una vez que tenemos el datashet o la ruta de la carpeta, accedemos a la sección «Shares» para generar el recurso compartido en nfs.

En nuestro caso, seleccionamos la ruta del datashet, añadimos una descripción que nos permita identificar el recurso dentro de TrueNas y añadimos la ip o el nombre de los host que tendrán acceso al recurso.

Una vez realizadas estas operaciones, el recurso debería estar disponible para poder añadirlo a Proxmox.

Dentro de las opciones avanzadas, existe la posibilidad de marcar el recurso como solo lectura, pero a la hora de añadirlo a proxmox debe estar desactivado, ya que en el momento de crear el enlace con el recurso nfs, proxmox verifica que se puede escribir y además añade dos carpetas.

Una vez añadido el recuso, si nos interesará, sería posible activar la opción para que se convierta en «read only», de forma que los archivos no puedan ser modificados, pero es imprescindible que se pueda escribir en el recurso en el momento de añadirlo.

En nuestro caso, como la carpeta a incluir solo tiene que ser de lectura, entre otras cosas porque el contenedor estará expuesto a internet, una vez añadido, volveremos a proxmox para activar la opción «readonly», de forma que tanto Proxmox como los lxc a los que se añada, no podrán realizar ninguna modificación en el contenido.

En las opciones avanzadas, para permitir la escritura es necesario añadir un usuario en Maproot User, podemos crear uno o podemos utilizar uno de los existentes, ya que será el usuario que llegará cuando se acceda desde la cuenta root remota.

Paso 2: Añadiendo el recurso a Proxmox

En este paso, vamos a añadir el recurso compartido como almacenamiento en nuestro servidor. En el centro de datos acudiremos a la pestaña de almacenamiento y añadiremos uno de tipo NFS.

En el cuadro de dialogo que aparece debemos rellenar los siguientes datos para añadir el recurso. ID, que es una etiqueta identificativa dentro de Proxmox, por lo que pondremos un nombre que nos permita identificar el recurso, la dirección ip o el host del servidor en el que se encuentra el recurso y una vez introducida la dirección, en la sección Export aparecen los recursos compartidos para la ip de este servidor, y seleccionaremos el que queremos añadir.

Desde el terminal de nuestro nodo, podemos acceder a /mnt/pve/recurso_compartido y verificaremos que el contenido se encuentra accesible.

cd /mnt/pve/recurso
ls

Cambiando el recurso a solo lectura

En nuestro caso, no queremos que el recurso esté disponible para escritura, simplemente queremos que el contenido se encuentre disponible para lectura, por lo que una vez añadido, acudiremos de nuevo a nuestro TrueNas para marcar el recuso como «readonly», de forma que Proxmox o los contenedores no puedan modificar el contenido. Si tu intención es que el contenedor pueda modificar los archivos, este paso no es necesario.

Paso 3: Añadir el recurso compartido al contenedor lxc

Para añadir el recurso compartido al LXC utilizaremos el siguiente comando:

pct set 128 -mp0 /mnt/pve/recurso,mp=/mnt/recurso en lxc

«recurso» será la carpeta que aparece en nuestro Proxmox en la ruta /mnt/pve que queremos pasar al lxc y «recurso en lxc» será el nombre que tendrá dentro del contenedor.

-mp0 indica el punto de montaje de la unidad remota, de forma que si necesitas añadir varios recursos, hay que incrementar el número ya que si utilizas el mismo, sobreescribes el punto de montaje anterior.

Una vez añadido el recurso, es necesario reiniciar el nodo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *