# 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.

> [!NOTE]
> Si el que necessites és un controlador de domini AD amb Samba, consulta el document específic de *[Samba AD-DC](https://proferamon.com/tic/samba-ad-dc.html)*, que segueix un procediment molt diferent.

## 1.2. Característiques d'un servidor standalone

- Proporciona **serveis de fitxers i impressió** sense necessitat d'integrar-se
  en un domini.
- L'autenticació és **local**: cada usuari ha d'existir com a usuari del
  sistema operatiu (`/etc/passwd`) *i* ha de tenir una contrasenya Samba
  pròpia, emmagatzemada normalment en una base de dades `tdbsam`
  (`/var/lib/samba/private/passdb.tdb`).
- No ofereix servei de **logon de xarxa**: els equips client no fan un inici
  de sessió de domini contra aquest servidor.
- Pot funcionar en dos modes d'accés:
  - **Accés anònim (guest)**: sense demanar credencials.
  - **Accés autenticat (user security)**: cal usuari i contrasenya vàlids.
- És vàlid tenir un servidor standalone que pertanyi a un *workgroup* (grup de
  treball), que és simplement una etiqueta organitzativa sense cap mecanisme
  d'autenticació centralitzat (a diferència d'un domini AD).

## 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

```bash
sudo apt update
```

Instal·la Samba

```bash
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:

```bash
smbd --version
```

Sortida esperada:

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

Comprova l'estat dels serveis:

```bash
systemctl status smbd.service
```

Sortida esperada:

```ini
● 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:

```bash
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]`**: paràmetres generals del servidor (nom NetBIOS, workgroup,
  seguretat, registre de logs, etc.).
- **`[nom_recurs]`**: una secció per cada recurs compartit (carpeta o
  impressora).

```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`

```bash
sudo nano /etc/samba/smb.conf
```

```nano
[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

```bash
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](https://proferamon.com/tic/basics.html#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ó:

```bash
sudo adduser --no-create-home --shell /usr/sbin/nologin --ingroup grupdades ramonl
```

```ini
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):

```bash
sudo smbpasswd -a ramonl
```

```ini
New SMB password:
Retype new SMB password:
Added user ramonl.
```

Per activar/desactivar o eliminar un usuari Samba:

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

Llistar els usuaris Samba donats d'alta:

```bash
sudo pdbedit -L -v
```

```ini
---------------
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`:

```bash
testparm
```

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

Sortida esperada:

```ini
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

```bash
sudo systemctl restart smbd.service
```

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

```bash
sudo systemctl enable smbd.service
```

```ini
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)

```bash
sudo ufw allow samba
```

> [!NOTE]
> `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)

```bash
sudo nano /etc/samba/smb.conf
```

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

```nano
[public]
   comment = Recurs públic sense autenticació
   path = /srv/samba/public
   browsable = yes
   read only = no
   guest ok = yes
   guest only = yes
```

```bash
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
```

> [!CAUTION] 
> 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`

```bash
sudo apt install smbclient
```

Llista els recursos compartits:

```bash
smbclient -L localhost -U ramonl
```

Sortida:

```ini
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:

```bash
smbclient //localhost/dades -U ramonl
```

Sortida:

```ini
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:

```bash
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):

```bash
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`

```bash
sudo nano /etc/fstab
```

```nano
//<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:

```ini
\\<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:

```bash
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 | Sí |

# 10. Recursos i referències

- [Documentació oficial d'Ubuntu Server sobre Samba com a servidor de fitxers](https://ubuntu.com/server/docs/how-to/samba/file-server/).
- SambaWiki — [*Setting up Samba as a Standalone Server*](https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server).
- SambaWiki — [Pàgina principal i documentació de referència](https://wiki.samba.org/index.php/Main_Page) de `smb.conf`.
- Materials de l'IOC del mòdul 0224 (SMX) sobre serveis de xarxa Samba.
- Manual de referència: `man smb.conf`, `man smbpasswd`, `man testparm`.

#### Versions d'aquest document

+ HTML - [samba.html](https://proferamon.com/tic/samba.html)
+ PDF - [samba.pdf](https://proferamon.com/tic/docs/samba.pdf)
+ ODT - [samba.odt](https://proferamon.com/tic/odt/samba.odt)
+ MD - [samba.md](https://proferamon.com/tic/md/samba.md)

[Domini Públic (CC0)](https://creativecommons.org/publicdomain/zero/1.0/deed.ca)
