{ "meta": { "title": "Servidor Samba em LXC | ProxMenux Documentação", "description": "Execute um servidor Samba (SMB / CIFS) em um contêiner LXC Proxmox com o ProxMenux. Instala samba automaticamente e gerencia /etc/samba/smb.conf, usuários smbpasswd e o grupo sharedfiles para pastas em bind mounts. Exige um contêiner com privilégios.", "ogTitle": "Servidor Samba em LXC | ProxMenux Documentação", "ogDescription": "Disponibilize pastas por SMB/CIFS de um LXC com privilégios. Instalação automática, usuário smbpasswd e permissões adaptadas a bind mounts." }, "header": { "title": "Servidor Samba em LXC", "description": "Execute um servidor Samba (SMB / CIFS) dentro de um container Proxmox LXC e exponha pastas para clientes Windows / macOS / Linux na rede. ProxMenux instala samba, cria um usuário Samba com smbpasswd, gerencia /etc/samba/smb.conf, e aplica permissões adaptadas a bind mounts quando a pasta compartilhada vem do host.", "section": "Armazenamento e Compartilhamento · LXC" }, "privReq": { "title": "Recipiente privilegiado necessário", "body": "Samba personifica o usuário de conexão com setgroups() em cada conexão em árvore (no momento em que um cliente abre um compartilhamento). Em um LXC sem privilégios, o kernel rejeita esse syscall porque o espaço de nomes de usuário do container é criado com setgroups=deny — e o smbd responde abortando o processo de worker com PANIC: sys_setgroups failed. O resultado é que o smbd inicia e liga as portas 139/445, mas toda conexão com o cliente falha com o NT_STATUS_CONNECTION_DISCONNECTED. O script impõe um CT privilegiado por esta razão e interrompe a execução se o CT não tiver privilégios. Não há correção limpa no lado do servidor; use um CT privilegiado ou execute Samba dentro de uma VM." }, "what": { "heading": "O que isto faz", "body": "O contêiner torna-se um servidor SMB/CIFS: ele roda smbd, expõe uma pasta via /etc/samba/smb.conf e aceita conexões de cliente em portas 139 / 445. Os clientes veem o compartilhamento em \\\\<ct-ip>\\<share-name> no Windows Explorer, smb://<ct-ip>/<share-name> no macOS Finder, ou via mount.cifs no Linux.", "diagramServerLabel": "LXC (privilegiado) — Servidor Samba", "diagramServerDetail": "/mnt/data\n(pasta compartilhada)\n\nsmbd + nmbd em execução\n\nUsuário: \n(via smbpasswd)\n\nGrupo imposto:\nsharedfiles", "diagramClientLabel": "Qualquer cliente na rede", "diagramClientDetail": "Windows: \\\\\\\nmacOS: smb:///\nLinux: mount.cifs", "diagramArrow": "SMB / CIFS" }, "perms": { "heading": "Dois caminhos de permissões, dependendo do tipo de pasta", "body": "Antes de adicionar o compartilhamento ao smb.conf, o script verifica se a pasta escolhida é uma montagem bind do host ou uma pasta local regular dentro do CT – e aplica diferentes permissões de propriedade em conformidade:", "headerType": "Tipo de pasta", "headerAction": "O que o script faz", "bindType": "Montagem de ligação da máquina", "bindTypeSubRich": "detectado através da saída mount", "bindActionRich": "Cria o grupo sharedfiles (padrão GID 999, dinâmico se tomado), adiciona o usuário Samba a ele, em seguida, chown root:sharedfiles + chmod 2775 (SGID — novos arquivos herdam o grupo). Se o usuário ainda não consegue escrever, aplica setfacl -m u:<user>:rwx.", "localType": "Pasta local dentro do CT", "localTypeSub": "nenhuma montagem de ligação detectada", "localActionRich": "Propriedade padrão: chown -R <user>:<user> + chmod -R 755. Nenhum grupo compartilhado é necessário porque nenhum outro CT escreve para esta pasta. Regressa ao setfacl se o acesso de escrita ainda estiver ausente.", "gidTitle": "GID para 'sharedfiles' difere do fluxo do servidor NFS", "gidBody": "O script do servidor Samba usa GID 999 para sharedfiles, enquanto o fluxo do servidor NFS usa GID 101000. Se você executar ambos os servidores no mesmo CT e quiser um único grupo compartilhado em ambos os protocolos, edite um deles para corresponder ao outro após a instalação (por exemplo. groupmod -g 101000 sharedfiles) e reaplicar a propriedade nas pastas afetadas. Esta é uma incoerência conhecida nos scripts atuais." }, "opening": { "heading": "Abrir a ferramenta", "body": "No menu principal, abra Storage & Share Manager → Configure Samba Server in LXC. Apenas CTs com privilégios são listados. Escolha o CT de destino; o script o inicia se estiver parado e recusa CTs sem privilégios. O menu oferece cinco opções.", "imageAlt": "Samba Server Manager menu — Criar / Ver / Apagar / Estado / Desinstalar" }, "howRuns": { "heading": "Como o script é executado (Criar fluxo)" }, "modes": { "heading": "Os três modos de partilha", "intro": "Cada modo escreve uma seção diferente em smb.conf. Todos os três incluem valid users = <username> (sem anônimo), force group = sharedfiles (então novos arquivos pertencem ao grupo compartilhado) e veto files = /lost+found/ (esconde-o de clientes).", "headerMode": "Modo", "headerBlock": "Bloco escrito para smb.conf", "rwMode": "Leitura e escrita", "roMode": "Somente leitura", "customMode": "Personalizado", "customBodyRich": "Você digita suas próprias diretivas em uma caixa de texto livre. ProxMenux ainda os envolve em um bloco [share] com o path, valid users, force group e veto files padrão." }, "manual": { "heading": "Equivalente manual", "body": "Replicar todo o fluxo à mão – cada comando roda dentro do CT via pct exec <ctid> -- ou pct enter <ctid>:" }, "connect": { "heading": "Conexão de clientes", "headerOs": "Sistema operativo do cliente", "headerHow": "Como conectar", "windowsOs": "Windows", "windowsHowRich": "Explorador de Arquivos → barra de endereço: \\\\<ct-ip>\\<share-name>. Ou Mapear unidade de rede → marque «Conectar usando credenciais diferentes».", "macosOs": "macOS", "macosHowRich": "Finder → Ir → Conecte-se ao servidor... → smb://<ct-ip>/<share-name>. Ou 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. Ou use o cliente Samba na página LXC se o cliente for outro Proxmox CT." }, "view": { "heading": "Ver os compartilhamentos atuais", "body": "Analisa /etc/samba/smb.conf dentro do CT e lista todos os blocos [share] (passando [global], [homes], [printers]) com seu caminho. Útil como um inventário rápido." }, "delete": { "heading": "Apagar um compartilhamento", "body": "Permite escolher um compartilhamento pelo nome, remove o bloco do smb.conf (sed exclui do [share] para a próxima linha em branco), e reinicia o smbd. A pasta em si e seu conteúdo ficam intactos." }, "status": { "heading": "Verificar o estado do Samba", "body": "Relata se o smbd e o nmbd estão instalados e ativos, lista os usuários do Samba (pdbedit -L) e imprime sessões ativas (smbstatus)." }, "uninstall": { "heading": "Desinstalar o servidor Samba", "body": "Limpeza completa após confirmação: para e desativa smbd e nmbd, salva smb.conf em smb.conf.backup.YYYYMMDD_HHMMSS, remove usuários Samba com smbpasswd -x e os pacotes Samba com apt-get purge. As pastas exportadas não são apagadas.", "warnTitle": "Pastas sobrevivem — backup de dados separadamente", "warnBody": "Excluir compartilhamento e Desinstalar servidor Samba removem a configuração do compartilhamento. Os dados das pastas exportadas são preservados. Para apagá-los também, use explicitamente rm -rf após o término do script." }, "troubleshoot": { "heading": "Resolução de Problemas", "privTitle": "Exige um contêiner com privilégios (o script interrompe a execução)", "privBody": "O CT selecionado é desprivilegiado e o smbd não pode servir arquivos lá. Se você ignorar a verificação e configurar Samba à mão, smbd começa e as portas abrem, mas a primeira conexão do cliente entra em pânico com PANIC: sys_setgroups failed em /var/log/samba/log.<client> e o cliente vê NT_STATUS_CONNECTION_DISCONNECTED. A causa é o namespace desprivilegiado que tem setgroups=deny, que bloqueia a personificação de Samba por conexão. Nem features=keyctl=1 nem remover force user / force group altera isso. As únicas opções viáveis são: converter o CT para privilegiado, ou mover Samba para uma VM.", "aptTitle": "apt-get install falha", "aptIntro": "O script assume uma família Debian CT. Em Alpine / Arch / Rocky / Alma, instalar Samba à mão:", "aptItems": [ "Alpine: apk add samba", "Arch: pacman -S samba", "Rocky / Alma: dnf install samba" ], "aptOutro": "Execute novamente o script ProxMenux; a instalação é ignorada quando as ferramentas já estão presentes.", "noShareTitle": "O cliente conecta- se mas não consegue ver a partilha", "noShareBody": "Verifique se o browseable = yes está definido no bloco de partilha (por omissão para os modos rw / ro; pode estar em falta na personalização). Também verifique o firewall CT e o firewall do host Proxmox permitem o TCP 445 (SMB) e o 139 (NetBIOS). Alguns clientes do Windows também exigem resolução de nome — tente o IP diretamente primeiro.", "authTitle": "Falha na autenticação (NT_STATUS_LOGON_FAILURE)", "authBody": "A senha está incorreta (as senhas Samba são separadas das do sistema; liste os usuários Samba com pdbedit -L) ou o usuário não consta em valid users para esse compartilhamento. Redefina a senha dentro do CT com smbpasswd <user>.", "groupTitle": "Os arquivos escritos pelo cliente aparecem com o grupo errado no servidor", "groupBody": "O script define force group = sharedfiles no bloco de compartilhamento, então novos arquivos devem ser o grupo sharedfiles. Se eles não forem, o bit SGID no diretório pai pode ter sido perdido (alguém correu chmod à mão). Reaplicação: chmod 2775 /mnt/<share>.", "bothTitle": "Compartilhando a mesma pasta em ambos NFS e Samba", "bothBody": "ProxMenux usa diferentes GIDs para sharedfiles em cada script (Samba: 999, NFS: 101000). Se você serve a mesma pasta através de ambos, decida sobre um GID e alinhar ambos. A correção mais simples: após executar ambos os scripts, edite o GID menor:" }, "related": { "heading": "Relacionado", "items": [ { "href": "/docs/storage-share/lxc-samba-client", "label": "Cliente Samba em LXC", "tail": " — o inverso: montar compartilhamentos Samba externos no CT." }, { "href": "/docs/storage-share/lxc-nfs-server", "label": "Servidor NFS em LXC", "tail": " — página relacionada, mesmo padrão com NFS em vez de CIFS." }, { "href": "/docs/storage-share/host-samba", "label": "Samba / CIFS como armazenamento Proxmox", "tailRich": " — quando o CT estiver exportando, registre o compartilhamento Samba no Proxmox para que apareça em Datacenter → Storage." } ] } }