# 📘 Guía Completa: Compartir Recursos entre Proxmox Host y Contenedores LXC ## 📋 Índice ### 🎯 Conceptos Fundamentales - [¿Qué son los permisos en Linux?](#qué-son-los-permisos-en-linux) - [Usuarios y grupos en Linux](#usuarios-y-grupos-en-linux) - [¿Qué son las ACLs?](#qué-son-las-acls) - [Contenedores privilegiados vs no privilegiados](#contenedores-privilegiados-vs-no-privilegiados) ### 🛠️ Configuración Práctica - [Crear directorio local compartido](#crear-directorio-local-compartido) - [Configurar recurso NFS](#configurar-recurso-nfs) - [Configurar recurso Samba](#configurar-recurso-samba) - [Montar recursos en contenedores](#montar-recursos-en-contenedores) ### 🔧 Casos Prácticos - [Ejemplo completo: NFS](#ejemplo-completo-nfs) - [Ejemplo completo: Samba](#ejemplo-completo-samba) - [Ejemplo completo: Directorio local](#ejemplo-completo-directorio-local) ### 🚨 Solución de Problemas - [Errores comunes y soluciones](#errores-comunes-y-soluciones) - [Comandos de verificación](#comandos-de-verificación) --- ## 🎯 Conceptos Fundamentales ### ¿Qué son los permisos en Linux? En Linux, cada archivo y directorio tiene **permisos** que determinan quién puede hacer qué con ellos. #### Tipos de permisos: - **r (read/lectura)**: Ver el contenido - **w (write/escritura)**: Modificar el contenido - **x (execute/ejecución)**: Ejecutar archivos o acceder a directorios #### Niveles de permisos: - **Usuario propietario (u)**: El dueño del archivo - **Grupo propietario (g)**: El grupo al que pertenece el archivo - **Otros (o)**: Todos los demás usuarios #### Ejemplo práctico: ```bash ls -l /mnt/shared_data/archivo.txt -rw-rw-r-- 1 root sharedfiles 1024 sep 8 archivo.txt ``` **Desglose:** - `-rw-rw-r--`: Permisos (explicado abajo) - `root`: Usuario propietario - `sharedfiles`: Grupo propietario - `1024`: Tamaño en bytes **Permisos desglosados:** - Primer `-`: Tipo de archivo (- = archivo, d = directorio) - `rw-`: Usuario puede leer y escribir, no ejecutar - `rw-`: Grupo puede leer y escribir, no ejecutar - `r--`: Otros solo pueden leer ### Usuarios y grupos en Linux #### ¿Qué es un usuario? Un **usuario** es una identidad en el sistema. Cada usuario tiene: - **UID (User ID)**: Número único que lo identifica - **Nombre**: Como `root`, `www-data`, `nextcloud` - **Grupo principal**: Su grupo por defecto #### ¿Qué es un grupo? Un **grupo** es una colección de usuarios que comparten permisos. Cada grupo tiene: - **GID (Group ID)**: Número único que lo identifica - **Nombre**: Como `sharedfiles`, `www-data`, `users` #### ¿Por qué usar grupos en Proxmox? ```bash # Sin grupo común - PROBLEMÁTICO # Host: archivo pertenece a "root" # LXC1: usuario "www-data" no puede escribir # LXC2: usuario "nextcloud" no puede escribir # Con grupo común - SOLUCIÓN # Host: archivo pertenece a grupo "sharedfiles" # LXC1: "www-data" está en grupo "sharedfiles" → puede escribir # LXC2: "nextcloud" está en grupo "sharedfiles" → puede escribir ``` #### Comandos útiles: ```bash # Ver usuarios del sistema cat /etc/passwd # Ver grupos del sistema cat /etc/group # Ver a qué grupos pertenece un usuario groups www-data # Ver información completa de un usuario id www-data ``` ### ¿Qué son las ACLs? **ACL (Access Control Lists)** son permisos **extendidos** que van más allá de los permisos básicos de Linux. #### ¿Por qué necesitamos ACLs? Los permisos básicos solo permiten **un usuario** y **un grupo** por archivo. Las ACLs permiten: - Múltiples usuarios con diferentes permisos - Múltiples grupos con diferentes permisos - Permisos por defecto para archivos nuevos #### Ejemplo sin ACLs (limitado): ```bash # Solo podemos dar permisos a UN grupo chown root:sharedfiles /mnt/shared_data chmod 775 /mnt/shared_data # ¿Qué pasa si necesitamos que otro grupo también tenga acceso? ``` #### Ejemplo con ACLs (flexible): ```bash # Podemos dar permisos a MÚLTIPLES grupos setfacl -m g:sharedfiles:rwx /mnt/shared_data setfacl -m g:developers:rwx /mnt/shared_data setfacl -m g:backup:r-x /mnt/shared_data ``` #### ¿Por qué son cruciales con NFS? **NFS no entiende nombres, solo números (UID/GID)**: ```bash # En el servidor NFS # Usuario "www-data" tiene UID 33, GID 33 # En el cliente NFS # Usuario "www-data" tiene UID 33, GID 33 # ✅ Coinciden → funciona # Pero si los números no coinciden: # Servidor: "www-data" UID 33 # Cliente: "www-data" UID 1001 # ❌ NFS ve usuarios diferentes → permisos rotos ``` **Las ACLs solucionan esto** asegurando que el grupo tenga permisos sin importar qué usuario específico cree el archivo. ### Contenedores privilegiados vs no privilegiados #### Contenedor Privilegiado - **UID/GID idénticos** al host - `root` en contenedor = `root` en host (UID 0) - **Más simple** de configurar - **Menos seguro** (escape = root en host) #### Contenedor No Privilegiado - **UID/GID desplazados** +100000 - `root` en contenedor (UID 0) = usuario 100000 en host - **Más complejo** de configurar - **Más seguro** (escape = usuario sin privilegios) #### Mapeo de IDs en contenedores no privilegiados: ```bash # Contenedor → Host UID 0 → UID 100000 (root) UID 33 → UID 100033 (www-data) UID 1000 → UID 101000 (usuario normal) GID 0 → GID 100000 (root) GID 33 → GID 100033 (www-data) GID 1000 → GID 101000 (grupo personalizado) ``` --- ## 🛠️ Configuración Práctica ### Crear directorio local compartido #### Paso 1: Crear directorio y grupo en el host ```bash # Crear directorio mkdir -p /mnt/shared_data # Crear grupo universal (si no existe) groupadd -g 101000 sharedfiles 2>/dev/null || true # Verificar que se creó correctamente getent group sharedfiles # Salida: sharedfiles:x:101000: ``` #### Paso 2: Configurar permisos base ```bash # Asignar propietario y grupo chown root:sharedfiles /mnt/shared_data # Permisos con setgid (bit especial) chmod 2775 /mnt/shared_data ``` **¿Qué significa `2775`?** - **2**: Bit setgid → archivos nuevos heredan el grupo `sharedfiles` - **7**: Propietario (root) → lectura, escritura, ejecución - **7**: Grupo (sharedfiles) → lectura, escritura, ejecución - **5**: Otros → lectura, ejecución (sin escritura) #### Paso 3: Aplicar ACLs ```bash # ACLs para contenido existente setfacl -R -m g:sharedfiles:rwx /mnt/shared_data # ACLs por defecto para contenido nuevo setfacl -d -m g:sharedfiles:rwx /mnt/shared_data # Verificar ACLs aplicadas getfacl /mnt/shared_data ``` ### Configurar recurso NFS #### Paso 1: Instalar servidor NFS ```bash # En Debian/Ubuntu apt update apt install -y nfs-kernel-server # En CentOS/RHEL yum install -y nfs-utils systemctl enable nfs-server systemctl start nfs-server ``` #### Paso 2: Configurar exportación ```bash # Editar archivo de exportaciones nano /etc/exports # Añadir línea (ajustar red según tu configuración) /mnt/shared_data 192.168.1.0/24(rw,sync,no_subtree_check,all_squash,anonuid=0,anongid=101000) ``` **Explicación de opciones:** - `rw`: Lectura y escritura - `sync`: Confirma escritura antes de responder - `no_subtree_check`: Evita verificaciones innecesarias - `all_squash`: Mapea todos los usuarios al anónimo - `anonuid=0`: Usuario anónimo = root (UID 0) - `anongid=101000`: Grupo anónimo = sharedfiles (GID 101000) #### Paso 3: Activar exportación ```bash # Recargar configuración exportfs -ra # Verificar exportaciones activas exportfs -v showmount -e localhost ``` #### Paso 4: Configurar firewall (si está activo) ```bash # UFW (Ubuntu) ufw allow from 192.168.1.0/24 to any port nfs # Firewalld (CentOS) firewall-cmd --permanent --add-service=nfs firewall-cmd --reload ``` ### Configurar recurso Samba #### Paso 1: Instalar servidor Samba ```bash # En Debian/Ubuntu apt update apt install -y samba samba-common-bin # En CentOS/RHEL yum install -y samba samba-client systemctl enable smb nmb systemctl start smb nmb ``` #### Paso 2: Configurar compartición ```bash # Hacer backup de configuración original cp /etc/samba/smb.conf /etc/samba/smb.conf.backup # Editar configuración nano /etc/samba/smb.conf ``` Añadir al final del archivo: ```ini [shared_data] comment = Directorio compartido path = /mnt/shared_data browseable = yes read only = no valid users = @sharedfiles force group = sharedfiles create mask = 0664 directory mask = 2775 force create mode = 0664 force directory mode = 2775 ``` **Explicación de opciones:** - `valid users = @sharedfiles`: Solo miembros del grupo pueden acceder - `force group = sharedfiles`: Fuerza que archivos pertenezcan al grupo - `create mask = 0664`: Permisos para archivos nuevos - `directory mask = 2775`: Permisos para directorios nuevos (con setgid) #### Paso 3: Crear usuario Samba ```bash # Crear usuario del sistema (si no existe) useradd -r -s /bin/false -g sharedfiles sambauser # Crear usuario Samba smbpasswd -a sambauser # Te pedirá contraseña # Añadir usuario existente al grupo usermod -aG sharedfiles sambauser ``` #### Paso 4: Reiniciar servicios ```bash # Verificar configuración testparm # Reiniciar servicios systemctl restart smbd nmbd ``` ### Montar recursos en contenedores #### Paso 1: Configurar contenedor privilegiado **¿Por qué necesitamos configurar grupos en contenedores privilegiados?** Aunque los contenedores privilegiados comparten los mismos UID/GID que el host, **NO comparten automáticamente los grupos**. Cada contenedor tiene su propio `/etc/group`. ```bash # 1.1 Entrar al contenedor pct exec 100 -- bash # 1.2 Crear grupo idéntico al host groupadd -g 101000 sharedfiles # ¿Por qué GID 101000? # Porque es el mismo GID que usamos en el host # En privilegiados: GID contenedor = GID host # 1.3 Añadir usuarios relevantes al grupo usermod -aG sharedfiles root usermod -aG sharedfiles www-data # Si tienes otros usuarios específicos usermod -aG sharedfiles nextcloud 2>/dev/null || true usermod -aG sharedfiles jellyfin 2>/dev/null || true # 1.4 Verificar membresía groups root groups www-data # 1.5 Salir del contenedor exit ``` #### Paso 2: Configurar contenedor no privilegiado ```bash # 2.1 Entrar al contenedor pct exec 101 -- bash # 2.2 Crear grupo con GID mapeado groupadd -g 1000 sharedfiles # Importante: GID 1000 en contenedor = GID 101000 en host # 2.3 Listar todos los usuarios disponibles echo "Usuarios disponibles en el contenedor:" awk -F: '$3>=1000 && $1!="nobody" {print "- " $1 " (UID: " $3 ")"}' /etc/passwd # También mostrar usuarios del sistema comunes echo "Usuarios del sistema comunes:" for user in root www-data nginx apache mysql postgres redis; do if id "$user" >/dev/null 2>&1; then echo "- $user ($(id -u $user))" fi done # 2.4 Añadir usuarios al grupo # Usuarios básicos siempre necesarios usermod -aG sharedfiles root usermod -aG sharedfiles www-data # Usuarios específicos según aplicaciones instaladas usermod -aG sharedfiles nextcloud 2>/dev/null || true usermod -aG sharedfiles jellyfin 2>/dev/null || true usermod -aG sharedfiles plex 2>/dev/null || true usermod -aG sharedfiles mysql 2>/dev/null || true usermod -aG sharedfiles postgres 2>/dev/null || true # 2.5 Verificar configuración echo "Verificando configuración de usuarios:" for user in root www-data nextcloud jellyfin; do if id "$user" >/dev/null 2>&1; then echo "Usuario $user:" id "$user" echo "" fi done # 2.6 Salir del contenedor exit ``` **Comando para añadir TODOS los usuarios automáticamente:** ```bash # Dentro del contenedor no privilegiado # Añadir todos los usuarios con UID >= 1000 al grupo sharedfiles awk -F: '$3>=1000 && $1!="nobody" {print $1}' /etc/passwd | while read user; do usermod -aG sharedfiles "$user" echo "Añadido $user al grupo sharedfiles" done # Añadir usuarios del sistema importantes for user in root www-data nginx apache mysql postgres redis; do if id "$user" >/dev/null 2>&1; then usermod -aG sharedfiles "$user" echo "Añadido $user al grupo sharedfiles" fi done ``` #### Paso 3: Montar directorios en contenedores ```bash # 3.1 Para contenedor privilegiado (ID 100) pct set 100 -mp0 /mnt/shared_data,mp=/mnt/shared,backup=0,acl=1,shared=1 # 3.2 Para contenedor no privilegiado (ID 101) pct set 101 -mp0 /mnt/shared_data,mp=/mnt/shared,backup=0,acl=1,shared=1 # 3.3 Reiniciar contenedores para activar montajes pct reboot 100 pct reboot 101 # Esperar a que arranquen sleep 15 ``` **Explicación de parámetros:** - `mp0`: Punto de montaje 0 (puedes usar mp1, mp2, etc.) - `/mnt/shared_data`: Ruta en el host - `mp=/mnt/shared`: Ruta dentro del contenedor - `backup=0`: Excluir del backup automático - `acl=1`: Habilitar soporte para ACLs - `shared=1`: **IMPORTANTE** - Permite migración en clusters sin copiar datos --- ## 🔧 Casos Prácticos ### Ejemplo completo: NFS #### Escenario: Servidor NFS en host, cliente en contenedor **Paso 1: Preparar servidor NFS en host** ```bash # Crear directorio y configurar permisos mkdir -p /mnt/nfs_export groupadd -g 101000 sharedfiles 2>/dev/null || true chown root:sharedfiles /mnt/nfs_export chmod 2775 /mnt/nfs_export setfacl -R -m g:sharedfiles:rwx /mnt/nfs_export setfacl -d -m g:sharedfiles:rwx /mnt/nfs_export # Configurar exportación NFS echo "/mnt/nfs_export 192.168.1.0/24(rw,sync,no_subtree_check,all_squash,anonuid=0,anongid=101000)" >> /etc/exports exportfs -ra ``` **Paso 2: Montar NFS desde otro host** ```bash # En otro servidor Proxmox mkdir -p /mnt/nfs_client # Montar temporalmente para probar mount -t nfs 192.168.1.50:/mnt/nfs_export /mnt/nfs_client # Hacer persistente tras reinicio echo "192.168.1.50:/mnt/nfs_export /mnt/nfs_client nfs rw,hard,nofail,rsize=131072,wsize=131072,timeo=600,retrans=2,_netdev 0 0" >> /etc/fstab ``` **Explicación del fstab:** - `rw`: Lectura y escritura - `hard`: Reintentar indefinidamente si hay problemas - `nofail`: No bloquear arranque si no está disponible - `rsize/wsize=131072`: Tamaño de buffer (128KB) para mejor rendimiento - `timeo=600`: Timeout de 60 segundos (600 décimas) - `retrans=2`: Reintentar 2 veces antes de timeout - `_netdev`: Esperar a que la red esté lista - `0 0`: No hacer dump ni fsck (siempre para recursos de red) **Paso 3: Configurar contenedor para usar NFS** ```bash # Configurar permisos en el host cliente groupadd -g 101000 sharedfiles 2>/dev/null || true chown root:sharedfiles /mnt/nfs_client setfacl -R -m g:sharedfiles:rwx /mnt/nfs_client setfacl -d -m g:sharedfiles:rwx /mnt/nfs_client # Montar en contenedor pct set 102 -mp0 /mnt/nfs_client,mp=/mnt/shared_nfs,backup=0,acl=1,shared=1 pct reboot 102 ``` ### Ejemplo completo: Samba #### Escenario: Montar recurso Samba externo en host y compartir con contenedores **Paso 1: Montar Samba en host** ```bash # Instalar cliente Samba apt install -y cifs-utils # Crear directorio de montaje mkdir -p /mnt/samba_share # Crear archivo de credenciales cat > /etc/cifs-credentials << EOF username=tu_usuario password=tu_contraseña domain=tu_dominio EOF # Proteger credenciales chmod 600 /etc/cifs-credentials # Montar temporalmente para probar mount -t cifs //192.168.1.60/shared_folder /mnt/samba_share -o credentials=/etc/cifs-credentials,iocharset=utf8,vers=3.0 # Hacer persistente echo "//192.168.1.60/shared_folder /mnt/samba_share cifs credentials=/etc/cifs-credentials,iocharset=utf8,vers=3.0,_netdev,nofail 0 0" >> /etc/fstab ``` **Paso 2: Configurar permisos para contenedores** ```bash # Configurar grupo y permisos groupadd -g 101000 sharedfiles 2>/dev/null || true chown root:sharedfiles /mnt/samba_share chmod 2775 /mnt/samba_share setfacl -R -m g:sharedfiles:rwx /mnt/samba_share setfacl -d -m g:sharedfiles:rwx /mnt/samba_share ``` **Paso 3: Montar en contenedores** ```bash # Contenedor privilegiado pct set 103 -mp0 /mnt/samba_share,mp=/mnt/samba,backup=0,acl=1,shared=1 # Contenedor no privilegiado pct set 104 -mp0 /mnt/samba_share,mp=/mnt/samba,backup=0,acl=1,shared=1 # Reiniciar contenedores pct reboot 103 104 ``` ### Ejemplo completo: Directorio local #### Escenario: Compartir directorio local del host con múltiples contenedores **Paso 1: Crear y configurar directorio** ```bash # Crear directorio principal mkdir -p /mnt/local_shared # Crear subdirectorios por aplicación mkdir -p /mnt/local_shared/{nextcloud,jellyfin,backup,common} # Configurar permisos base groupadd -g 101000 sharedfiles 2>/dev/null || true chown -R root:sharedfiles /mnt/local_shared chmod -R 2775 /mnt/local_shared # Aplicar ACLs recursivamente setfacl -R -m g:sharedfiles:rwx /mnt/local_shared setfacl -R -d -m g:sharedfiles:rwx /mnt/local_shared ``` **Paso 2: Montar en múltiples contenedores** ```bash # Nextcloud (contenedor 105) - acceso completo pct set 105 -mp0 /mnt/local_shared,mp=/mnt/shared,backup=0,acl=1,shared=1 # Jellyfin (contenedor 106) - solo su directorio pct set 106 -mp0 /mnt/local_shared/jellyfin,mp=/mnt/media,backup=0,acl=1,shared=1 # Backup (contenedor 107) - acceso de solo lectura pct set 107 -mp0 /mnt/local_shared,mp=/mnt/backup_source,backup=0,acl=1,shared=1,ro=1 # Reiniciar todos pct reboot 105 106 107 ``` --- ## 🚨 Solución de Problemas ### Errores comunes y soluciones #### Error: "Permission denied" al escribir desde contenedor no privilegiado **Síntomas:** ```bash # Dentro del contenedor touch /mnt/shared/test.txt # touch: cannot touch '/mnt/shared/test.txt': Permission denied ``` **Diagnóstico:** ```bash # En el host, verificar permisos ls -la /mnt/shared_data/ getfacl /mnt/shared_data/ # En el contenedor, verificar usuario id groups ``` **Soluciones:** ```bash # 1. Verificar que el grupo existe en el contenedor pct exec 101 -- getent group sharedfiles # 2. Si no existe, crearlo pct exec 101 -- groupadd -g 1000 sharedfiles # 3. Añadir usuario al grupo pct exec 101 -- usermod -aG sharedfiles www-data # 4. Verificar ACLs en el host setfacl -R -m g:sharedfiles:rwx /mnt/shared_data setfacl -d -m g:sharedfiles:rwx /mnt/shared_data ``` #### Error: "Stale file handle" en montajes NFS **Síntomas:** ```bash ls /mnt/nfs_mount # ls: cannot access '/mnt/nfs_mount': Stale file handle ``` **Solución:** ```bash # Desmontar forzadamente umount -f /mnt/nfs_mount # Limpiar cache NFS echo 3 > /proc/sys/vm/drop_caches # Volver a montar mount -t nfs servidor:/export /mnt/nfs_mount ``` #### Error: Archivos aparecen con propietario incorrecto **Síntomas:** ```bash ls -l /mnt/shared/ # -rw-r--r-- 1 100033 100033 1024 sep 8 archivo.txt ``` **Explicación:** El archivo muestra UID/GID numéricos porque el sistema no encuentra nombres correspondientes. **Solución:** ```bash # Verificar mapeo de IDs # En contenedor no privilegiado: UID 33 → Host UID 100033 # Crear grupo con GID correcto en host si es necesario groupadd -g 100033 container-www-data # O mejor, usar el grupo universal chown -R root:sharedfiles /mnt/shared/ ``` #### Error: "Transport endpoint is not connected" en Samba **Síntomas:** ```bash ls /mnt/samba_mount # ls: cannot access '/mnt/samba_mount': Transport endpoint is not connected ``` **Solución:** ```bash # Desmontar umount /mnt/samba_mount # Verificar conectividad ping servidor_samba smbclient -L //servidor_samba -U usuario # Remontar con opciones específicas mount -t cifs //servidor/share /mnt/samba_mount -o username=user,vers=3.0,iocharset=utf8 ``` ### Comandos de verificación #### Verificar configuración de permisos ```bash # Verificar permisos básicos ls -la /mnt/shared_data/ # Verificar ACLs getfacl /mnt/shared_data/ # Verificar grupos getent group sharedfiles # Verificar usuarios en grupo getent group sharedfiles | cut -d: -f4 ``` #### Verificar montajes NFS ```bash # Ver exportaciones disponibles showmount -e servidor_nfs # Ver montajes activos mount | grep nfs df -h | grep nfs # Verificar estadísticas NFS nfsstat -c # Cliente nfsstat -s # Servidor ``` #### Verificar montajes Samba ```bash # Ver recursos compartidos disponibles smbclient -L //servidor_samba -U usuario # Ver montajes activos mount | grep cifs df -h | grep cifs # Probar conectividad smbclient //servidor/share -U usuario ``` #### Verificar configuración de contenedores ```bash # Ver configuración de contenedor cat /etc/pve/lxc/101.conf | grep mp # Ver montajes dentro del contenedor pct exec 101 -- df -h pct exec 101 -- mount | grep /mnt # Verificar permisos dentro del contenedor pct exec 101 -- ls -la /mnt/shared/ pct exec 101 -- getfacl /mnt/shared/ ``` #### Probar escritura desde contenedores ```bash # Crear archivo de prueba desde contenedor privilegiado pct exec 100 -- bash -c 'echo "Prueba desde privilegiado" > /mnt/shared/test_privileged.txt' # Crear archivo de prueba desde contenedor no privilegiado pct exec 101 -- bash -c 'echo "Prueba desde no privilegiado" > /mnt/shared/test_unprivileged.txt' # Verificar en el host ls -la /mnt/shared_data/test_*.txt getfacl /mnt/shared_data/test_*.txt ``` #### Script de diagnóstico completo ```bash #!/bin/bash # Guardar como: diagnostico_permisos.sh echo "=== DIAGNÓSTICO DE PERMISOS COMPARTIDOS ===" echo echo "1. Verificando directorio compartido:" ls -la /mnt/shared_data/ echo echo "2. Verificando ACLs:" getfacl /mnt/shared_data/ echo echo "3. Verificando grupo sharedfiles:" getent group sharedfiles echo echo "4. Verificando montajes NFS:" mount | grep nfs echo echo "5. Verificando montajes Samba:" mount | grep cifs echo echo "6. Verificando configuración de contenedores:" for ct in $(pct list | awk 'NR>1 {print $1}'); do echo "Contenedor $ct:" grep mp /etc/pve/lxc/$ct.conf 2>/dev/null || echo " Sin montajes configurados" done echo echo "7. Probando escritura desde host:" if touch /mnt/shared_data/test_host.txt 2>/dev/null; then echo " ✅ Host puede escribir" rm -f /mnt/shared_data/test_host.txt else echo " ❌ Host NO puede escribir" fi echo echo "=== FIN DEL DIAGNÓSTICO ===" ``` --- ## 📝 Resumen de mejores prácticas ### ✅ Configuración correcta 1. **Usar grupo universal** `sharedfiles` con GID 101000 2. **Aplicar setgid** (chmod 2775) para herencia automática 3. **Configurar ACLs** por defecto para garantizar permisos 4. **Usar shared=1** en montajes para compatibilidad con clusters 5. **Excluir de backups** (backup=0) para evitar duplicación 6. **Habilitar ACLs** (acl=1) en montajes de contenedores ### ❌ Errores a evitar 1. No crear el grupo en los contenedores 2. Olvidar el bit setgid (2775) 3. No aplicar ACLs por defecto 4. Usar rutas diferentes entre nodos del cluster 5. No configurar _netdev en fstab para recursos de red 6. Usar fsck (último número ≠ 0) en recursos de red ### 🔧 Comandos esenciales ```bash # Configuración básica de directorio compartido mkdir -p /mnt/shared_data groupadd -g 101000 sharedfiles chown root:sharedfiles /mnt/shared_data chmod 2775 /mnt/shared_data setfacl -R -m g:sharedfiles:rwx /mnt/shared_data setfacl -d -m g:sharedfiles:rwx /mnt/shared_data # Montaje en contenedor pct set ID -mp0 /mnt/shared_data,mp=/mnt/shared,backup=0,acl=1,shared=1 # Configuración en contenedor no privilegiado pct exec ID -- groupadd -g 1000 sharedfiles pct exec ID -- usermod -aG sharedfiles www-data ``` Esta guía te permitirá configurar correctamente recursos compartidos entre Proxmox y contenedores LXC, garantizando permisos adecuados y compatibilidad con clusters. ```