Projeto Servidor de Arquivos

Uma pasta na rede, que todo mundo da casa ou do escritório abre como se fosse local, no Ubuntu, no Windows ou no Mac. O programa que faz isso é o Samba, que fala o mesmo "idioma" de compartilhamento do Windows (o protocolo SMB).

Ao terminar você terá
  • A pasta /srv/compartilhado acessível na rede como smb://IP/compartilhado.
  • Acesso só para quem está no grupo equipe, com senha.
  • Arquivos criados por qualquer pessoa da equipe editáveis pelas outras.
  • A pasta aberta no app Arquivos do notebook.
ItemDetalhe
Tempo estimado45 min
Pré-requisitosComo Usar os Projetos, Usuários e Grupos, Entendendo Permissões, chmod, ufw
Onde rodaVM lab (servidor) + notebook (cliente)

As etapas

  1. Preparar a VM

    O que vamos fazer e por quê: criar a VM e descobrir o IP dela, que será o endereço do servidor de arquivos.

    $ multipass launch 26.04 --name lab --disk 10G --memory 2G
    Launched: lab
    $ multipass list
    Name                    State             IPv4             Image
    lab                     Running           10.85.140.27     Ubuntu 26.04 LTS
    $ multipass shell lab

    Troque 10.85.140.27 pelo IP da sua VM em todos os comandos.

  2. Instalar o Samba

    O que vamos fazer e por quê: o pacote samba traz o serviço smbd, que atende os pedidos de arquivos.

    $ sudo apt update && sudo apt install -y samba
    …
    $ systemctl is-active smbd
    active

    Confira se deu certo: sudo ss -tlnp | grep smbd deve mostrar as portas 445 e 139 em LISTEN.

  3. Criar a pasta, o grupo e os usuários

    O que vamos fazer e por quê: quem pode entrar na pasta é decidido em duas camadas: o Samba e as permissões do Linux. Vamos criar um grupo equipe, dar a pasta a esse grupo e colocar a ana nele.

    $ sudo groupadd equipe
    $ sudo adduser --comment "Ana" ana
    …
    $ sudo usermod -aG equipe ana
    $ sudo mkdir -p /srv/compartilhado
    $ sudo chgrp equipe /srv/compartilhado
    $ sudo chmod 2775 /srv/compartilhado
    $ ls -ld /srv/compartilhado
    drwxrwsr-x 2 root equipe 4096 Oct 15 14:02 /srv/compartilhado     « o "s" no lugar do x do grupo
    chmod
    Muda as permissões.
    2
    O bit setgid: tudo que for criado dentro da pasta herda o grupo equipe.
    7
    O dono (root) lê, escreve e entra.
    7
    O grupo (equipe) lê, escreve e entra.
    5
    Os outros só leem e entram.
    /srv/compartilhado
    A pasta. /srv é o lugar padrão para dados servidos pela máquina.

    Sem o setgid, um arquivo criado pela ana ficaria no grupo ana, e o resto da equipe não conseguiria editá-lo.

  4. Configurar o compartilhamento

    O que vamos fazer e por quê: o Samba lê /etc/samba/smb.conf. Cada bloco entre colchetes é um compartilhamento. Faça uma cópia antes e acrescente o nosso bloco no fim do arquivo.

    $ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
    $ sudo nano /etc/samba/smb.conf
    [compartilhado]
       # Texto que aparece ao listar os compartilhamentos
       comment = Pasta da equipe
       # A pasta de verdade, no disco do servidor
       path = /srv/compartilhado
       # Aparece na lista de compartilhamentos
       browseable = yes
       # Permite gravar
       read only = no
       # Só membros do grupo equipe (o @ indica grupo)
       valid users = @equipe
       # Permissões de arquivos e pastas criados pela rede
       create mask = 0664
       directory mask = 2775

    O testparm confere o arquivo antes de reiniciar o serviço:

    $ testparm -s 2>&1 | head -4
    Load smb config files from /etc/samba/smb.conf
    Loaded services file OK.                          « sem erros de sintaxe
    Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)
    …
    $ sudo systemctl restart smbd
    Se deu errado: testparm mostra "Unknown parameter encountered"

    O que aconteceu: algum nome de opção foi digitado errado, como read-only em vez de read only.

    Como resolver: a mensagem cita o nome errado. Corrija no arquivo e rode o testparm -s de novo.

  5. Criar a senha do Samba

    O que vamos fazer e por quê: o Samba tem um cadastro de senhas próprio, separado do Linux. O usuário precisa existir no Linux e no Samba. A senha pode ser diferente da de login.

    $ sudo smbpasswd -a ana
    New SMB password:
    Retype new SMB password:
    Added user ana.
    $ sudo pdbedit -L
    ana:1001:Ana                                      « usuários cadastrados no Samba
  6. Liberar no firewall

    O que vamos fazer e por quê: se o ufw estiver ativo, ele bloqueia as portas do Samba. O pacote já traz um perfil pronto com as portas certas.

    $ sudo ufw app list
    Available applications:
      OpenSSH
      Samba
    $ sudo ufw allow Samba
    Rules updated
    Rules updated (v6)

    Se o ufw estiver desligado (Status: inactive), a regra fica guardada e passa a valer quando você ligar.

  7. Acessar pelo notebook

    O que vamos fazer e por quê: testar como um usuário faria. Primeiro pelo terminal, com o smbclient, que mostra mensagens de erro claras. Depois pelo app Arquivos.

    $ sudo apt install -y smbclient
    …
    $ smbclient -L //10.85.140.27 -U ana
    Password for [WORKGROUP\ana]:
    
    	Sharename       Type      Comment
    	---------       ----      -------
    	print$          Disk      Printer Drivers
    	compartilhado   Disk      Pasta da equipe            « o nosso compartilhamento
    	IPC$            IPC       IPC Service (lab server (Samba, Ubuntu))
    SMB1 disabled -- no workgroup available

    Agora, no app Arquivos:

    1. Clique em Outros locais, no fim da barra lateral.
    2. Em Conectar ao servidor, digite smb://10.85.140.27/compartilhado e clique em Conectar.
    3. Escolha Usuário registrado, informe ana, o domínio WORKGROUP e a senha do smbpasswd.

    No Windows, digite \\10.85.140.27\compartilhado na barra do Explorador de Arquivos.

    Confira se deu certo: crie um arquivo pelo Arquivos do notebook (por exemplo, ata.txt) e veja-o no servidor:

    $ ls -l /srv/compartilhado
    total 4
    -rw-rw-r-- 1 ana equipe 23 Oct 15 14:20 ata.txt     « dono ana, grupo equipe (graças ao setgid)
  8. Testar quem NÃO pode entrar

    O que vamos fazer e por quê: segurança se testa pelos dois lados. Vamos criar a bia, fora do grupo equipe, e confirmar que ela é barrada.

    $ sudo adduser --comment "Bia" bia
    …
    $ sudo smbpasswd -a bia
    New SMB password:
    Retype new SMB password:
    Added user bia.
    $ smbclient //10.85.140.27/compartilhado -U bia -c ls
    Password for [WORKGROUP\bia]:
    tree connect failed: NT_STATUS_ACCESS_DENIED       « barrada: bia não está em @equipe

    Para liberar a bia, bastaria sudo usermod -aG equipe bia no servidor.


Quando não funciona

NT_STATUS_LOGON_FAILURE

O que aconteceu: usuário ou senha errados, ou o usuário existe no Linux mas não foi cadastrado no Samba.

Como confirmar: sudo pdbedit -L lista quem existe no Samba.

Como resolver: sudo smbpasswd -a usuario.

NT_STATUS_ACCESS_DENIED

O que aconteceu: o login funcionou, mas o usuário não está em valid users (no nosso caso, no grupo equipe).

Como confirmar: groups usuario no servidor.

Consigo abrir, mas não consigo salvar

O que aconteceu: o Samba deixa gravar (read only = no), mas o Linux não deixa: a pasta não pertence ao grupo, ou falta o w para o grupo.

Como confirmar: ls -ld /srv/compartilhado deve mostrar drwxrwsr-x … equipe.

Como resolver: refaça o chgrp e o chmod 2775 da etapa 3.

Demora e dá "Connection timed out"

O que aconteceu: o firewall está bloqueando, ou o IP está errado.

Como confirmar: ping 10.85.140.27 do notebook e sudo ufw status no servidor.


Alternativa: NFS

Entre máquinas Linux, o NFS (Network File System) é mais simples e rápido. Ele não tem senha por usuário: o acesso é liberado por IP e as permissões são as do Linux, pelo número do usuário (UID).

$ sudo apt install -y nfs-kernel-server
$ echo "/srv/compartilhado 10.85.140.0/24(rw,sync,no_subtree_check)" | sudo tee -a /etc/exports
$ sudo exportfs -ra
$ sudo exportfs -v
/srv/compartilhado
		10.85.140.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
$ sudo apt install -y nfs-common
$ sudo mount -t nfs 10.85.140.27:/srv/compartilhado /mnt
$ ls /mnt
ata.txt
Samba (SMB)NFS
ClientesWindows, Mac, Linux, celularPrincipalmente Linux
AutenticaçãoUsuário e senhaPor IP; permissões pelo UID
ConfiguraçãoMais opçõesUma linha em /etc/exports
Uso típicoRede de casa ou escritório mistoServidores Linux entre si

O que você aprendeu

  • Instalar o Samba e criar um compartilhamento em smb.conf.
  • Usar grupo + setgid (chmod 2775) para uma pasta de equipe.
  • Cadastrar senhas do Samba com smbpasswd e validar o arquivo com testparm.
  • Acessar com smbclient, pelo app Arquivos e pelo Windows.
  • Testar o acesso negado, não só o permitido.

Desafios extras

  1. Crie um segundo compartilhamento, publico, só leitura e sem senha (guest ok = yes, read only = yes).
  2. Monte o compartilhamento no notebook automaticamente no boot, com cifs-utils e uma linha no fstab usando nofail.
  3. Faça o Backup Automático copiar /srv/compartilhado toda noite.

Desfazer e limpar

$ sudo umount /mnt
$ multipass delete --purge lab

Exercícios

1. Cadastrar no Samba

Complete para criar a senha do Samba do usuário ana:

sudo smbpasswd ana

2. Só o grupo

Complete a linha do smb.conf que libera só o grupo equipe:

valid users =

3. Para que serve o 2 em chmod 2775?

4. O login funciona, mas aparece NT_STATUS_ACCESS_DENIED. Qual é a causa mais provável?