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.
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 lubnfs-utils(2.x+) w CentOS/RHEL/AlmaLinux - Dostęp: uprawnienia
sudolubrootna 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
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żyjrodla 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żytkownikarootna nieuprzywilejowanego użytkownika (nobody). Jest to zachowanie domyślne, ale ze względów audytowych należy je zawsze podawać jawnie. Opcjino_root_squashużywaj wyłącznie w ściśle kontrolowanych środowiskach.
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
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.
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.
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
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