{
"meta": {
"title": "Servidor Samba en LXC | ProxMenux Documentation",
"description": "Ejecuta un servidor Samba (SMB / CIFS) dentro de un contenedor LXC de Proxmox con ProxMenux. Auto-instala samba, gestiona /etc/samba/smb.conf, usuarios smbpasswd, grupo sharedfiles para carpetas bind-mounted. Requiere un contenedor privileged.",
"ogTitle": "Servidor Samba en LXC | ProxMenux Documentation",
"ogDescription": "Expón carpetas por SMB/CIFS desde dentro de un contenedor LXC privileged. Auto-instalación, usuario smbpasswd, permisos conscientes de bind mount."
},
"header": {
"title": "Servidor Samba en LXC",
"description": "Ejecuta un servidor Samba (SMB / CIFS) dentro de un contenedor LXC de Proxmox y expón carpetas a clientes Windows / macOS / Linux en la red. ProxMenux instala samba, crea un usuario Samba con smbpasswd, gestiona /etc/samba/smb.conf y aplica permisos conscientes de bind mount cuando la carpeta compartida viene del host.",
"section": "Almacenamiento y compartición · LXC"
},
"privReq": {
"title": "Contenedor privileged requerido",
"body": "Samba impersona al usuario que conecta con setgroups() en cada tree connection (el momento en el que un cliente abre un share). En un LXC unprivileged, el kernel rechaza esa syscall porque el namespace de usuario del contenedor se crea con setgroups=deny — y smbd responde abortando el proceso worker con PANIC: sys_setgroups failed. El resultado es que smbd arranca y bindea los puertos 139/445, pero cada conexión de cliente falla con NT_STATUS_CONNECTION_DISCONNECTED. El script impone un CT privileged por esta razón y aborta si es unprivileged. No hay arreglo limpio del lado del servidor; usa un CT privileged, o ejecuta Samba dentro de una VM."
},
"what": {
"heading": "Qué hace",
"body": "El contenedor se convierte en un servidor SMB/CIFS: ejecuta smbd, expone una carpeta vía /etc/samba/smb.conf y acepta conexiones de cliente en los puertos 139 / 445. Los clientes ven el share en \\\\<ct-ip>\\<share-name> en el Explorador de Windows, smb://<ct-ip>/<share-name> en el Finder de macOS, o vía mount.cifs en Linux.",
"diagramServerLabel": "LXC (privileged) — servidor Samba",
"diagramServerDetail": "/mnt/data\n(carpeta que expones)\n\nsmbd + nmbd corriendo\n\nUsuario: \n(vía smbpasswd)\n\nForce group:\nsharedfiles",
"diagramClientLabel": "Cualquier cliente en la red",
"diagramClientDetail": "Windows: \\\\\\\nmacOS: smb:///\nLinux: mount.cifs",
"diagramArrow": "SMB / CIFS"
},
"perms": {
"heading": "Dos rutas de permisos según el tipo de carpeta",
"body": "Antes de añadir el share a smb.conf, el script comprueba si la carpeta elegida es un bind mount desde el host o una carpeta local normal dentro del CT — y aplica propiedad / permisos diferentes en consecuencia:",
"headerType": "Tipo de carpeta",
"headerAction": "Qué hace el script",
"bindType": "Bind mount desde host",
"bindTypeSubRich": "detectado vía salida de mount",
"bindActionRich": "Crea el grupo sharedfiles (GID por defecto 999, dinámico si está cogido), añade el usuario Samba a él, luego chown root:sharedfiles + chmod 2775 (SGID — los archivos nuevos heredan el grupo). Si el usuario todavía no puede escribir, aplica setfacl -m u:<user>:rwx.",
"localType": "Carpeta local dentro del CT",
"localTypeSub": "sin bind mount detectado",
"localActionRich": "Propiedad estándar: chown -R <user>:<user> + chmod -R 755. No hace falta grupo compartido porque ningún otro CT escribe en esta carpeta. Cae a setfacl si el acceso de escritura sigue faltando.",
"gidTitle": "El GID de 'sharedfiles' difiere del flujo del servidor NFS",
"gidBody": "El script del servidor Samba usa el GID 999 para sharedfiles, mientras que el flujo del servidor NFS usa el GID 101000. Si ejecutas ambos servidores en el mismo CT y quieres un único grupo compartido entre ambos protocolos, edita uno de ellos para que coincida con el otro tras la instalación (p. ej. groupmod -g 101000 sharedfiles) y reaplica la propiedad en las carpetas afectadas. Es una inconsistencia conocida en los scripts actuales."
},
"opening": {
"heading": "Abrir la herramienta",
"body": "Desde el menú principal de ProxMenux, abre Storage & Share Manager → Configure Samba Server in LXC (only privileged). ProxMenux te pide primero elegir el CT destino (y lo arranca si está parado); aborta si es unprivileged. Una vez seleccionado el CT ves este submenú con cinco opciones:",
"imageAlt": "Menú Samba Server Manager — Create / View / Delete / Status / Uninstall"
},
"howRuns": {
"heading": "Cómo se ejecuta el script (flujo Create)"
},
"modes": {
"heading": "Los tres modos de share",
"intro": "Cada modo escribe una stanza diferente en smb.conf. Los tres incluyen valid users = <username> (sin anónimo), force group = sharedfiles (para que los archivos nuevos pertenezcan al grupo compartido) y veto files = /lost+found/ (lo oculta a los clientes).",
"headerMode": "Modo",
"headerBlock": "Bloque escrito en smb.conf",
"rwMode": "Read-Write",
"roMode": "Read-Only",
"customMode": "Custom",
"customBodyRich": "Tú escribes tus propias directivas en un cuadro de texto libre. ProxMenux igualmente las envuelve en un bloque [share] con los path, valid users, force group y veto files estándar."
},
"manual": {
"heading": "Equivalente manual",
"body": "Reproduce el flujo entero a mano — cada comando se ejecuta dentro del CT vía pct exec <ctid> -- o pct enter <ctid>:"
},
"connect": {
"heading": "Conectar desde clientes",
"headerOs": "SO cliente",
"headerHow": "Cómo conectar",
"windowsOs": "Windows",
"windowsHowRich": "Explorador de archivos → barra de direcciones: \\\\<ct-ip>\\<share-name>. O Conectar a unidad de red → marca \"Conectar usando credenciales diferentes\".",
"macosOs": "macOS",
"macosHowRich": "Finder → Ir → Conectarse al servidor… → smb://<ct-ip>/<share-name>. O mount_smbfs //user@<ct-ip>/<share> /mountpoint.",
"linuxOs": "Linux",
"linuxHowRich": "mount -t cifs //<ct-ip>/<share> /mnt/x -o username=<u>,password=<p>,iocharset=utf8. O usa la página Cliente Samba en LXC si el cliente es otro CT Proxmox."
},
"view": {
"heading": "Ver shares actuales",
"body": "Parsea /etc/samba/smb.conf dentro del CT y lista cada bloque [share] (saltando [global], [homes], [printers]) con su path. Útil como inventario rápido."
},
"delete": {
"heading": "Eliminar un share",
"body": "Te deja elegir un share por nombre, elimina el bloque de smb.conf (sed borra desde [share] hasta la siguiente línea en blanco) y reinicia smbd. La propia carpeta y su contenido se dejan intactos."
},
"status": {
"heading": "Comprobar estado Samba",
"body": "Informa de si smbd y nmbd están instalados y activos, lista los usuarios Samba (pdbedit -L) e imprime las sesiones activas (smbstatus)."
},
"uninstall": {
"heading": "Desinstalar servidor Samba",
"body": "Limpieza completa tras confirmación: para + deshabilita smbd y nmbd, hace backup de smb.conf a smb.conf.backup.YYYYMMDD_HHMMSS, elimina los usuarios Samba con smbpasswd -x y hace apt-get purge de los paquetes Samba. Las propias carpetas exportadas no se borran.",
"warnTitle": "Las carpetas sobreviven — haz backup de los datos por separado",
"warnBody": "Tanto Delete share como Uninstall Samba server eliminan la configuración del share. Los datos en las carpetas exportadas se preservan. Para borrar también los datos, hazlo explícitamente con rm -rf después de que el script termine."
},
"troubleshoot": {
"heading": "Solución de problemas",
"privTitle": "Contenedor privileged requerido (el script aborta)",
"privBody": "El CT seleccionado es unprivileged y smbd no puede servir archivos ahí. Si te saltas el gate y configuras Samba a mano, smbd arranca y los puertos se abren, pero la primera conexión de cliente entra en pánico con PANIC: sys_setgroups failed en /var/log/samba/log.<client> y el cliente ve NT_STATUS_CONNECTION_DISCONNECTED. La causa es que el namespace de usuario unprivileged tiene setgroups=deny, lo que bloquea la impersonación por conexión de Samba. Ni features=keyctl=1 ni eliminar force user / force group cambian esto. Las únicas opciones viables son: convertir el CT a privileged, o mover Samba a una VM.",
"aptTitle": "apt-get install falla",
"aptIntro": "El script asume un CT de la familia Debian. En Alpine / Arch / Rocky / Alma, instala Samba a mano:",
"aptItems": [
"Alpine: apk add samba",
"Arch: pacman -S samba",
"Rocky / Alma: dnf install samba"
],
"aptOutro": "Después reejecuta el script de ProxMenux — el paso de instalación se salta cuando las herramientas ya están presentes.",
"noShareTitle": "El cliente conecta pero no puede ver el share",
"noShareBody": "Comprueba que browseable = yes está puesto en el bloque del share (por defecto para los modos rw / ro; puede faltar en custom). Comprueba también que el firewall del CT y el firewall del host Proxmox permiten TCP 445 (SMB) y 139 (NetBIOS). Algunos clientes Windows también requieren resolución de nombres — prueba la IP directamente primero.",
"authTitle": "La autenticación falla (NT_STATUS_LOGON_FAILURE)",
"authBody": "O bien la contraseña es incorrecta (las contraseñas Samba son separadas de las contraseñas de sistema — mira pdbedit -L) o el usuario no está en valid users para ese share. Resetea la contraseña con smbpasswd <user> dentro del CT.",
"groupTitle": "Los archivos escritos por el cliente aparecen con grupo incorrecto en el servidor",
"groupBody": "El script pone force group = sharedfiles en el bloque del share, así que los archivos nuevos deberían ser del grupo sharedfiles. Si no lo son, el bit SGID en el directorio padre puede haberse perdido (alguien ejecutó chmod a mano). Reaplica: chmod 2775 /mnt/<share>.",
"bothTitle": "Compartir la misma carpeta por NFS y Samba",
"bothBody": "ProxMenux usa GIDs diferentes para sharedfiles en cada script (Samba: 999, NFS: 101000). Si sirves la misma carpeta por ambos, decide un GID y alinea ambos. El fix más simple: tras ejecutar ambos scripts, edita el GID más pequeño:"
},
"related": {
"heading": "Relacionado",
"items": [
{
"href": "/docs/storage-share/lxc-samba-client",
"label": "Cliente Samba en LXC",
"tail": " — el inverso: monta shares Samba externos desde dentro de un CT."
},
{
"href": "/docs/storage-share/lxc-nfs-server",
"label": "Servidor NFS en LXC",
"tail": " — página hermana, mismo patrón con NFS en vez de CIFS."
},
{
"href": "/docs/storage-share/host-samba",
"label": "Samba / CIFS como almacenamiento de Proxmox",
"tailRich": " — una vez que tu CT esté exponiendo, registra ese share en Proxmox para que aparezca bajo Datacenter → Storage."
}
]
}
}