Cicle formatiu: CFGM Sistemes Microinformàtics i Xarxes (SMX)
Mòdul: 0224 – Sistemes operatius en xarxa
NFS (Network File System) és un protocol que permet a un sistema Linux/Unix compartir directoris i fitxers amb altres màquines a través de la xarxa, fent que els recursos remots es comportin com si fossin part del sistema de fitxers local. Va ser desenvolupat originalment per Sun Microsystems i avui en dia és l’estàndard de facto per compartir fitxers entre sistemes Unix-like.
NFS funciona amb un model client-servidor: el servidor exporta (comparteix) directoris, i els clients els munten dins del seu propi arbre de fitxers.
| Versió | Any | Característiques |
|---|---|---|
| NFSv2 | 1989 | Obsoleta, només UDP |
| NFSv3 | 1995 | Suport de fitxers grans, encara molt usada |
| NFSv4 | 2003 | Integra autenticació, ACLs, funciona només sobre TCP, més segura |
| NFSv4.1/4.2 | 2010+ | Paral·lelisme (pNFS), millores de rendiment |
Aquest document se centra en NFSv4, recomanada per a desplegaments nous.
| Component | Funció |
|---|---|
nfs-kernel-server |
Dimoni del servidor NFS |
rpcbind |
Servei RPC necessari per a NFSv3 (NFSv4 no en depèn directament) |
nfs-common |
Eines client necessàries en totes les màquines |
exportfs |
Gestiona les exportacions actives |
/etc/exports |
Fitxer de configuració de les comparticions |
showmount |
Mostra les exportacions disponibles en un servidor |
sudo o root a totes les màquines.ufw en els
exemples).Actualitza la llista de paquets
sudo apt updateInstal·la el servidor NFS
sudo apt install nfs-kernel-serverActiva el servei
sudo systemctl enable nfs-kernel-serverVerifica l’estat del servei
sudo systemctl status nfs-kernel-serverPer a NFSv3 cal verificar també que el servei RPC funciona:
sudo systemctl status rpcbind
rpcinfo -p localhostAmb NFSv4 ja no és estrictament necessari rpcbind per al
transport de dades, però sol mantenir-se actiu per compatibilitat amb
eines com showmount.
Crea els directoris
sudo mkdir -p /srv/nfs/compartit
sudo mkdir /srv/nfs/projectes
sudo mkdir /srv/nfs/backupsDirectori de lectura/escriptura per a usuaris generals
sudo chown nobody:nogroup /srv/nfs/compartit
sudo chmod 755 /srv/nfs/compartitDirectori amb accés d’escriptura ampli
sudo chown nobody:nogroup /srv/nfs/projectes
sudo chmod 777 /srv/nfs/projectesDirectori restringit (només per a hosts concrets)
sudo chown root:root /srv/nfs/backups
sudo chmod 700 /srv/nfs/backups/etc/exportsEdita el fitxer /etc/exports
sudo nano /etc/exports/ruta/directori client(opcions) client2(opcions)# ── Compartit general (lectura/escriptura) ────────────────
/srv/nfs/compartit 192.168.1.0/24(rw,sync,no_subtree_check)
# ── Projectes (lectura/escriptura, múltiples xarxes) ──────
/srv/nfs/projectes 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
/srv/nfs/projectes 10.0.0.0/24(rw,sync,no_subtree_check)
# ── Backups (només lectura) ───────────────────────────────
/srv/nfs/backups 192.168.1.10(ro,sync,no_subtree_check)
/srv/nfs/backups 192.168.1.11(ro,sync,no_subtree_check)
# ── Accés per a un host concret amb mapatge anònim ────────
/srv/nfs/compartit 192.168.1.50(rw,sync,no_subtree_check,all_squash,anonuid=1001,anongid=1001)
# ── Accés públic (qualsevol host) — evitar en producció ───
# /srv/nfs/public *(ro,sync,no_subtree_check)
| Opció | Descripció |
|---|---|
rw |
Lectura i escriptura |
ro |
Només lectura |
sync |
Escriu al disc abans de confirmar (segur) |
async |
Confirma abans d’escriure al disc (ràpid però arriscat) |
no_subtree_check |
Millora el rendiment; recomanat per defecte |
subtree_check |
Verifica que el fitxer és dins l’exportació |
root_squash |
Mapa l’usuari root del client a nobody (per defecte,
recomanat) |
no_root_squash |
El root del client té privilegis de root al servidor (evitar-ho) |
all_squash |
Mapa tots els usuaris remots a nobody |
anonuid / anongid |
UID/GID assignats als usuaris anònims |
fsid=0 |
Defineix el directori arrel per a NFSv4 |
Exporta les comparticions definides a /etc/exports
sudo exportfs -aReinicia el servei perquè els canvis siguin efectius
sudo systemctl restart nfs-kernel-serverVerifica exportacions actives
sudo exportfs -vSortida d’exemple:
/srv/nfs/compartit
192.168.1.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs/backups
192.168.1.10(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)Altres ordres útils:
Re-exporta després de modificar /etc/exports (sense
reiniciar el servei)
sudo exportfs -rvElimina totes les exportacions actives
sudo exportfs -uaPorts NFS estàndard
sudo ufw allow from 192.168.1.0/24 to any port 2049 proto tcp
sudo ufw allow from 192.168.1.0/24 to any port 2049 proto udpPorts RPC addicionals (NFSv3 / compatibilitat)
sudo ufw allow from 192.168.1.0/24 to any port 111 proto tcp
sudo ufw allow from 192.168.1.0/24 to any port 111 proto udp
sudo ufw reloadPer fixar els ports RPC dinàmics (mountd, lockd), cal editar:
sudo nano /etc/default/nfs-kernel-serverRPCMOUNTDOPTS="--manage-gids --port 32767"
RPCLOCKDOPTS="--port 32768"
sudo ufw allow 32767/tcp
sudo ufw allow 32767/udp
sudo ufw allow 32768/tcp
sudo ufw allow 32768/udp
sudo ufw reload
sudo systemctl restart nfs-kernel-serverInstal·la el paquet nfs-common
sudo apt install nfs-commonshowmount -e 192.168.1.10Sortida d’exemple:
Export list for 192.168.1.10:
/srv/nfs/projectes 192.168.1.0/24
/srv/nfs/compartit 192.168.1.0/24
/srv/nfs/backups 192.168.1.10Crea les carpetes
sudo mkdir /mnt/compartit
sudo mkdir /mnt/projectesMunta amb NFSv4 (recomanat)
sudo mount -t nfs4 192.168.1.10:/srv/nfs/compartit /mnt/compartitMunta amb opcions específiques de rendiment
sudo mount -t nfs4 -o rw,hard,intr,rsize=8192,wsize=8192 \
192.168.1.10:/srv/nfs/projectes /mnt/projectesVerifica el muntatge
df -h | grep nfs
mount | grep nfsDesmunta un recurs compartit
sudo umount /mnt/compartitSi el recurs no respon (stale handle)
sudo umount -l /mnt/compartit/etc/fstabEdita el fitxer de configuració /etc/fstab (“file
systems table”), que s’utilitza per definir de manera automàtica i
persistent quins sistemes de fitxers (particions, discos, unitats de
xarxa…) s’han de muntar al sistema, on, i amb quines opcions — sense
haver-ho de fer manualment cada cop que arrenca la màquina.
sudo nano /etc/fstab# ── Muntatges NFS ─────────────────────────────────────────
192.168.1.10:/srv/nfs/compartit /mnt/compartit nfs4 defaults,_netdev,hard,intr 0 0
192.168.1.10:/srv/nfs/projectes /mnt/projectes nfs4 rw,_netdev,hard,intr,rsize=131072,wsize=131072 0 0
192.168.1.10:/srv/nfs/backups /mnt/backups nfs4 ro,_netdev,hard 0 0
| Opció | Descripció |
|---|---|
_netdev |
Espera que la xarxa estigui disponible abans de muntar |
hard |
Reintenta indefinidament si el servidor no respon (recomanat) |
soft |
Retorna error si el servidor no respon (risc de pèrdua de dades) |
intr |
Permet interrompre operacions bloquejades |
rsize / wsize |
Mida del bloc de lectura/escriptura (bytes) |
timeo |
Temps d’espera per a reintents (en dècimes de segon) |
retrans |
Nombre de reintents abans de marcar error |
Prova la configuració:
sudo mount -a
df -hNFS, en la seva configuració bàsica (sec=sys), confia en
els UID/GID que envia el client, el que pot ser un risc si la xarxa no
és de confiança. Aspectes a tenir en compte:
root_squash (per defecte): evita que
el root d’un client tingui privilegis de root sobre els fitxers
exportats.sec=krb5): ofereix
autenticació forta i, opcionalment, xifratge (krb5i per
integritat, krb5p per privacitat total). Recomanat en
xarxes no totalment confiables.* en entorns de producció.Mostra exportacions actives
sudo exportfs -vMostra clients connectats
sudo showmount -aMostra estadístiques NFS
nfsstat -sLogs del servidor
sudo journalctl -u nfs-kernel-server -f
sudo tail -f /var/log/syslog | grep nfsVerifica muntatges actius
mount | grep nfs
df -hT | grep nfsEstadístiques del client
nfsstat -cDiagnosi de connexió RPC
rpcinfo -p 192.168.1.10Comprova la latència
time ls /mnt/compartit“Permission denied” — revisa exports i permisos
sudo exportfs -rv
ls -la /srv/nfs/“Connection refused” — revisa tallafocs i serveis
sudo ufw status
sudo systemctl status nfs-kernel-server
sudo systemctl status rpcbind“Stale file handle” — remunta
sudo umount -l /mnt/compartit
sudo mount /mnt/compartitEncara que NFS és el protocol natural per compartir fitxers entre sistemes Linux/Unix, Windows també pot actuar com a client NFS, tant en versions de Windows Server (mitjançant el rol/funcionalitat Client for NFS) com en algunes edicions de Windows 10/11 Pro i Enterprise. Això permet muntar directoris exportats per un servidor Linux com si fossin unitats de xarxa locals, sense necessitat d’instal·lar Samba al servidor.
Si el cas d’ús principal és compartir fitxers amb clients Windows, sol ser més senzill i robust fer-ho amb Samba al servidor. NFS des de Windows és més habitual en entorns tècnics o de laboratori que en producció d’oficina.
/etc/exports, exportfs -v).ping).192.168.1.10:/srv/nfs/compartit).Instal·la la funcionalitat de client NFS
Install-WindowsFeature NFS-ClientVerifica que s’ha instal·lat correctament
Get-WindowsFeature -Name NFS-ClientDes del Tauler de control:
O bé per PowerShell (amb privilegis d’administrador):
Enable-WindowsOptionalFeature -Online -FeatureName ServicesForNFS-ClientOnly -All
Enable-WindowsOptionalFeature -Online -FeatureName ClientForNFS-Infrastructure -AllAquesta funcionalitat no està disponible a Windows Home.
Des del client Windows, amb el client NFS ja instal·lat, es pot consultar quines exportacions ofereix el servidor:
showmount -e 192.168.1.10Sortida d’exemple:
Exports list on 192.168.1.10:
/srv/nfs/dades 192.168.1.0/24
/srv/nfs/backups 192.168.1.10Si l’ordre showmount no es reconeix, comprovar que el
client NFS s’ha instal·lat correctament i reiniciar la màquina.
El client NFS de Windows permet muntar una exportació remota assignant-li una lletra d’unitat, igual que ho faríem amb un recurs SMB.
:: Sintaxi general
mount \\<ip_servidor>\<ruta_amb_barres_invertides> <lletra>:
:: Exemple: muntar /srv/nfs/compartit com a unitat Z:
mount \\192.168.1.10\srv\nfs\compartit Z:La ruta Unix s’escriu substituint les barres / per
barres invertides \. NFS internament tradueix la ruta
correctament.
Verifica que la unitat s’ha muntat:
dir Z:O des de l’Explorador d’arxius, on apareixerà com una unitat de xarxa més.
Per evitar haver de tornar a muntar el recurs cada vegada que s’inicia la sessió, es pot crear una unitat persistent:
New-PSDrive -Name "Z" `
-PSProvider FileSystem `
-Root "\\192.168.1.10\srv\nfs\compartit" `
-PersistPer comprovar les unitats NFS muntades:
Get-PSDrive -PSProvider FileSystemPer eliminar-la:
Remove-PSDrive -Name "Z"NFS es basa en UID/GID numèrics per controlar permisos, un concepte aliè al model de seguretat natiu de Windows (SID). El client NFS de Windows necessita saber quin UID/GID utilitzar en les seves peticions.
Per defecte, si no hi ha cap mapatge configurat, el client NFS de
Windows sol presentar-se amb UID/GID anònims (sovint -2 o 0, segons la versió). Això fa que l’accés
depengui directament de com el servidor tracti les peticions anònimes
(vegeu all_squash/anonuid al servidor).
En entorns amb Active Directory i un servei de mapatge d’identitats (Identity Mapping for UNIX), es pot associar cada compte de domini a un UID/GID Unix concret, de manera que els permisos NFS es respectin de forma coherent amb els usuaris de domini.
Consulta el servei de mapatge d’identitats (si està configurat al domini)
Get-WindowsFeature -Name "RSAT-NFS-Admin"La configuració detallada del mapatge amb AD requereix un servidor amb el rol Server for NFS i el component Identity Mapping Service, fora de l’abast d’un client aïllat.
En aules o proves sense Active Directory, la solució més pràctica és
controlar el mapatge des del servidor Linux, usant all_squash amb anonuid/anongid
fixos, de manera que totes les peticions del client Windows es tractin
amb un únic usuari conegut:
# /etc/exports al servidor Linux
/srv/nfs/compartit 192.168.1.0/24(rw,sync,no_subtree_check,all_squash,anonuid=1000,anongid=1000)root_squash des de WindowsPer defecte, el client NFS de Windows pot presentar-se davant el
servidor com a UID 0 (root). Si el servidor té root_squash
actiu (comportament per defecte i recomanat), aquestes peticions es
mapegen a nobody, el que pot limitar l’escriptura.
# Exemple per a entorn de LABORATORI (no recomanat en producció)
/srv/nfs/compartit 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)no_root_squash dona privilegis de root del servidor a
qualsevol client que es presenti com a UID 0. Usar-ho només en entorns
controlats (aules, laboratoris), mai en producció.
L’alternativa més segura i recomanada per a accés des de Windows és
combinar all_squash amb un anonuid/anongid que correspongui a un usuari
amb els permisos adequats sobre el directori exportat, tal com s’ha
mostrat a la secció anterior.
Des del client Windows, un cop muntada la unitat:
:: Crear un fitxer de prova
echo prova > Z:\test.txt
:: Llistar el contingut
dir Z:
:: Esborrar el fitxer de prova
del Z:\test.txtDes del servidor Linux, es pot comprovar qui ha creat el fitxer i amb quin UID:
ls -ln /srv/nfs/dadesSi l’UID que apareix no correspon a un usuari esperat, cal revisar la
configuració de mapatge (all_squash, anonuid)
al servidor.
:: Desmuntar una unitat muntada amb "mount"
umount Z:# Desmuntar una unitat persistent creada amb New-PSDrive
Remove-PSDrive -Name "Z"| Problema | Possible causa | Solució |
|---|---|---|
showmount no es reconeix |
Client NFS no instal·lat | Reinstal·lar la funcionalitat i reiniciar |
Network path not found |
Tallafocs bloqueja el port 2049/111 | Obrir els ports al tallafocs del servidor |
| Es pot llegir però no escriure | Exportació en ro, o UID sense permisos |
Canviar a rw al servidor i revisar anonuid/permisos del directori |
Access is denied en muntar |
El client es presenta amb UID sense accés | Configurar all_squash + anonuid/anongid adequats |
| El recurs es desmunta sol en reiniciar | Muntatge no persistent | Usar New-PSDrive -Persist |
| Característica | NFS | Samba | SSHFS |
|---|---|---|---|
| Plataformes | Linux/Unix | Linux/Windows/Mac | Linux/Mac |
| Rendiment | Excel·lent | Bo | Regular |
| Seguretat | Mitjana (alta amb Kerberos) | Alta | Molt alta |
| Configuració | Mitjana | Complexa | Molt simple |
| Autenticació | UID/GID o Kerberos | Usuari/contrasenya | Clau SSH |
| Recomanat per | Xarxes Linux pures | Entorns mixtos | Accés puntual segur |
Usar sempre NFSv4, més segura i eficient que NFSv3.
Restringir les exportacions a IP o subxarxes
específiques, mai a *.
Mantenir root_squash actiu per defecte.
Muntar sempre amb _netdev al fstab per
evitar problemes durant l’arrencada.
Preferir hard en lloc de soft per a
dades importants, per evitar corrupció silenciosa.
Monitorar l’ús del servidor periòdicament:
watch -n 1 nfsstat -s
sudo showmount -a | wc -lCombinar NFS amb LVM per poder redimensionar volums compartits sense interrompre el servei.
Considerar Kerberos (sec=krb5) si
la xarxa no és totalment de confiança.
| Ordre | Descripció |
|---|---|
sudo apt install nfs-kernel-server |
Instal·la el servidor NFS |
sudo apt install nfs-common |
Instal·la les eines client |
sudo exportfs -a |
Exporta totes les comparticions definides |
sudo exportfs -rv |
Reexporta després de modificar /etc/exports |
sudo exportfs -v |
Llista les exportacions actives |
sudo exportfs -ua |
Elimina totes les exportacions |
showmount -e <ip> |
Llista les exportacions d’un servidor remot |
showmount -a |
Mostra els clients connectats |
sudo mount -t nfs4 <ip>:/ruta /mnt/punt |
Munta una exportació manualment |
sudo umount /mnt/punt |
Desmunta una exportació |
sudo umount -l /mnt/punt |
Desmunta de forma forçada (stale handle) |
nfsstat -s / nfsstat -c |
Estadístiques del servidor / client |
rpcinfo -p <ip> |
Comprova els serveis RPC d’un host |
| Ordre al client Windows | Descripció |
|---|---|
Install-WindowsFeature NFS-Client |
Instal·la el client NFS a Windows Server |
Enable-WindowsOptionalFeature -FeatureName ClientForNFS-Infrastructure |
Instal·la el client NFS a Windows 10/11 Pro/Enterprise |
showmount -e <ip> |
Llista les exportacions disponibles en un servidor |
mount \\<ip>\<ruta> <lletra>: |
Munta una exportació com a unitat de xarxa |
umount <lletra>: |
Desmunta una unitat NFS |
New-PSDrive -Persist |
Crea una unitat NFS persistent entre sessions |
Remove-PSDrive |
Elimina una unitat persistent |
Get-PSDrive -PSProvider FileSystem |
Llista les unitats de fitxers actives |