Serwer NFS w Linux: konfiguracja i udostępnianie katalogu | INTROSERV
EUR
european

EUR

usa

USD

Poland Pl
Ex. VAT Ex. VAT 0%

Konfiguracja serwera NFS w systemie Linux do udostępniania katalogu przez NFS

Poziom: Zaawansowany
Szacowany czas: ~30 minut
Cel: Skonfigurowanie serwera NFS w systemie Linux w celu udostępnienia katalogu wielu klientom, co ułatwia automatyzację rutynowych zadań oraz proaktywny audyt bezpieczeństwa.

Wprowadzenie

Zarządzanie współdzielonym magazynem danych w całej flocie serwerów jest podstawowym wymogiem utrzymania środowisk produkcyjnych o wysokich wymaganiach dotyczących dostępności. Protokół NFS (Network File System) pozwala systemowi udostępniać katalog przez NFS w sieci, pełniąc rolę urządzenia NAS (Network Attached Storage). Wdrażając serwer NFS w systemie Linux, można zapewnić scentralizowany dostęp do plików wielu klientom NFS jednocześnie. Ten poradnik pokazuje, jak sprawnie skonfigurować serwer NFS w systemie Linux, domyślnie z użyciem NFSv4.2.

Warning

W tym przewodniku używany jest tryb zabezpieczeń sec=sys (AUTH_SYS). W tym trybie serwer z założenia ufa klientowi w kwestii identyfikacji użytkowników (UID/GID), bez żadnego uwierzytelniania kryptograficznego. Kontrola dostępu opiera się wyłącznie na filtrowaniu adresów IP w pliku /etc/exports oraz na standardowych uprawnieniach UNIX do plików. Taka konfiguracja sprawdza się w zaufanych sieciach wewnętrznych (np. w wirtualnym środowisku Proxmox), ale nie jest zalecana w sieciach niezaufanych. Dla zwiększenia bezpieczeństwa rozważ wdrożenie uwierzytelniania Kerberos (np. sec=krb5, sec=krb5i lub sec=krb5p).

Wymagania wstępne

Zanim zaczniesz, upewnij się, że spełnione są następujące warunki:

  • System operacyjny: Ubuntu 22.04/24.04 LTS, Debian 12/13 lub CentOS/RHEL 9/AlmaLinux 10
  • Wymagane oprogramowanie: nfs-kernel-server (2.6+) w Ubuntu/Debian lub nfs-utils (2.x+) w CentOS/RHEL/AlmaLinux
  • Dostęp: uprawnienia sudo lub root na wszystkich maszynach
  • Sieć: serwery muszą mieć możliwość komunikacji przez sieć prywatną.
  • Wymagana wiedza: swobodna obsługa wiersza poleceń systemu Linux.

Terminologia

Zanim przejdziesz dalej, zapoznaj się z poniższymi podstawowymi pojęciami:

  • NFS (Network File System): protokół umożliwiający dostęp do plików przez sieć tak, jakby znajdowały się na lokalnym nośniku.
  • Serwer NFS: centralna maszyna, która przechowuje pliki i udostępnia je w sieci.
  • Klient NFS: zdalna maszyna łącząca się z serwerem w celu uzyskania dostępu do udostępnionych plików.
  • Katalog udostępniony (Shared Directory): lokalny folder na serwerze, który zostanie udostępniony klientom.
  • Eksport (Export): proces udostępniania lokalnego katalogu klientom w sieci.
  • /etc/exports: główny plik konfiguracyjny używany przez demona NFS do określenia, które katalogi są eksportowane i jakie obowiązują reguły dostępu.
  • Montowanie (Mounting): proces dołączania zdalnego zasobu sieciowego do lokalnej struktury katalogów.
  • Punkt montowania (Mount Point): lokalny katalog na kliencie, do którego dołączany jest zdalny system plików.
  • nfs-utils: pakiet oprogramowania zawierający narzędzia i demony niezbędne dla klienta i serwera NFS.
  • RPC (Remote Procedure Call): protokół, za pomocą którego jeden program może zażądać usługi od programu działającego na innym komputerze.
  • Portmapper / rpcbind: usługa mapująca numery programów RPC na numery portów sieciowych, wymagana do negocjowania połączeń przez NFS.
  • Uprawnienia (Permissions): prawa dostępu określające, kto może odczytywać, zapisywać lub uruchamiać pliki.
  • Dostęp tylko do odczytu (RO): stan uprawnień pozwalający klientom przeglądać pliki, ale nie modyfikować ich.
  • Dostęp do odczytu i zapisu (RW): stan uprawnień pozwalający klientom modyfikować udostępnione pliki.
  • root_squash: mechanizm bezpieczeństwa mapujący żądania zdalnego użytkownika root na nieuprzywilejowanego użytkownika (nobody), co zapobiega nieautoryzowanemu dostępowi z uprawnieniami roota.
  • Zapora sieciowa (Firewall): system bezpieczeństwa sieci monitorujący i kontrolujący ruch przychodzący i wychodzący.
  • System plików Linux: uporządkowana metoda, za pomocą której Linux przechowuje i organizuje pliki na dysku.
  • Nazwa hosta (Hostname): czytelna dla człowieka etykieta przypisana do urządzenia podłączonego do sieci komputerowej.
  • Adres IP: unikalny identyfikator liczbowy przypisany do każdego urządzenia w sieci.
  • Automount (automatyczne montowanie): praktyka automatycznego montowania systemów plików podczas uruchamiania systemu.
  • NAS (Network Attached Storage): architektura przechowywania danych na poziomie plików, która udostępnia dane przez sieć.

Krok 1: Zainstaluj wymagane pakiety

Najpierw zainstaluj niezbędne oprogramowanie na serwerze i klientach. Pakiet nfs-utils dostarcza demony i narzędzia potrzebne do zarządzania systemem plików. Nowoczesne konfiguracje powinny domyślnie używać NFSv4.2, który jest protokołem stanowym (stateful) i upraszcza reguły zapory sieciowej.

Na serwerze NFS (Debian/Ubuntu):

sudo apt update sudo apt install nfs-kernel-server

Na serwerze NFS (CentOS/RHEL/AlmaLinux):

sudo dnf install nfs-utils sudo systemctl enable --now rpcbind nfs-server

Info

W konfiguracji wyłącznie z NFSv4 usługa rpcbind nie jest technicznie wymagana do samego montowania NFS. Jest jednak potrzebna, jeśli zamierzasz użyć polecenia showmount (zgodnie z Krokiem 5) do wykrywania eksportów lub jeśli musisz obsługiwać starsze klienty NFSv3.

Na kliencie NFS (Debian/Ubuntu):

sudo apt update sudo apt install nfs-common

Na kliencie NFS (CentOS/RHEL/AlmaLinux):

sudo dnf install nfs-utils

Instalacja powinna zakończyć się pomyślnie. Wymagane usługi RPC i NFS są teraz zainstalowane i uruchomione.

Krok 2: Utwórz katalog udostępniany i ustaw uprawnienia NFS

Utwórz na serwerze katalog, który chcesz wyeksportować:

sudo mkdir -p /mnt/nfs_share

Ustaw odpowiednie uprawnienia NFS, aby klienci mogli uzyskać dostęp do plików. W tym poradniku przypiszemy własność dedykowanemu nieuprzywilejowanemu użytkownikowi usługi i nadamy odpowiednie uprawnienia grupie.

Debian/Ubuntu:

sudo chown nobody:nogroup /mnt/nfs_share sudo chmod 2775 /mnt/nfs_share

CentOS/RHEL/AlmaLinux:

sudo chown nobody:nobody /mnt/nfs_share sudo chmod 2775 /mnt/nfs_share

Ta konfiguracja nie omija lokalnego modelu uprawnień systemu Linux, dzięki czemu kontrola dostępu NFS nie jest jedyną warstwą zabezpieczeń. Uprawnienie 2775 bezpiecznie umożliwia współpracę w grupie bez naruszania zasady najmniejszych uprawnień.

Krok 3: Skonfiguruj serwer NFS w systemie Linux

Aby zdefiniować reguły eksportu, musisz zmodyfikować plik /etc/exports na serwerze.

Otwórz plik:

sudo nano /etc/exports

Dodaj poniższy wiersz, aby przyznać dostęp określonej podsieci klientów (np. <CLIENT_SUBNET>):

/mnt/nfs_share <CLIENT_SUBNET>(rw,sync,no_subtree_check,root_squash)

Serwer zostanie skonfigurowany do eksportu katalogu z następującymi opcjami:

  • rw: przyznaje dostęp do odczytu i zapisu (RW). Użyj ro dla dostępu tylko do odczytu (RO).
  • sync: wymusza zapisanie zmian na dysku przed odpowiedzią do klienta.
  • no_subtree_check: wyłącza sprawdzanie poddrzewa (subtree), co poprawia niezawodność.
  • root_squash: jawnie mapuje żądania zdalnego użytkownika root na nieuprzywilejowanego użytkownika (nobody). Jest to zachowanie domyślne, ale ze względów audytowych należy je zawsze podawać jawnie. Opcji no_root_squash używaj wyłącznie w ściśle kontrolowanych środowiskach.

Info

Możesz określić wielu klientów, dodając w tym samym wierszu kolejne adresy IP lub podsieci oddzielone spacjami, co umożliwia dostęp dla wielu maszyn.

Zastosuj konfigurację eksportu:

Debian/Ubuntu:

sudo exportfs -a sudo systemctl restart nfs-kernel-server

CentOS/RHEL/AlmaLinux:

sudo exportfs -a sudo systemctl restart nfs-server

Serwer aktywnie eksportuje teraz katalog do sieci.

Krok 4: Skonfiguruj zaporę sieciową

Musisz zezwolić na ruch NFS w zaporze sieciowej na serwerze, aby umożliwić połączenia klientów.

Z użyciem UFW (Debian/Ubuntu):

W świeżej instalacji Ubuntu UFW jest domyślnie nieaktywny. W czystym systemie Debian 13 może nawet nie być zainstalowany. Jeśli zamierzasz używać UFW, upewnij się, że jest zainstalowany (sudo apt install ufw) i jawnie włączony, zanim dodasz reguły:

sudo ufw enable sudo ufw allow from <CLIENT_SUBNET> to any port nfs

Z użyciem Firewalld (CentOS/RHEL/AlmaLinux):

sudo firewall-cmd --permanent --zone=public --add-service=nfs sudo firewall-cmd --permanent --zone=public --add-service=rpc-bind sudo firewall-cmd --permanent --zone=public --add-service=mountd sudo firewall-cmd --reload

Info

AlmaLinux/RHEL (SELinux): w czystej instalacji AlmaLinux SELinux działa w trybie Enforcing. Dla domyślnej ścieżki /mnt/nfs_share używanej w tym przewodniku istniejący kontekst mnt_t jest zgodny z demonem nfsd. Jeśli jednak planujesz eksportować niestandardowe ścieżki (np. /srv, /data lub /home/...), NFS nie będzie mógł w nich zapisywać, dopóki odpowiednio nie skonfigurujesz SELinuksa. Możesz włączyć globalną wartość logiczną (sudo setsebool -P nfs_export_all_rw 1) albo ustawić właściwy fcontext za pomocą semanage.

Klienci z dozwolonej podsieci mogą teraz łączyć się z usługami NFS.

Krok 5: Zweryfikuj eksport za pomocą polecenia showmount

Na serwerze proaktywnie zweryfikuj aktywne eksporty oraz wewnętrzny stan audytu, aby zapewnić zgodność z wymaganiami bezpieczeństwa. Uruchom poniższe polecenie, aby sprawdzić dokładne opcje eksportu zastosowane przez demona NFS:

sudo cat /var/lib/nfs/etab

Alternatywnie możesz użyć polecenia sudo exportfs -v, aby wyświetlić szczegółową listę eksportów.

Następnie na maszynie klienckiej użyj polecenia showmount, aby sprawdzić, czy eksport jest widoczny w sieci. Zastąp <SERVER_IP> rzeczywistym adresem IP serwera NFS.

Info

showmount wymaga, aby port 111 (rpcbind) był otwarty na serwerze. Jeśli używasz konfiguracji wyłącznie z NFSv4 i nie otworzyłeś tego portu, pomiń ten krok: zweryfikuj eksporty na serwerze poleceniem sudo exportfs -v, a dostępność z poziomu klienta sprawdź, montując zasób w Kroku 6.

showmount -e <SERVER_IP>

Oczekiwany wynik:

Export list for <SERVER_IP>: /mnt/nfs_share <CLIENT_SUBNET>

Jeśli eksport znajduje się na liście, konfiguracja serwera jest poprawna i dostępna z poziomu klienta.

Krok 6: Zamontuj system plików NFS na kliencie

Aby korzystać z zasobu, musisz zamontować system plików NFS w lokalnym punkcie montowania na kliencie.

Utwórz punkt montowania:

sudo mkdir -p /mnt/client_share

Zamontuj katalog:

sudo mount -t nfs -o vers=4.2 <SERVER_IP>:/mnt/nfs_share /mnt/client_share

Zasób jest teraz zamontowany. Możesz to sprawdzić poleceniem df -h, które pokaże podłączony dysk sieciowy. Podanie vers=4.2 gwarantuje, że klient jawnie użyje najnowszej wersji protokołu, zamiast po cichu przełączyć się na NFSv3 lub NFSv4.0.

Tip

Aby klient automatycznie montował system plików NFS przy starcie, możesz skonfigurować montowanie statyczne, dodając wpis do /etc/fstab. Pamiętaj, że jest to montowanie statyczne; prawdziwie dynamiczne konfiguracje Automount w środowiskach produkcyjnych realizuje się zwykle za pomocą autofs (/etc/auto.master).

Otwórz /etc/fstab:

sudo nano /etc/fstab

Dodaj następujący wiersz:

<SERVER_IP>:/mnt/nfs_share /mnt/client_share nfs auto,nofail,noatime,_netdev,hard,vers=4.2,timeo=600 0 0

Zapobiega to blokowaniu procesu uruchamiania klienta, gdy serwer jest chwilowo niedostępny.

Weryfikacja

Aby potwierdzić, że uprawnienia NFS i ustawienia sieciowe są poprawne, wykonaj z poziomu klienta test odczytu i zapisu:

touch /mnt/client_share/test_file.txt ls -l /mnt/client_share/

Oczekiwany wynik:

-rw-r--r-- 1 nobody nogroup 0 May 24 12:00 test_file.txt

Info

W zależności od systemu operacyjnego klienta właściciel pliku zostanie wyświetlony jako nobody nogroup (Debian/Ubuntu) lub nobody nobody (RHEL/AlmaLinux). Jest to oczekiwane zachowanie mapowania tożsamości (idmapping) w NFSv4, gdy żądania są poprawnie mapowane na nieuprzywilejowanego użytkownika. W razie rozbieżności sprawdź, czy parametr Domain w pliku /etc/idmapd.conf jest taki sam na serwerze i na kliencie.

Jeśli plik został utworzony pomyślnie, klienci mogą komunikować się z serwerem i zapisywać dane zgodnie z założeniami.

Cofanie zmian

Aby odmontować zasób na kliencie:

sudo umount /mnt/client_share

Usuń wpis z /etc/fstab na kliencie, jeśli go dodano.

Aby przestać udostępniać katalog na serwerze, usuń odpowiedni wiersz z /etc/exports i zastosuj zmiany:

Debian/Ubuntu:

sudo exportfs -a sudo systemctl restart nfs-kernel-server

CentOS/RHEL/AlmaLinux:

sudo exportfs -a sudo systemctl restart nfs-server

Aby całkowicie usunąć zainstalowane pakiety:

Debian/Ubuntu:

sudo apt remove nfs-kernel-server nfs-common

CentOS/RHEL/AlmaLinux:

sudo dnf remove nfs-utils

Ta czynność całkowicie wyłączy funkcjonalność NFS na Twoich maszynach.

Podsumowanie

Udało Ci się nauczyć, jak skonfigurować serwer NFS w systemie Linux. Dzięki odpowiedniej konfiguracji możesz bezpiecznie udostępniać katalog przez NFS wielu klientom NFS. Takie rozwiązanie stanowi niezawodną podstawę do automatyzacji rutynowych zadań administracyjnych i centralizacji dzienników na potrzeby proaktywnych audytów bezpieczeństwa.

Wersja dokumentu: 1.0
Ostatnia aktualizacja: maj 2026
Właściciel: Zespół dokumentacji technicznej

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA