NFS i Samba — współdzielenie plików między serwerami
Opublikowano: 9 kwietnia 2026 · Kategoria: Linux / Sieci
Wspólny storage między serwerami to podstawa wielu architektur: współdzielone media w WordPress, pliki konfiguracyjne między węzłami aplikacji, backupy centralne. Dwie najpopularniejsze opcje to NFS (Network File System — standard Linux-Linux) i Samba (implementacja SMB/CIFS — dla środowisk mieszanych z Windows). Oto jak skonfigurować oba protokoły od zera.
NFS vs Samba — kiedy co wybrać?
| Cecha | NFS | Samba (SMB/CIFS) |
|---|---|---|
| Protokół | NFS v3/v4 (standard Unix) | SMB/CIFS (standard Windows) |
| Klienty | Linux, macOS, FreeBSD | Windows, macOS, Linux |
| Wydajność | Lepsza w środowisku Linux | Dobra, nieco wyższe CPU |
| Uwierzytelnianie | IP-based lub Kerberos (v4) | User/password, AD, Kerberos |
| Szyfrowanie | Brak w v3, opcjonalne v4.2 | SMB3 z szyfrowaniem |
| Typowe zastosowanie | VPS cluster, Kubernetes PV | Serwer plików dla biura, Windows |
NFS — instalacja i konfiguracja serwera
# Instalacja NFS server (Ubuntu/Debian) sudo apt update sudo apt install nfs-kernel-server # Utwórz katalog do eksportowania sudo mkdir -p /export/shared sudo chown nobody:nogroup /export/shared sudo chmod 755 /export/shared
Konfiguracja eksportów w /etc/exports:
# /etc/exports # Format: /sciezka klient(opcje) # Eksport dla konkretnego IP (rekomendowane) /export/shared 192.168.1.101(rw,sync,no_subtree_check) # Eksport dla całej podsieci /export/shared 192.168.1.0/24(rw,sync,no_subtree_check) # Eksport read-only /export/media 192.168.1.0/24(ro,sync,no_subtree_check) # Eksport z all_squash (wszyscy klienci = anonuid) /export/public 192.168.1.0/24(rw,sync,no_subtree_check,all_squash,anonuid=1000,anongid=1000)
# Zastosuj zmiany w /etc/exports sudo exportfs -ra # Sprawdź aktywne eksporty sudo exportfs -v showmount -e localhost # Restart usługi NFS sudo systemctl restart nfs-kernel-server sudo systemctl enable nfs-kernel-server
NFS — klient (montowanie)
# Instalacja klienta NFS sudo apt install nfs-common # Sprawdź dostępne eksporty serwera showmount -e 192.168.1.100 # Tymczasowe montowanie sudo mkdir -p /mnt/nfs-shared sudo mount -t nfs 192.168.1.100:/export/shared /mnt/nfs-shared # Montowanie z NFS v4 (rekomendowane) sudo mount -t nfs4 192.168.1.100:/export/shared /mnt/nfs-shared # Sprawdź zamontowane systemy plików df -h | grep nfs mount | grep nfs
Aby montowanie było trwałe (przeżywało restart), dodaj do /etc/fstab:
# /etc/fstab # Format: serwer:/eksport punkt-montowania typ opcje dump pass 192.168.1.100:/export/shared /mnt/nfs-shared nfs4 defaults,nofail,_netdev 0 0 # Opcje: # nofail — nie blokuj bootowania gdy serwer NFS niedostępny # _netdev — montuj dopiero po uruchomieniu sieci # soft — timeout zamiast zawieszenia gdy serwer niedostępny # timeo=15 — timeout w 0.1s (15 = 1.5 sekundy)
# Przetestuj wpis fstab bez restartu sudo mount -a # Sprawdź czy zamontowane df -h /mnt/nfs-shared
Samba — instalacja i konfiguracja serwera
# Instalacja Samba sudo apt update sudo apt install samba # Utwórz katalog współdzielony sudo mkdir -p /samba/shared sudo chown root:sambashare /samba/shared sudo chmod 2775 /samba/shared
Edytuj konfigurację Samba w /etc/samba/smb.conf:
# /etc/samba/smb.conf [global] workgroup = WORKGROUP server string = Serwer Plików security = user map to guest = Bad User log file = /var/log/samba/log.%m max log size = 1000 # Udział z uwierzytelnianiem (tylko zalogowani użytkownicy) [shared] path = /samba/shared browseable = yes read only = no guest ok = no valid users = @sambashare create mask = 0664 directory mask = 0775 force group = sambashare # Udział publiczny (bez hasła — tylko do odczytu) [public] path = /samba/public browseable = yes read only = yes guest ok = yes
# Zweryfikuj konfigurację smb.conf testparm # Dodaj użytkownika do Samba (musi mieć konto systemowe) sudo adduser uzytkownik sudo usermod -aG sambashare uzytkownik sudo smbpasswd -a uzytkownik # Ustaw hasło Samba (oddzielne od systemowego) sudo smbpasswd -e uzytkownik # Włącz konto # Restart Samba sudo systemctl restart smbd nmbd sudo systemctl enable smbd nmbd
Samba — klient (Linux i Windows)
# Instalacja klienta CIFS (Linux) sudo apt install cifs-utils smbclient # Lista dostępnych udziałów Samba smbclient -L //192.168.1.100 -U uzytkownik # Interaktywne połączenie przez smbclient (jak FTP) smbclient //192.168.1.100/shared -U uzytkownik # Komendy: ls, get plik, put plik, cd katalog, quit # Montowanie udziału Samba na Linux sudo mkdir -p /mnt/samba-shared sudo mount -t cifs //192.168.1.100/shared /mnt/samba-shared \ -o username=uzytkownik,password=haslo,uid=1000,gid=1000
# Bezpieczniejsze montowanie — hasło w pliku zamiast w linii poleceń sudo nano /etc/samba/credentials-shared # Zawartość: # username=uzytkownik # password=haslo sudo chmod 600 /etc/samba/credentials-shared # /etc/fstab z credentials file # //192.168.1.100/shared /mnt/samba-shared cifs credentials=/etc/samba/credentials-shared,uid=1000,gid=1000,nofail,_netdev 0 0
# Windows — mapowanie dysku sieciowego # W Eksploratorze: Komputer > Mapuj dysk sieciowy # Ścieżka: \\192.168.1.100\shared # Lub przez wiersz poleceń: # net use Z: \\192.168.1.100\shared /user:uzytkownik haslo /persistent:yes
AutoFS — automontowanie na żądanie
AutoFS montuje udziały automatycznie gdy są potrzebne i odmontowuje po czasie bezczynności — oszczędza zasoby i eliminuje problemy z bootowaniem gdy serwer NFS/Samba jest niedostępny:
# Instalacja autofs sudo apt install autofs # Konfiguracja master map sudo nano /etc/auto.master # Dodaj linię: # /mnt/auto /etc/auto.nfs --timeout=60 # Konfiguracja udziałów NFS sudo nano /etc/auto.nfs # Format: punkt-montowania opcje serwer:/eksport # shared -fstype=nfs4,rw 192.168.1.100:/export/shared # media -fstype=nfs4,ro 192.168.1.100:/export/media # Restart autofs sudo systemctl restart autofs # Testuj — wejdź do katalogu (automontowanie na żądanie) ls /mnt/auto/shared # AutoFS automatycznie zamontuje i odmontuje po 60 sekundach bezczynności
Bezpieczeństwo NFS i Samba
- NFS: ogranicz /etc/exports do konkretnych IP — nigdy
*(rw,...). - NFS: UFW — zezwól na port 2049/tcp tylko z zaufanych IP.
- Samba: valid users — ogranicz dostęp do konkretnych użytkowników/grup.
- Samba: hosts allow — dodaj
hosts allow = 192.168.1.0/24do[global]. - Obie technologie: VPN — jeśli serwery są w różnych lokalizacjach, użyj WireGuard lub OpenVPN zamiast eksponowania portów na internet.