Samba com a servidor 'standalone' (workgroup)

Cicle formatiu: Sistemes Microinformàtics i Xarxes (SMX)

Mòdul: 0224 — Sistemes operatius en xarxa

Sistema operatiu: Ubuntu Server 26.04 LTS


1. Introducció

Samba és una suite de programari lliure (llicència GPL) que implementa el protocol SMB/CIFS de Microsoft sobre sistemes Unix/Linux. Gràcies a Samba, un servidor Linux pot oferir a clients Windows, Linux o macOS els mateixos serveis que oferiria un servidor Windows: compartició de fitxers, compartició d’impressores, autenticació d’usuaris i, si cal, fer de controlador de domini Active Directory.

El projecte existeix des de 1992 i és mantingut per la comunitat Samba, amb suport actiu per a totes les versions modernes de Windows.

1.1. Els tres rols possibles d’un servidor Samba

Samba (paràmetre server role a smb.conf) es pot configurar bàsicament de tres maneres:

Rol Paràmetre server role Descripció
Standalone Server standalone server Servidor independent, sense domini. Autenticació local (usuaris del mateix sistema o base de dades pròpia de Samba). És el tema d’aquest document.
Domain Member member server El servidor forma part d’un domini AD i delega l’autenticació al controlador de domini (DC).
Active Directory DC active directory domain controller Samba actua com a controlador de domini AD complet (substituint un Windows Server DC).

Aquest document se centra en el primer cas: servidor standalone en mode workgroup, és a dir, sense cap domini Active Directory al darrere. És la configuració més senzilla i adequada per a xarxes petites, aules de pràctiques o quan només cal compartir fitxers/impressores sense gestió centralitzada d’usuaris.

💡
Nota

Si el que necessites és un controlador de domini AD amb Samba, consulta el document específic de Samba AD-DC, que segueix un procediment molt diferent.

1.2. Característiques d’un servidor standalone

1.3. Dimonis (serveis) principals

Servei/dimoni Unitat systemd Funció
smbd smbd.service Servei principal SMB/CIFS: compartició de fitxers i impressores, autenticació d’usuaris.
nmbd nmbd.service Resolució de noms NetBIOS sobre IP i navegació de xarxa (browsing). Cada cop menys rellevant, ja que els clients moderns usen DNS.
winbindd winbind.service Necessari només en mode domain member, per resoldre usuaris/grups del domini. No cal en mode standalone pur.

2. Instal·lació a Ubuntu Server 26.04

Aquest procediment és vàlid per a Ubuntu Server 26.04 LTS i, en general, per a qualsevol versió recent d’Ubuntu Server (24.04, 25.10…), ja que el paquet samba i el format de smb.conf es mantenen molt estables entre versions.

2.1. Actualitza el sistema i instal·la el paquet

Actualitza la llista de paquets

sudo apt update

Instal·la Samba

sudo apt install samba

Amb això s’instal·len els binaris smbd, nmbd, les eines client (smbclient, smbpasswd, testparm…) i es crea el fitxer de configuració per defecte a /etc/samba/smb.conf, a més d’habilitar i arrencar automàticament els serveis smbd i nmbd.

Comprova la versió instal·lada:

smbd --version

Sortida esperada:

Version 4.23.6-Ubuntu-4.23.6+dfsg-1ubuntu2.1

Comprova l’estat dels serveis:

systemctl status smbd.service

Sortida esperada:

● smbd.service - Samba SMB Daemon
     Loaded: loaded (/usr/lib/systemd/system/smbd.service; enabled; preset: enabled)
     Active: active (running) since Thu 2026-07-02 10:53:38 UTC; 3min 0s ago
 Invocation: eff6ecdbe5224b24b74c92beb7a49c92
       Docs: man:smbd(8)
             man:samba(7)
             man:smb.conf(5)
   Main PID: 2433 (smbd)
     Status: "smbd: ready to serve connections..."
      Tasks: 3 (limit: 1718)
     Memory: 28.5M (peak: 28.8M)
        CPU: 89ms
     CGroup: /system.slice/smbd.service
             ├─2433 /usr/sbin/smbd --foreground --no-process-group
             ├─2437 "smbd: notifyd" .
             └─2438 "smbd: cleanupd "

2.2. Còpia de seguretat de la configuració per defecte

Abans de tocar res, és bona pràctica fer una còpia del fitxer original:

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.original

3. Estructura del fitxer smb.conf

El fitxer /etc/samba/smb.conf s’organitza en seccions a l’estil INI:

[global]
   workgroup = WORKGROUP
   disable netbios = yes
   server string = %h server (Samba, Ubuntu)
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file
   panic action = /usr/share/samba/panic-action %d
   server role = standalone server
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   map to guest = bad user
   usershare allow guests = yes

[recurs]
   comment = Descripció del recurs
   path = /srv/samba/recurs
   browsable = yes
   read only = no
   guest ok = no

3.1. Paràmetres globals més habituals

Paràmetre Funció
workgroup Nom del grup de treball (equivalent al workgroup de Windows). No confondre amb un domini AD.
netbios name Nom pel qual el servidor es veurà a la xarxa NetBIOS/SMB. Per defecte, el hostname del sistema.
disable netbios Activa/desactiva el protocol NetBIOS (ports 137/138 UDP i navegació/resolució de noms via broadcast). Els clients moderns (Windows 10/11, Linux) hi accedeixen igualment per IP o per DNS via SMB directe sobre el port 445/TCP.
server role Defineix el rol del servidor: standalone server, member server o active directory domain controller.
server string Descripció textual del servidor (visible en alguns clients).
security Model de seguretat: user (recomanat, l’únic realment suportat des de Samba 4) o share (obsolet).
map to guest Com tractar sol·licituds sense credencials vàlides. Bad User és el valor típic per permetre accés d’invitat controlat.
guest account Compte del sistema (normalment nobody) que s’usa per a l’accés anònim.
log file Ruta del fitxer de log. %m s’expandeix pel nom NetBIOS del client, generant un fitxer per client.
max log size Mida màxima (en KB) de cada fitxer de log abans que Samba el rote automàticament.
log level Nivell de detall del registre (0-10). 1 o 2 és suficient per a producció; valors alts només per depurar.
logging = file Indica que els logs es desen a fitxer (en lloc de, o a més de, syslog). Sintaxi moderna que substitueix l’antic paràmetre syslog.
interfaces / bind interfaces only Restringeixen Samba a escoltar només en determinades interfícies de xarxa.
hosts allow / hosts deny Control d’accés per IP/xarxa globalment o per recurs.
dns proxy Sol deshabilitar-se (no) en xarxes petites sense necessitats especials de resolució via WINS.

3.2. Paràmetres més habituals d’un recurs ([share])

Paràmetre Funció
path Ruta absoluta del directori compartit al sistema de fitxers Linux.
comment Descripció visible del recurs.
browsable Si el recurs apareix llistat en explorar el servidor (yes/no).
read only Si el recurs és de només lectura (yes) o permet escriptura (no).
guest ok Permet accés sense autenticació (yes) o exigeix credencials (no).
guest only Força que el recurs només accepti connexions d’invitat.
valid users Llista d’usuaris o grups (@grup) autoritzats a accedir al recurs.
write list Usuaris/grups amb permís d’escriptura encara que read only = yes.
create mask / directory mask Permisos Unix (octal) aplicats als fitxers/directoris nous creats via Samba.
force user / force group Força que totes les operacions es facin com un usuari/grup concret, independentment de qui s’hagi connectat.
inherit permissions Els fitxers/subdirectoris nous hereten els permisos del directori pare en lloc de la màscara per defecte.
printable Marca el recurs com a impressora (yes) en lloc de carpeta.

4. Configuració pas a pas: servidor standalone amb accés autenticat

Aquest és l’escenari més habitual i recomanable: cada usuari necessita unes credencials per accedir al recurs.

4.1. Edita /etc/samba/smb.conf

sudo nano /etc/samba/smb.conf
[global]
   workgroup = THOS
   disable netbios = yes
   server string = %h server (Samba, Ubuntu)
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file
   panic action = /usr/share/samba/panic-action %d
   server role = standalone server
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   map to guest = bad user
   usershare allow guests = yes

[dades]
   comment = Recurs compartit de dades del departament
   path = /srv/samba/dades
   browsable = yes
   read only = no
   guest ok = no
   valid users = @grupdades
   create mask = 0660
   directory mask = 0770

4.2. Crea el directori del recurs compartit i ajusta permisos Unix

sudo mkdir -p /srv/samba/dades
sudo groupadd grupdades
sudo chgrp -R grupdades /srv/samba/dades
sudo chmod -R 2770 /srv/samba/dades

El bit setgid (2 inicial) fa que els fitxers nous heretin el grup del directori pare, cosa molt útil en recursos compartits per diversos usuaris. Consulta Bits especials per saber-ne més d’aquest tema.

4.3. Crea usuaris Samba

Un usuari Samba ha d’existir prèviament com a usuari del sistema. Si només necessita accedir a Samba (no fer iniciar sessió local), es pot crear sense shell d’inici de sessió:

sudo adduser --no-create-home --shell /usr/sbin/nologin --ingroup grupdades ramonl
New password: 
Retype new password: 
passwd: s'ha actualitzat la contrasenya satisfactòriament
S'està canviant la informació d'usuari per a ramonl
Introduïu el nou valor, o premeu INTRO per al predeterminat
    Nom complet []: ramon lopez
    Número de sala []: 
    Telèfon de la feina []: 
    Telèfon de casa []: 
    Altre []: 
Is the information correct? [Y/n] Y

I després donar-li una contrasenya Samba (independent de la contrasenya Unix):

sudo smbpasswd -a ramonl
New SMB password:
Retype new SMB password:
Added user ramonl.

Per activar/desactivar o eliminar un usuari Samba:

sudo smbpasswd -e ramonl     # habilitar
sudo smbpasswd -d ramonl     # deshabilitar
sudo smbpasswd -x ramonl     # eliminar

Llistar els usuaris Samba donats d’alta:

sudo pdbedit -L -v
---------------
Unix username:        ramonl
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-3019385091-423839488-3638041515-1000
Primary Group SID:    S-1-5-21-3019385091-423839488-3638041515-513
Full Name:            ramon lopez
Home Directory:       \\SERVER\ramonl
HomeDir Drive:        
Logon Script:         
Profile Path:         \\SERVER\ramonl\profile
Domain:               SERVER
Account desc:         
Workstations:         
Munged dial:          
Logon time:           0
Logoff time:          dc., 06 de febr. 2036 15:06:39 UTC
Kickoff time:         dc., 06 de febr. 2036 15:06:39 UTC
Password last set:    dj., 02 de jul. 2026 11:36:42 UTC
Password can change:  dj., 02 de jul. 2026 11:36:42 UTC
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

4.4. Valida la configuració

Abans de reiniciar el servei, sempre cal validar la sintaxi amb testparm:

testparm

Mostra els errors de sintaxi (si n’hi ha) i, després, un resum de la configuració efectiva carregada.

Sortida esperada:

Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)

Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

Ens informa que la sintaxi és correcta (Loaded services file OK.), i que el rol del servidor és ROLE_STANDALONE.

4.5. Reinicia el servei i habilita a l’inici

Reinicia

sudo systemctl restart smbd.service

Habilita perquè s’iniciï automàticament en cada arrencada del sistema

sudo systemctl enable smbd.service
Synchronizing state of smbd.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable smbd

4.6. Obre el tallafoc (UFW)

sudo ufw allow samba
💡
Nota

samba és un perfil predefinit d’UFW que obre els ports necessaris (139/TCP, 445/TCP, 137/UDP i 138/UDP).

5. Configuració alternativa: accés d’invitat (anònim)

sudo nano /etc/samba/smb.conf

Per a recursos públics, sense necessitat de credencials:

[public]
   comment = Recurs públic sense autenticació
   path = /srv/samba/public
   browsable = yes
   read only = no
   guest ok = yes
   guest only = yes
sudo mkdir -p /srv/samba/public
sudo chown nobody:nogroup /srv/samba/public
sudo chmod 0777 /srv/samba/public
testparm
sudo systemctl restart smbd.service
🔴
Precaució

Un recurs 100% obert i amb escriptura és còmode per a proves, però suposa un risc de seguretat en producció: qualsevol dispositiu de la xarxa hi podrà escriure i esborrar sense control ni traçabilitat.

6. Verificació i accés des de clients

6.1. Des del mateix servidor Linux

Instal·la smbclient

sudo apt install smbclient

Llista els recursos compartits:

smbclient -L localhost -U ramonl

Sortida:

Password for [THOS\ramonl]:

    Sharename       Type      Comment
    ---------       ----      -------
    dades           Disk      Recurs compartit de dades del departament
    public          Disk      Recurs públic sense autenticació
    IPC$            IPC       IPC Service (server server (Samba, Ubuntu))
SMB1 disabled -- no workgroup available

Connecta’t a un recurs:

smbclient //localhost/dades -U ramonl

Sortida:

Password for [THOS\ramonl]:
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Thu Jul  2 12:03:38 2026
  ..                                  D        0  Thu Jul  2 12:03:38 2026
  fitxer                              N       10  Thu Jul  2 12:03:38 2026

        11758760 blocks of size 1024. 5549648 blocks available
smb: \> q

Munta el recurs amb el client CIFS del kernel:

sudo apt install cifs-utils
sudo mkdir -p /mnt/dades
sudo mount -t cifs //<IP_SERVIDOR>/dades /mnt/dades -o username=ramonl,vers=3.0

Per fer-ho persistent a /etc/fstab (evitant desar la contrasenya en clar, utilitzant un fitxer de credencials):

sudo tee /etc/samba/credentials.ramonl > /dev/null <<'EOF'
username=ramonl
password=LaContrasenyaAqui
EOF
sudo chmod 600 /etc/samba/credentials.ramonl

Edita el fitxer /etc/fstab

sudo nano /etc/fstab
//<IP_SERVIDOR>/dades  /mnt/dades  cifs  credentials=/etc/samba/credentials.ramonl,vers=3.0,uid=1000,gid=1000,iocharset=utf8  0  0

6.2. Des de Windows

Des de l’Explorador de fitxers, a la barra d’adreces:

\\<IP_SERVIDOR>\dades

Windows demanarà usuari i contrasenya (les de Samba, creades amb smbpasswd), tret que el recurs sigui d’accés d’invitat.

7. Registre i diagnòstic

Acció Ordre
Validar sintaxi de smb.conf testparm
Veure logs generals sudo tail -f /var/log/samba/log.smbd
Veure logs d’un client concret sudo tail -f /var/log/samba/log.<netbios_client>
Connexions actives sudo smbstatus
Estat del servei systemctl status smbd
Reiniciar sense tallar connexions actives (recàrrega) sudo smbcontrol all reload-config

Samba recarrega automàticament la configuració cada pocs minuts, però és recomanable fer sempre testparm abans de confiar-hi, i reiniciar el servei (systemctl restart smbd) quan es canviïn paràmetres que ho requereixin explícitament (p. ex. security).

8. AppArmor

Ubuntu inclou un perfil d’AppArmor per a smbd (usr.sbin.smbd) que pot restringir a quins directoris té accés Samba. Si es comparteixen directoris fora de les rutes habituals (/srv, /home) i apareixen errors de “Permission denied” tot i tenir els permisos Unix correctes, cal revisar:

sudo aa-status | grep smbd
sudo journalctl -xe | grep -i apparmor

I, si cal, ampliar el perfil local a /etc/apparmor.d/local/usr.sbin.smbd afegint-hi la ruta compartida.

9. Comparativa ràpida: standalone vs. domini AD

Standalone (workgroup) Domain member / AD DC
Gestió d’usuaris Local, per servidor (smbpasswd/pdbedit) Centralitzada al controlador de domini
Escalabilitat Baixa (cada servidor és independent) Alta (un sol directori per a tota la xarxa)
Complexitat de configuració Baixa Alta (Kerberos, DNS, replicació…)
Cas d’ús típic Xarxa petita, laboratori, un sol servidor de fitxers Empresa amb diversos servidors i molts usuaris
Inici de sessió de xarxa (domain logon) No

10. Recursos i referències

Versions d’aquest document

Domini Públic (CC0)