1 / 50
Serwery plików: SMB (Samba) i NFS

SMB i NFS - dwa protokoły plikowe

  • Prezentacja dotyczy dwóch fundamentalnych protokołów współdzielenia plików w sieci: SMB (Server Message Block) i NFS (Network File System)
  • SMB jest standardem w środowiskach Windows, ale dzięki Sambie działa również na systemach Unix/Linux
  • NFS to natywny protokół dla systemów Unix i Linux, zoptymalizowany pod kątem wydajności w sieciach LAN
  • Omówione zostaną wersje protokołów, konfiguracja, bezpieczeństwo oraz praktyczne laboratorium
  • Prezentacja zawiera 50 slajdów z przykładami, tabelami porównawczymi i cheat sheetami
  • Wiedza niezbędna dla każdego administratora sieci i systemów Linux/Windows
ASK_prez09_s01

Protokół SMB został opracowany przez firmę IBM w latach 80. XX wieku jako protokół udostępniania plików w sieciach LAN. Jego pierwotna wersja była częścią systemu OS/2, a później został przejęty i rozwijany przez Microsoft dla systemu Windows.

NFS został stworzony przez Sun Microsystems w 1984 roku i od samego początku był projektowany jako protokół otwarty, z jawną specyfikacją. Dzięki temu zyskał szerokie wsparcie w środowisku Unix i stał się standardem IEEE w 1998 roku.

Oba protokoły ewoluowały przez dziesięciolecia, dodając coraz bardziej zaawansowane mechanizmy bezpieczeństwa, szyfrowania i optymalizacji wydajności. Współczesne wersje (SMBv3 i NFSv4) oferują funkcje, które jeszcze 10 lat temu były niedostępne w protokołach plikowych.

W środowiskach heterogenicznych, gdzie współistnieją systemy Windows i Linux, administrator musi znać oba protokoły, aby móc skutecznie konfigurować współdzielenie zasobów plikowych między różnymi platformami.

Laboratorium dołączone do tej prezentacji pozwoli na praktyczne skonfigurowanie zarówno serwera Samba, jak i serwera NFS, a także na przetestowanie działania obu protokołów ze strony klienta sieciowego.

2 / 50
Cel warsztatu -- współdzielenie plików sieciowych

Praktyczna konfiguracja serwerów plików

  • Zrozumienie różnic między protokołami SMB i NFS oraz ich zastosowań w różnych środowiskach
  • Poznanie architektury, wersji i mechanizmów bezpieczeństwa obu protokołów
  • Umiejętność konfiguracji serwera Samba (smbd) na systemie Linux
  • Umiejętność konfiguracji serwera NFS (nfs-kernel-server) i definiowania eksportów
  • Praktyczna weryfikacja działania udziałów ze strony klientów Windows i Linux
  • Diagnostyka problemów z dostępem, mapowaniem użytkowników i firewallem
ASK_prez09_s02

Celem warsztatu jest praktyczne przygotowanie administratora do konfiguracji i utrzymania serwerów plików w różnorodnych środowiskach sieciowych. Uczestnik po zakończeniu zajęć powinien samodzielnie skonfigurować zarówno udział Samba, jak i eksport NFS.

Szczególny nacisk położony jest na bezpieczeństwo - uczestnik nauczy się, jak unikać typowych błędów konfiguracyjnych, takich jak niepotrzebne włączenie SMBv1, brak mechanizmu root_squash w NFS czy niepoprawne mapowanie użytkowników.

Wiedza zdobyta podczas warsztatu ma charakter uniwersalny - konfiguracja Samba sprawdzi się zarówno w małej sieci domowej, jak i w dużym środowisku korporacyjnym zintegrowanym z Active Directory.

Umiejętność diagnostyki problemów z udostępnianiem plików jest jedną z najważniejszych kompetencji administratora sieci, ponieważ usługi plikowe są często najbardziej krytycznymi zasobami w organizacji.

3 / 50
Agenda -- plan dziewiątej prezentacji

Zakres prezentacji krok po kroku

  • Część I (15 min): Protokół SMB - wersje SMBv1, v2, v3, porty, ataki i zabezpieczenia
  • Część II (15 min): Samba - smb.conf, uwierzytelnianie, parametry udziału, integracja z AD
  • Część III (15 min): Protokół NFS - architektura RPC, wersje NFSv3/v4, bezpieczeństwo
  • Część IV (15 min): Eksport NFS - /etc/exports, opcje, root_squash, administracja
  • Część V (30 min): Laboratorium - konfiguracja Samba i NFS na 2 maszynach wirtualnych
  • Część VI (10 min): Rozwiązywanie problemów, ściągawka, dobre praktyki, pytania kontrolne
ASK_prez09_s03

Prezentacja została podzielona na sześć bloków tematycznych, które stopniowo budują wiedzę od podstaw teoretycznych po praktyczne umiejętności laboratoryjne. Każda część zawiera elementy interaktywne i przykłady konfiguracji.

W części pierwszej skupimy się na protokole SMB i jego ewolucji - od niebezpiecznego SMBv1 do nowoczesnego SMBv3 z szyfrowaniem AES. Omówione zostaną porty, mechanizmy ataków i metody obrony.

Część druga poświęcona jest Sambie - implementacji SMB dla systemów Unix/Linux. Skonfigurujemy plik smb.conf, omówimy parametry udziałów i integrację z Active Directory.

Część trzecia i czwarta dotyczą protokołu NFS - od architektury RPC, przez wersje NFSv3 i NFSv4, aż po szczegółową konfigurację pliku /etc/exports i mechanizmy bezpieczeństwa, takie jak root_squash.

Najważniejszą częścią jest laboratorium, w którym uczestnicy samodzielnie skonfigurują serwery Samba i NFS, a następnie przetestują je ze strony klientów sieciowych.

4 / 50
Protokół SMB -- fundament współdzielenia plików w LAN

SMB - standard współdzielenia w LAN

  • SMB (Server Message Block) -- protokół klient-serwer do współdzielenia plików, drukarek i portów w sieci
  • Opracowany przez IBM w 1983 roku, rozwijany przez Microsoft jako część systemu Windows
  • Działa w modelu klient-serwer: klient wysyła żądania SMB, serwer odpowiada
  • Używa mechanizmu oplocks (opportunistic locks) do buforowania i optymalizacji dostępu
  • Obsługuje autoryzację na poziomie użytkownika i udziału (share-level i user-level)
  • Implementacja dla systemów Unix/Linux nazywa się Samba -- otwarte oprogramowanie zgodne z SMB/CIFS
ASK_prez09_s04

Protokół SMB działa w architekturze klient-serwer, gdzie klient wysyła żądania dostępu do plików, a serwer odpowiada, udostępniając żądane dane. Każde żądanie i odpowiedź są pakowane w ramkę SMB zawierającą nagłówek i dane.

Mechanizm oplocks pozwala klientom na buforowanie danych z plików lokalnie, co znacznie zwiększa wydajność. Gdy inny klient chce uzyskać dostęp do tego samego pliku, serwer wysyła break do buforującego klienta, który musi zsynchronizować dane z serwerem.

SMB obsługuje dwa modele autoryzacji: share-level (hasło dostępu do udziału) i user-level (autoryzacja na podstawie konta użytkownika). W nowoczesnych środowiskach dominuje model user-level, często zintegrowany z Active Directory.

Protokół ewoluował od prostego współdzielenia plików do zaawansowanego systemu obsługującego szyfrowanie, wielokanałowość, transparentną failover i integrację z RDMA.

5 / 50
SMBv1 -- stary, niebezpieczny, wciąż obecny

SMBv1 - przestarzały i ryzykowny

  • SMBv1 -- pierwsza wersja protokołu, używana od lat 80., domyślna w Windows 95/98/Me i NT 4.0
  • Brak szyfrowania transmisji -- wszystkie dane przesyłane w czystym tekście (plaintext)
  • Podatność na ataki EternalBlue (MS17-010) -- wykorzystana przez ransomware WannaCry w 2017 roku
  • Nie obsługuje nowoczesnych mechanizmów bezpieczeństwa, takich jak pre-authentication integrity
  • Współczesny Microsoft zaleca całkowite wyłączenie SMBv1 we wszystkich systemach Windows
  • Niestety, wiele urządzeń (starsze skanery, drukarki, systemy przemysłowe) nadal wymaga SMBv1
ASK_prez09_s05

Atak EternalBlue wykorzystywał lukę w implementacji SMBv1 w systemie Windows, umożliwiając zdalne wykonanie kodu (RCE) bez uwierzytelniania. Luka została załatana przez Microsoft w marcu 2017 roku (MS17-010), ale wiele systemów nie zostało zaktualizowanych na czas.

WannaCry, który wykorzystał EternalBlue, zainfekował ponad 200 000 komputerów w 150 krajach w ciągu zaledwie kilku dni. Największe straty poniosły szpitale NHS w Wielkiej Brytanii, hiszpańska Telefonica i niemiecki Deutsche Bahn.

Mimo że Microsoft wydał łatkę dla nawet niewspieranych już systemów (Windows XP), wiele organizacji do dziś nie wyłączyło SMBv1. Głównym powodem są przestarzałe urządzenia sieciowe i aplikacje, które nie działają z nowszymi wersjami SMB.

Zalecenie Microsoftu jest jednoznaczne: SMBv1 powinien być wyłączony na wszystkich kontrolerach domeny, serwerach plików i stacjach roboczych. W razie potrzeby uruchamiania starych aplikacji należy użyć oddzielnej podsieci VLAN z ograniczonym dostępem.

6 / 50
SMBv2 -- optymalizacja i bezpieczeństwo

SMBv2 - wydajniejszy i bezpieczniejszy

  • SMBv2 wprowadzony w Windows Vista (2006) i Windows Server 2008 -- całkowita przebudowa protokołu
  • Zmniejszenie liczby komend z ponad 100 w SMBv1 do 19 w SMBv2 -- prostsza i wydajniejsza implementacja
  • Wprowadzenie pipeliningu -- możliwość wysyłania wielu żądań bez oczekiwania na odpowiedź
  • Obsługa durable handles -- trwałe uchwyty do plików odporne na krótkotrwałe przerwy w łączności
  • Ulepszone wsparcie dla symbolicznych linków i twardych dowiązań
ASK_prez09_s06

Przebudowa protokołu w SMBv2 była odpowiedzią na rosnące wymagania wydajnościowe i bezpieczeństwa. Redukcja liczby komend nie tylko uprościła implementację, ale także zmniejszyła powierzchnię ataku na protokół.

Pipelining to jedna z najważniejszych optymalizacji SMBv2. W SMBv1 klient musiał czekać na odpowiedź serwera przed wysłaniem kolejnego żądania (serializacja). SMBv2 pozwala na wysyłanie wielu żądań jednocześnie, co znacząco poprawia przepustowość w sieciach z dużym opóźnieniem.

Durable handles to mechanizm, który pozwala na przetrwanie krótkotrwałej przerwy w łączności między klientem a serwerem. Jeśli klient straci połączenie na kilka sekund, jego otwarte pliki pozostają dostępne, a po ponownym połączeniu klient może kontynuować pracę bez utraty danych.

Mimo licznych ulepszeń, SMBv2 jest obecnie uznawany za przestarzały i powinien być używany tylko wtedy, gdy SMBv3 nie jest dostępny z powodu ograniczeń sprzętowych lub programowych.

7 / 50
SMBv3 -- nowoczesne szyfrowanie i wydajność

SMBv3 - szyfrowanie i niezawodność

  • SMBv3 zadebiutował w Windows 8 i Windows Server 2012 -- największe zmiany w historii protokołu
  • Wbudowane szyfrowanie AES-128-CCM i AES-128-GCM -- transmisja w pełni szyfrowana, bez potrzeby IPsec
  • Multichannel -- wykorzystanie wielu interfejsów sieciowych jednocześnie do jednej sesji SMB
  • SMB Direct (RDMA) -- obsługa kart sieciowych RDMA (RoCE, iWARP, InfiniBand) dla maksymalnej wydajności
  • Transparent Failover -- przełączenie awaryjne bez przerywania sesji SMB (klastry plików)
  • SMB over QUIC -- w Windows Server 2022, tunelowanie SMB przez QUIC (HTTP/3) dla dostępu przez Internet
ASK_prez09_s07

SMBv3 wprowadza szyfrowanie end-to-end bez konieczności konfigurowania IPsec. Szyfrowanie działa na poziomie protokołu SMB i chroni całą transmisję, w tym uwierzytelnianie i dane. W SMBv3.1.1 dodano szyfrowanie AES-128-GCM, które jest szybsze od CCM na nowoczesnych procesorach.

Multichannel to przełomowa funkcja pozwalająca na agregację przepustowości z wielu kart sieciowych. Jeśli serwer ma dwie karty 10 GbE, SMB może wykorzystać je obie jednocześnie, zapewniając efektywną przepustowość do 20 Gb/s. Dodatkowo multichannel zapewnia odporność na awarię pojedynczej karty.

SMB Direct (RDMA) pozwala na przesyłanie danych bez angażowania procesora gościa (zero-copy). Karty sieciowe RDMA (RoCE v2, iWARP, InfiniBand) mogą przesyłać dane bezpośrednio między pamięcią RAM serwera i klienta, osiągając przepustowość do 200 Gb/s przy minimalnym opóźnieniu.

SMB over QUIC, wprowadzony w Windows Server 2022, umożliwia bezpieczny dostęp do udziałów plikowych przez Internet bez konieczności konfigurowania VPN. QUIC działa na porcie 443 (HTTPS) i jest odporny na blokowanie NAT i firewalle.

8 / 50
Porty i adresy -- jak SMB komunikuje się w sieci

Port TCP 445 - główny kanał SMB

  • TCP 445 -- główny port dla SMB bezpośrednio przez TCP/IP (od Windows 2000)
  • TCP 139 -- starszy port dla SMB przez NetBIOS (NetBIOS Session Service), używany w Windows NT/9x
  • UDP 137-138 -- NetBIOS Name Service (137) i Datagram Service (138) do rozgłaszania nazw
  • Nowoczesne systemy Windows/Linux używają wyłącznie portu 445 -- NetBIOS jest wyłączony domyślnie
  • Samba na Linuksie domyślnie nasłuchuje na porcie 445 (smbd) i może również na 139
  • smbclient -L //server -p 445 -- test połączenia SMB na wybranym porcie
ASK_prez09_s08

Historycznie SMB działał jako usługa na szczycie NetBIOS (Network Basic Input/Output System), który korzystał z protokołu NetBEUI lub TCP/IP przez port 139. W Windows 2000 Microsoft wprowadził możliwość bezpośredniego działania SMB na TCP/IP bez pośrednictwa NetBIOS, używając portu 445.

Współcześnie zarówno Windows, jak i Samba domyślnie używają portu 445. NetBIOS przez port 139 jest wyłączony domyślnie, ale może być włączony dla zgodności ze starszymi aplikacjami lub urządzeniami.

Z punktu widzenia bezpieczeństwa, port 445 powinien być blokowany na firewallu perymetrycznym dla ruchu przychodzącego z Internetu. W sieci wewnętrznej dostęp do SMB powinien być ograniczony tylko do niezbędnych hostów za pomocą list ACL.

Należy pamiętać, że niektóre narzędzia do skanowania sieci (np. Nmap) domyślnie skanują port 445, co czyni go często wykrywanym w testach penetracyjnych jako potencjalny wektor ataku.

9 / 50
Porównanie wersji SMB -- tabela ewolucji

Ewolucja SMB w pigułce

  • SMBv1: Windows NT 4.0 (1996), brak szyfrowania, ponad 100 komend, podatny na EternalBlue
  • SMBv2: Windows Vista (2006), 19 komend, pipelining, durable handles, ale nadal brak szyfrowania
  • SMBv3: Windows 8 (2012), szyfrowanie AES-128-CCM/GCM, multichannel, RDMA, transparent failover
  • SMBv3.1.1: Windows 10 (2015), ulepszone szyfrowanie AES-128-GCM, pre-authentication integrity
  • SMB over QUIC: Windows Server 2022, tunelowanie przez QUIC na porcie 443, bezpieczny dostęp przez Internet
ASK_prez09_s09

Tabela porównawcza wyraźnie pokazuje, jak ogromny postęp dokonał się między SMBv1 a SMBv3. SMBv1 był protokołem zaprojektowanym w erze, gdy sieci LAN były izolowane i bezpieczne, a szyfrowanie nie było priorytetem.

SMBv2 przyniósł optymalizację wydajności (pipelining, durable handles) i redukcję złożoności, ale nadal brakowało mu wbudowanego szyfrowania. To oznacza, że administrator musiał polegać na zewnętrznych mechanizmach, takich jak IPsec, do zabezpieczenia transmisji.

SMBv3 to prawdziwa rewolucja - wprowadza nie tylko szyfrowanie, ale także zaawansowane funkcje wydajnościowe, takie jak multichannel i RDMA. Transparent failover umożliwia budowanie odpornych na awarie klastrów plików bez przerywania sesji klienckich.

SMB over QUIC, dostępny od Windows Server 2022, to kolejny krok ewolucji, umożliwiający bezpieczny dostęp do plików przez Internet z wykorzystaniem protokołu QUIC na porcie 443.

10 / 50
Ataki na SMB -- jak się bronić

EternalBlue i inne zagrożenia SMB

  • EternalBlue (MS17-010): zdalne wykonanie kodu przez SMBv1 bez uwierzytelniania -- załatane w marcu 2017
  • Pass-the-Hash (PtH): atak wykorzystujący skrót hasła NTLM do uwierzytelnienia bez znajomości hasła jawnego
  • Man-in-the-Middle (MITM): przechwytywanie i modyfikacja ruchu SMB przy użyciu narzędzi takich jak Responder
  • SMB Relay: przechwytywanie uwierzytelnienia NTLM i przekierowanie go na inny serwer w sieci
  • Brute Force: ataki siłowe na hasła do udziałów SMB (np. przy użyciu Hydra lub Medusa)
  • Obrona: wyłączenie SMBv1, użycie SMBv3 z szyfrowaniem, silne hasła, ograniczenie dostępu przez firewall
ASK_prez09_s10

Atak Pass-the-Hash działa, ponieważ protokół NTLM używa skrótu hasła (hash) do uwierzytelnienia. Jeśli atakujący przechwyci hash NTLM (np. z pamięci komputera ofiary), może go użyć bezpośrednio do uwierzytelnienia się na innych systemach w sieci bez znajomości hasła jawnego.

Responder to popularne narzędzie do ataków MITM na protokół SMB. Nasłuchuje on na zapytania NetBIOS, LLMNR i mDNS, a następnie odpowiada, podszywając się pod żądany serwer. Gdy ofiara próbuje się połączyć, Responder przechwytuje hash NTLM.

SMB Relay to bardziej zaawansowany atak, w którym atakujący działa jako pośrednik między ofiarą a serwerem. Przechwytuje uwierzytelnienie NTLM i przekazuje je dalej, uzyskując dostęp do zasobów docelowego serwera.

Obrona przed atakami na SMB wymaga wielowarstwowego podejścia: wyłączenie SMBv1, włączenie szyfrowania SMBv3, stosowanie silnych haseł, ograniczenie dostępu do SMB przez firewall, użycie SMB Signing (podpisywanie pakietów SMB) oraz monitorowanie logów pod kątem podejrzanych prób uwierzytelnienia.

11 / 50
Sprawdzanie wersji SMB w systemie

Weryfikacja wsparcia SMB w systemie

  • W Windows: Get-SmbServerConfiguration pokazuje status SMBv1 i SMBv2/v3
  • W Windows 10/11: SMBv1 jest domyślnie wyłączony, ale można to zweryfikować przez PowerShell
  • W Sambie: parametry server min protocol i server max protocol kontrolują dozwolone wersje
  • Zalecane ustawienie: server min protocol = SMB2 (lub SMB3) w smb.conf
  • Narzędzie smbclient -m SMB3 próbuje połączyć się używając konkretnej wersji SMB
  • W przypadku błędu protocol negotiation failed -- serwer nie obsługuje żądanej wersji
ASK_prez09_s11

W systemie Windows Server wersję SMB można sprawdzić za pomocą polecenia Get-SmbServerConfiguration w PowerShell. Wynik zawiera pola EnableSMB1Protocol, EnableSMB2Protocol oraz EnableSMB3Protocol (SMBv3 jest domyślnie włączony, gdy SMBv2 jest aktywny).

Do wyłączenia SMBv1 w Windows można użyć: Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol. W Windows Server dodatkowo: Set-SmbServerConfiguration -EnableSMB1Protocol $false.

W Sambie parametry server min protocol i server max protocol są kluczowe dla bezpieczeństwa. Ustawienie server min protocol = SMB2 wyłącza SMBv1 nawet dla klientów, którzy próbują użyć starszego protokołu.

Należy pamiętać, że niektóre starsze urządzenia (np. drukarki sieciowe, systemy embedded) mogą nie obsługiwać SMBv2 lub SMBv3. W takich przypadkach, jeśli nie można zaktualizować oprogramowania urządzenia, należy umieścić je w osobnej podsieci VLAN z ograniczonym dostępem.

12 / 50
Scenariusz: wyłączanie SMBv1 w sieci produkcyjnej

Bezpieczne wyłączenie SMBv1 w sieci

  • Krok 1: Inwentaryzacja -- zidentyfikuj wszystkie systemy i urządzenia korzystające z SMBv1
  • Krok 2: Testy w izolacji -- utwórz grupę pilotażową serwerów i przetestuj działanie bez SMBv1
  • Krok 3: Wyłączenie SMBv1 na serwerach plików -- Windows: Set-SmbServerConfiguration, Samba: server min protocol = SMB2
  • Krok 4: Monitorowanie logów przez 48h -- sprawdź czy nie pojawiają się błędy połączeń SMB
  • Krok 5: Wyłączenie SMBv1 na klientach i stacjach roboczych Windows
  • Krok 6: Blokada na firewallu -- zablokuj porty 139 i 445 dla ruchu przychodzącego z Internetu
ASK_prez09_s12

Inwentaryzacja to kluczowy pierwszy krok. Należy sprawdzić, które systemy w sieci nadal używają SMBv1. Można to zrobić za pomocą narzędzi takich jak Microsoft Message Analyzer, Wireshark (filtr smb || smb2) lub skryptów PowerShell sprawdzających logi zdarzeń SMB.

W logach Windows należy szukać Event ID 1001 (klient) i 1002 (serwer) w Applications and Services Logs. Wskazują one na próby połączenia z użyciem SMBv1. W Sambie należy sprawdzić logi smbd z poziomem logowania max 2.

Pilotażowa grupa serwerów powinna obejmować serwery nieprodukcyjne lub o niskim priorytecie. Po tygodniu testów i rozwiązaniu problemów ze starszymi aplikacjami, można przystąpić do wyłączania SMBv1 na serwerach produkcyjnych.

Najczęstszym problemem podczas wyłączania SMBv1 są stare urządzenia biurowe (drukarki, skanery, systemy kontroli dostępu), które mają wbudowane oprogramowanie klienckie SMBv1. Dla takich urządzeń należy rozważyć aktualizację firmware'u lub umieszczenie ich w osobnej strefie sieciowej.

13 / 50
Samba -- SMB dla systemów Unix/Linux

Samba - SMB na systemy Unix/Linux

  • Samba -- otwarta implementacja protokołu SMB/CIFS dla systemów Unix/Linux
  • Stworzona przez Andrew Tridgella w 1992 roku jako reverse engineering protokołu SMB
  • Główne komponenty: smbd (usługa plików i druku), nmbd (NetBIOS), winbindd (integracja z AD)
  • smbd nasłuchuje na porcie TCP 445 (SMB) i opcjonalnie 139 (NetBIOS)
  • nmbd obsługuje rozgłaszanie NetBIOS (UDP 137/138) i udział w przeglądaniu sieci
  • winbindd umożliwia mapowanie użytkowników i grup z Active Directory na lokalne UID/GID
ASK_prez09_s13

Andrew Tridgell, twórca Samba, rozpoczął pracę nad protokołem SMB w 1991 roku, używając sniffera pakietów (tcpdump) do analizy ruchu między PC a serwerem DEC Pathworks. W 1992 roku opublikował pierwszą wersję oprogramowania, które nazwał Samba.

smbd to główny demon Samba odpowiedzialny za obsługę klientów SMB. Zarządza udziałami plików i drukarek, autoryzacją oraz kontrolą dostępu. Każdy klient łączący się z serwerem Samba uruchamia nowy proces smbd.

nmbd zajmuje się obsługą NetBIOS: rejestracją nazw NetBIOS, odpowiadaniem na zapytania name query oraz udziałem w wyborze browse master. Bez nmbd klienci Windows nie będą widzieć serwera Samba w Otoczeniu sieciowym.

winbindd jest niezbędny w środowiskach zintegrowanych z Active Directory. Odpowiada za rozpoznawanie użytkowników i grup AD, mapowanie ich na lokalne identyfikatory UID/GID oraz uwierzytelnianie przez Kerberos.

14 / 50
Plik smb.conf -- struktura konfiguracji Samba

Struktura pliku smb.conf

  • Główny plik konfiguracyjny Samba: /etc/samba/smb.conf
  • Sekcja [global] -- ustawienia globalne: grupa robocza, poziom logowania, wersja SMB
  • Sekcje [nazwa_udziału] -- definicje poszczególnych udziałów plików lub drukarek
  • Składnia: parametr = wartość, komentarze od znaku # lub ;
  • Walidacja konfiguracji: testparm -- sprawdza poprawność składni i wyświetla ostrzeżenia
  • Po zmianie smb.conf: systemctl restart smbd lub smbcontrol smbd reload-config
ASK_prez09_s14

Plik smb.conf jest podzielony na sekcje, gdzie każda sekcja zaczyna się od nazwy w nawiasach kwadratowych. Sekcja [global] musi wystąpić dokładnie raz i zawiera ustawienia dotyczące całego serwera Samba.

Niektóre z najważniejszych parametrów w sekcji [global] to: workgroup (nazwa grupy roboczej lub domeny), server string (opis serwera), security (user, ads, domain, server), server min protocol (minimalna wersja SMB), log level (poziom szczegółowości logowania) oraz interfaces (interfejsy sieciowe do nasłuchu).

Udziały definiuje się jako osobne sekcje. Dla każdego udziału określa się path (lokalna ścieżka), comment (opis), read only (tylko do odczytu), browseable (widoczny w sieci), guest ok (dostęp bez hasła) i valid users (lista dozwolonych użytkowników).

Narzędzie testparm powinno być uruchamiane po każdej zmianie smb.conf. Wyświetla ono ostrzeżenia o nieprawidłowych parametrach, nieznanych opcjach i potencjalnych problemach konfiguracyjnych.

15 / 50
Uwierzytelnianie Samba -- smbpasswd i baza SMB

Baza haseł SMB w Sambie

  • Samba przechowuje hasła użytkowników we własnej bazie passdb.tdb (lub smbpasswd)
  • Hasło w bazie SMB jest oddzielne od hasła systemowego Linux -- konieczna osobna synchronizacja
  • Dodawanie użytkownika: smbpasswd -a nazwa_uzytkownika
  • Zarządzanie bazą: pdbedit -L (lista), pdbedit -x nazwa (usunięcie)
  • Włączanie/wyłączanie konta: smbpasswd -e nazwa (włączenie), -d (wyłączenie)
  • Integracja z AD: security = ads w smb.conf, a następnie net ads join
ASK_prez09_s15

Model uwierzytelniania Samba opiera się na własnej bazie haseł, która jest oddzielona od systemowej bazy /etc/shadow. Wynika to z faktu, że protokół SMB wymaga dostępu do skrótów haseł w formacie NTLM lub LM, których system Linux domyślnie nie przechowuje.

Hasła w bazie SMB są przechowywane w formie zahashowanej przy użyciu algorytmów NTLMv2. Pliki bazy to zwykle passdb.tdb (w nowszych wersjach) lub smbpasswd (starsze wersje). Bazy .tdb znajdują się w katalogu /var/lib/samba/.

Polecenie smbpasswd -a dodaje nowego użytkownika Samba. Użytkownik musi istnieć w systemie Linux (w /etc/passwd), aby można było dodać go do bazy SMB. Polecenie pdbedit oferuje bardziej zaawansowane opcje zarządzania.

W środowiskach z Active Directory, Samba może delegować uwierzytelnianie do kontrolera domeny AD. Wymaga to ustawienia security = ads, odpowiedniej konfiguracji Kerberosa (/etc/krb5.conf) i wykonania net ads join do domeny.

16 / 50
Parametry udziału -- kontrola dostępu w SMB

Kontrola dostępu w udziałach

  • path -- ścieżka do udostępnianego katalogu
  • read only -- udział tylko do odczytu (yes/no)
  • browseable -- widoczny w przeglądarce sieciowej
  • guest ok -- dostęp bez hasła (gość)
  • valid users -- lista dozwolonych użytkowników
  • create mask / directory mask -- maski uprawnień dla plików i katalogów
ASK_prez09_s16

Parametr path definiuje bezwzględną ścieżkę w systemie plików serwera do katalogu, który ma być udostępniony przez SMB. Katalog musi istnieć i mieć odpowiednie uprawnienia dostępu dla użytkownika, pod którym działa smbd.

Parametr read only = no udostępnia zapis do udziału. Gdy read only = yes (ustawienie domyślne), klienci mogą tylko czytać pliki. Wartość read only = no w połączeniu z guest ok = yes tworzy publiczny udział z pełnym dostępem dla wszystkich.

valid users pozwala na stworzenie listy użytkowników i grup (@nazwa_grupy), którzy mają dostęp do udziału. Wszyscy inni użytkownicy będą odrzuceni. Parametr invalid users działa odwrotnie.

Masks (create mask, directory mask) definiują początkowe uprawnienia dla plików i katalogów tworzonych przez klientów SMB. Działają jak maska AND na uprawnieniach zgłaszanych przez klienta.

17 / 50
Przykładowa konfiguracja smb.conf

Praktyczny przykład udziału Samba

  • Sekcja [global]: workgroup, server string, security = user, server min protocol = SMB2
  • Udział [Publiczny]: guest ok = yes, read only = yes, path = /srv/samba/public
  • Udział [Prywatny]: valid users = ala, read only = no, create mask = 0644
  • Parametr server min protocol = SMB2 wyłącza SMBv1 dla wszystkich klientów
  • Udział publiczny nadaje się do udostępniania dokumentacji i plików instalacyjnych
  • Udział prywatny z pełnym dostępem do zapisu tylko dla wybranego użytkownika
ASK_prez09_s17

Przykładowa konfiguracja zawiera sekcję [global] z podstawowymi ustawieniami serwera Samba. Grupa robocza ASKLAB identyfikuje serwer w sieci, a server string to czytelny opis wyświetlany klientom.

Parametr security = user oznacza, że każdy użytkownik musi podać hasło SMB przy połączeniu, chyba że udział ma guest ok = yes.

Parametr server min protocol = SMB2 wyłącza SMBv1, co znacząco zwiększa bezpieczeństwo serwera. Klienci próbujący użyć SMBv1 otrzymają błąd negocjacji protokołu.

Udział [Publiczny] jest dostępny dla wszystkich (guest ok = yes) i tylko do odczytu. Udział [Prywatny] jest dostępny tylko dla użytkownika ala z pełnym dostępem do zapisu.

18 / 50
Narzędzia administracyjne Samba

smbclient, smbstatus i net

  • smbstatus -- podgląd aktywnych połączeń i zablokowanych plików
  • smbclient -L //localhost -- lista dostępnych udziałów
  • smbclient //localhost/Prywatny -U ala -- połączenie do udziału
  • smbcontrol smbd reload-config -- przeładowanie konfiguracji bez restartu
  • mount -t cifs //server/udzial /mnt -o username=ala -- montowanie SMB w Linux
  • testparm -- walidacja pliku smb.conf
ASK_prez09_s18

smbstatus to podstawowe narzędzie monitorujące dla administratora Samba. Pokazuje listę aktywnych połączeń (z adresami IP klientów), otwarte pliki i zablokowane zakresy plików.

smbclient to wszechstronne narzędzie klienckie, które działa podobnie do klienta FTP. Po połączeniu do udziału, użytkownik może używać komend takich jak ls, cd, get, put, mkdir, rm do zarządzania plikami.

Montowanie SMB przez mount -t cifs wymaga zainstalowanego pakietu cifs-utils. Standardowe opcje montowania to: username, password, domain, uid/gid, sec (ntlm, ntlmv2, krb5) oraz vers (1.0, 2.0, 2.1, 3.0).

testparm to niezbędne narzędzie do walidacji konfiguracji przed ponownym uruchomieniem smbd. Wyświetla ostrzeżenia o przestarzałych parametrach i potencjalnych problemach.

19 / 50
Samba a Active Directory -- integracja

Samba jako członek domeny AD

  • security = ads w smb.conf -- Samba korzysta z Kerberos i LDAP do uwierzytelniania
  • net ads join -U Administrator -- dołączenie serwera Linux do domeny AD
  • winbindd mapuje użytkowników AD na lokalne UID/GID
  • W udziałach można używać użytkowników AD: valid users = DOMENAżala
  • Wymaga działającego DNS i poprawnej konfiguracji Kerberosa (/etc/krb5.conf)
  • getent passwd pokazuje użytkowników AD po uruchomieniu winbindd
ASK_prez09_s19

Integracja Samba z Active Directory to jeden z ważniejszych scenariuszy w środowiskach heterogenicznych. Dzięki niej serwer Linux z Sambą może udostępniać pliki z wykorzystaniem użytkowników i grup zdefiniowanych w AD.

Proces rozpoczyna się od konfiguracji Kerberosa w pliku /etc/krb5.conf. Należy poprawnie ustawić realm (wielkimi literami) oraz serwery KDC. Działanie Kerberosa można przetestować za pomocą kinit administratora.

Po skonfigurowaniu smb.conf z security = ads i uruchomieniu smbd, wykonujemy net ads join -U Administrator. To polecenie tworzy konto komputerowe w AD, ustawia SPN i zapisuje klucz Kerberosa w /etc/krb5.keytab.

Po uruchomieniu winbindd, polecenie getent passwd powinno pokazać użytkowników AD z zakresem UID zdefiniowanym w smb.conf. Udziały Samba mogą teraz używać nazw użytkowników AD w parametrach valid users.

20 / 50
Debugowanie Samba -- logi i rozwiązywanie problemów

Diagnostyka i logi Samba

  • log level w smb.conf: zakres 0-10, zalecany 2-3 dla diagnostyki
  • Logi: /var/log/samba/log.smbd, /var/log/samba/log.nmbd
  • testparm -- walidacja składni smb.conf
  • Weryfikacja nasłuchu: ss -tlnp | grep smbd
  • Test połączenia: smbclient -L //localhost -U% (anonimowy)
  • Najczęstsze problemy: błędna konfiguracja smb.conf, wyłączony firewall, brak użytkownika w bazie SMB
ASK_prez09_s20

Poziom logowania (log level) jest kluczowy dla diagnostyki. Przy poziomie 0-1 logowane są tylko krytyczne błędy. Poziom 2-3 dodaje informacje o połączeniach i uwierzytelnianiu.

Pliki logów Samba znajdują się w /var/log/samba/. Każdy demon (smbd, nmbd, winbindd) ma swój osobny plik logu. W przypadku problemów z dostępem do udziału, należy przede wszystkim sprawdzić log.smbd.

Weryfikacja działania smbd za pomocą ss -tlnp | grep smbd powinna pokazać nasłuch na porcie 445. Jeśli smbd nie nasłuchuje, należy sprawdzić, czy demon jest uruchomiony i czy firewall nie blokuje portu.

Problemy z uwierzytelnianiem są często spowodowane brakiem użytkownika w bazie SMB, różnicą między hasłem systemowym a SMB lub błędną konfiguracją security w smb.conf.

21 / 50
NFS -- Network File System, standard Unix

NFS - natywny protokół Unix

  • NFS (Network File System) -- protokół do zdalnego dostępu do plików przez sieć, standard w Unix/Linux
  • Stworzony przez Sun Microsystems w 1984 roku jako część SunOS (Network File System, NFSv2)
  • Oparty na architekturze RPC (Remote Procedure Call) -- zdalne wywoływanie procedur plikowych
  • Format bezstanowy (stateless) w NFSv3, stanowy (stateful) w NFSv4 -- istotna różnica architektoniczna
  • Umożliwia montowanie zdalnych systemów plików lokalnie -- przezroczysty dostęp dla aplikacji
  • Obsługuje różne systemy plików (ext4, XFS, ZFS) jako podstawę eksportowanych zasobów
ASK_prez09_s21

NFS został zaprojektowany jako protokół otwarty - jego specyfikacja była publicznie dostępna od samego początku. Dzięki temu różni producenci mogli implementować NFS we własnych systemach operacyjnych.

Architektura RPC (Remote Procedure Call) jest sercem NFS. Gdy klient chce odczytać plik, wywołuje funkcję READ z parametrami (handle pliku, offset, długość), która jest przetłumaczona na żądanie RPC i wysłana do serwera.

Różnica między podejściem bezstanowym (NFSv3) a stanowym (NFSv4) jest fundamentalna. W NFSv3 każde żądanie jest niezależne, podczas gdy w NFSv4 klient i serwer utrzymują stan sesji.

NFS jest integralną częścią systemów Unix/Linux od dziesięcioleci. Współczesne dystrybucje Linuksa używają implementacji NFS jądra (nfsd), która oferuje wysoką wydajność dzięki działaniu w przestrzeni jądra.

22 / 50
Architektura RPC -- rola portmappera/rpcbind

RPCbind - serwis nazewniczy NFS

  • rpcbind (dawniej portmapper) -- usługa mapująca programy RPC na numery portów TCP/UDP
  • Działa na porcie TCP/UDP 111 -- pierwszy kontakt klienta z serwerem NFS
  • Każda usługa NFS rejestruje się w rpcbind z unikalnym numerem programu RPC
  • Programy RPC: NFS (100003), mountd (100005), nlockmgr (100021), rquotad (100011)
  • Klient pyta rpcbind: Na którym porcie działa program NFS? i otrzymuje numer portu
  • rpcinfo -p -- wyświetla programy RPC zarejestrowane w rpcbind
ASK_prez09_s22

Architektura RPC w NFS działa w następujący sposób: gdy demon nfsd uruchamia się na serwerze, rejestruje w rpcbind program RPC o numerze 100003 wraz z obsługiwanymi wersjami protokołu.

Klient, który chce zamontować eksport NFS, najpierw łączy się z rpcbind na porcie 111 i pyta o program 100003. rpcbind zwraca numer portu, na którym działa nfsd.

Dodatkowo klient pyta rpcbind o program 100005 (mountd), który obsługuje żądania montowania. mountd weryfikuje, czy klient ma prawo zamontować żądany eksport i zwraca filehandle.

W NFSv4 architektura uległa uproszczeniu. rpcbind jest nadal używany, ale mountd nie jest już potrzebny do początkowego montowania - funkcje montowania są zintegrowane z NFSv4.

23 / 50
Ewolucja NFS -- od NFSv2 do NFSv4

Od NFSv2 do NFSv4.2

  • NFSv2 (1984): pierwsza wersja, UDP only, limit 2 GB plików, bezstanowy
  • NFSv3 (1995): TCP + UDP, pliki >2 GB, 64-bitowe przesunięcia, async writes
  • NFSv4 (2000): stanowy (stateful), zintegrowane blokady, mount w protokole, Kerberos, ACL
  • NFSv4.1 (2010): pNFS (Parallel NFS), sesje, delegacje, trunking
  • NFSv4.2 (2016): SPA4 (Space Reservation), hole punching, clone/copy
  • NFSv3 jest nadal powszechnie używany, ale NFSv4 jest zalecany dla nowych wdrożeń
ASK_prez09_s23

NFSv2, opublikowany w 1984 roku, był pierwszą implementacją protokołu zdalnego dostępu do plików. Działał wyłącznie przez UDP, co ograniczało go do sieci lokalnych o niskim opóźnieniu.

NFSv3, zdefiniowany w RFC 1813, był znaczącym ulepszeniem. Wprowadził obsługę TCP, 64-bitowe przesunięcia plików, zapis asynchroniczny i ulepszone mechanizmy blokad.

NFSv4 (RFC 3530) był kompletną przebudową protokołu. Wprowadził stanowość (sesje), zintegrowane blokady plików oraz obowiązkowe wsparcie dla bezpieczeństwa RPCSEC_GSS (Kerberos).

NFSv4.1 wprowadził pNFS (Parallel NFS), który umożliwia równoległy dostęp do danych przez wiele serwerów danych zarządzanych przez jeden serwer metadanych. To przełomowe rozwiązanie dla klastrów obliczeniowych i HPC.

24 / 50
NFSv3 vs NFSv4 -- porównanie

Kluczowe różnice między wersjami

  • NFSv3: bezstanowy, dynamiczne porty przez rpcbind, osobny demon mountd, AUTH_SYS
  • NFSv4: stanowy, stały port TCP 2049, wbudowane montowanie i blokady, Kerberos
  • NFSv3: trudna konfiguracja firewalla (wiele portów dynamicznych)
  • NFSv4: łatwa konfiguracja firewalla (tylko port 2049)
  • NFSv3: brak ACL, ograniczone bezpieczeństwo
  • NFSv4: NFSv4 ACL, delegacje, pełne bezpieczeństwo z Kerberos
ASK_prez09_s24

Różnica w stanowości między NFSv3 a NFSv4 jest fundamentalna. W NFSv3 serwer nie przechowuje żadnych informacji o stanie klienta. W przypadku restartu serwera, klient po prostu ponawia żądania.

Największą praktyczną różnicą jest kwestia portów i firewalla. NFSv3 używa dynamicznych portów dla różnych usług, co utrudnia konfigurację firewalla. NFSv4 używa głównie portu TCP 2049.

Bezpieczeństwo to kolejna kluczowa różnica. NFSv3 domyślnie używa AUTH_SYS, który przesyła UID i GID użytkownika w czystym tekście. NFSv4 wymusza użycie RPCSEC_GSS z Kerberosem.

Delegacje w NFSv4 pozwalają klientowi na buforowanie danych plików lokalnie przez określony czas. Serwer deleguje klientowi prawa do pliku, co znacząco poprawia wydajność przy częstych odczytach.

25 / 50
Bezpieczeństwo w NFSv4 -- Kerberos i ACL

Kerberos i ACL w NFSv4

  • RPCSEC_GSS -- framework bezpieczeństwa dla RPC, obsługuje Kerberos v5, SPKM-3 i LIPKEY
  • krb5: uwierzytelnianie za pomocą Kerberos (tożsamość klienta potwierdzona przez KDC)
  • krb5i: uwierzytelnianie + integralność (checksum każdego pakietu RPC)
  • krb5p: uwierzytelnianie + integralność + szyfrowanie (pełna poufność danych)
  • NFSv4 ACL: zaawansowane listy kontroli dostępu (allow/deny, dziedziczenie, maska)
  • idmapd tłumaczy nazwy Kerberos (user@REALM) na lokalne UID/GID
ASK_prez09_s25

RPCSEC_GSS (Generic Security Services) to warstwa bezpieczeństwa dla protokołu RPC, która abstrahuje od konkretnych mechanizmów kryptograficznych. W przypadku NFSv4 najczęściej używanym mechanizmem jest Kerberos v5.

Tryb krb5 zapewnia tylko uwierzytelnienie - serwer wie, kim jest klient, ale dane są przesyłane w czystym tekście. Tryb krb5i dodaje integralność, a krb5p szyfruje całą transmisję.

NFSv4 ACL to znacznie bardziej zaawansowany mechanizm kontroli dostępu niż tradycyjne uprawnienia Unix. Pozwala na definiowanie reguł allow i deny dla poszczególnych użytkowników i grup.

Demon idmapd pełni kluczową rolę w mapowaniu identyfikatorów. Gdy klient uwierzytelniony przez Kerberos próbuje uzyskać dostęp do pliku, idmapd na serwerze tłumaczy nazwę na lokalny UID.

26 / 50
Porównanie SMB i NFS -- kiedy co wybrać

SMB vs NFS - wybór protokołu

  • SMB: platforma główna Windows, TCP 445 (139), szyfrowanie wbudowane AES
  • NFS: platforma główna Unix/Linux, RPC/TCP 2049 (v4), Kerberos krb5p
  • SMB: lepsza integracja z AD, przeglądarka sieciowa (NetBIOS), prostsze mapowanie dysków
  • NFS: lepsza wydajność w Linux, mniejsze narzuty, idealny dla HPC
  • W środowiskach mieszanych często stosuje się oba protokoły równolegle
  • NAS (Synology, QNAP) obsługują oba protokoły na tych samych katalogach
ASK_prez09_s26

Wybór między SMB a NFS zależy przede wszystkim od platformy klienckiej. W środowisku czysto Windowsowym naturalnym wyborem jest SMB. W środowisku czysto Linuksowym naturalnym wyborem jest NFS.

SMB oferuje lepszą integrację z Active Directory, przeglądarkę sieciową i prostsze mapowanie dysków dla użytkowników Windows. NFS oferuje lepszą wydajność i mniejsze narzuty w systemach Unix/Linux.

W praktyce wiele organizacji stosuje podejście hybrydowe: serwer plików z Sambą dla klientów Windows i serwer NFS dla klientów Linux.

Z punktu widzenia bezpieczeństwa, oba protokoły w najnowszych wersjach oferują solidne mechanizmy: SMBv3 z szyfrowaniem AES i NFSv4 z Kerberos krb5p.

27 / 50
NFS w praktyce -- instalacja i pierwsze kroki

Instalacja nfs-kernel-server

  • Instalacja serwera: apt install nfs-kernel-server (Ubuntu/Debian)
  • Instalacja klienta: apt install nfs-common
  • Sprawdzenie działania: systemctl status nfs-kernel-server
  • Sprawdzenie RPC: rpcinfo -p localhost -- pokazuje zarejestrowane programy RPC
  • Pakiet nfs-kernel-server zawiera serwer NFS działający w przestrzeni jądra (nfsd)
  • rpcbind jest automatycznie instalowany i uruchamiany przed nfsd
ASK_prez09_s27

Implementacja NFS w jądrze Linuksa (nfsd) oferuje znacznie lepszą wydajność niż implementacje w przestrzeni użytkownika, ponieważ operacje plikowe są wykonywane bezpośrednio w kontekście jądra.

Po uruchomieniu nfs-kernel-server, proces nfsd tworzy wiele wątków (domyślnie 8) do obsługi żądań klientów. Liczbę wątków można skonfigurować w pliku /etc/default/nfs-kernel-server (RPCNFSDCOUNT).

Wynik polecenia rpcinfo -p pokazuje wszystkie programy RPC zarejestrowane w rpcbind. Dla serwera NFS powinniśmy zobaczyć: 100003 (nfs), 100005 (mountd), 100021 (nlockmgr) i 100011 (rquotad).

W NFSv4 port 2049 jest używany dla programu nfs (100003), a dodatkowe usługi (mountd, nlockmgr) mogą nie być potrzebne, ponieważ ich funkcje są zintegrowane z protokołem NFSv4.

28 / 50
Idmapd -- mapowanie identyfikatorów w NFSv4

Mapowanie UID/GID w NFSv4

  • Problem: NFSv4 używa nazw użytkowników (user@domain) zamiast numerycznych UID/GID
  • Rozwiązanie: demon rpc.idmapd tłumaczy nazwy na UID/GID i odwrotnie
  • Plik konfiguracyjny: /etc/idmapd.conf -- sekcja [Mapping] z nazwą domeny
  • Domain = asklab.local -- domena używana do mapowania identyfikatorów
  • Narzędzie: nfsidmap -d (debug), nfsidmap -c (czyszczenie cache)
  • W NFSv3 mapowanie nie jest potrzebne -- przesyłane są surowe UID/GID (AUTH_SYS)
ASK_prez09_s28

W NFSv4 identyfikatory użytkowników i grup są przesyłane jako stringi w formacie user@domain, a nie jako numeryczne UID/GID jak w NFSv3. To eliminuje problem różnych UID dla tego samego użytkownika na różnych maszynach.

Demon rpc.idmapd obsługuje mapowanie w obie strony: z nazwy użytkownika na UID i z UID na nazwę.

Plik /etc/idmapd.conf wymaga poprawnego ustawienia parametru Domain. Wartość Domain musi być taka sama na kliencie i na serwerze, aby mapowanie działało poprawnie.

W przypadku problemów z mapowaniem, należy sprawdzić logi idmapd w /var/log/syslog i użyć nfsidmap -c do czyszczenia cache.

29 / 50
Demon mountd i weryfikacja żądań montowania

Demon mountd w architekturze NFS

  • mountd (rpc.mountd) -- demon odpowiedzialny za weryfikację i obsługę żądań montowania NFS
  • Program RPC: 100005, wersje 1-3, działa na dynamicznym porcie przydzielonym przez rpcbind
  • Gdy klient wywołuje mount, najpierw łączy się z mountd, który sprawdza /etc/exports
  • Po weryfikacji mountd zwraca filehandle do katalogu głównego eksportu
  • W NFSv4 funkcje mountd są zintegrowane z jądrem nfsd, mountd nie jest już potrzebny
  • Można ustalić stały port dla mountd (opcja -p) dla łatwiejszej konfiguracji firewalla
ASK_prez09_s29

Demon mountd jest nieodłączną częścią serwera NFSv3. Gdy klient próbuje zamontować eksport, mountd najpierw sprawdza plik /etc/exports, aby upewnić się, że klient ma odpowiednie uprawnienia.

Filehandle (uchwyt plikowy) to nieprzezroczysty identyfikator pliku lub katalogu używany przez NFS do identyfikacji zasobów. W NFSv3 filehandle jest generowany przez mountd.

W NFSv4 proces montowania jest znacznie prostszy. Klient łączy się bezpośrednio z demonem nfsd na porcie TCP 2049 i używa zintegrowanych operacji protokołu.

W NFSv3 można ustalić stały port dla mountd, dodając opcję -p w pliku /etc/default/nfs-kernel-server. To ułatwia konfigurację firewalla.

30 / 50
Pseudo system plików w NFSv4

Wirtualny katalog główny NFSv4

  • NFSv4 wprowadza koncepcję pseudo systemu plików -- jeden punkt montowania dla wszystkich eksportów
  • Klient montuje główny katalog serwera NFSv4, a następnie porusza się po strukturze za pomocą LOOKUP
  • Eksport jest widoczny jako podkatalog w pseudo systemie plików
  • Eliminuje potrzebę wielokrotnego montowania każdego eksportu osobno
  • Upraszcza zarządzanie -- klient widzi tylko dozwolone dla niego eksporty
  • mount -t nfs4 server:/ /mnt -- montowanie pseudo systemu plików NFSv4
ASK_prez09_s30

Pseudo filesystem to jedna z najważniejszych innowacji NFSv4. W NFSv3 każdy eksport był montowany osobno, co wymagało wielu wpisów w /etc/fstab i osobnych punktów montowania.

W NFSv4 klient montuje główny katalog serwera (server:/) i widzi wszystkie dostępne dla siebie eksporty jako podkatalogi. Serwer prezentuje widok zależny od uprawnień klienta.

Mechanizm fs_location w NFSv4.1 pozwala na przekierowanie klienta do innego serwera dla konkretnego eksportu, co umożliwia budowanie rozproszonych systemów plików.

Pseudo filesystem eliminuje problem rozbieżności między strukturą katalogów na serwerze a sposobem jej prezentacji klientom, co było częstym źródłem błędów w konfiguracji NFSv3.

31 / 50
Plik /etc/exports -- definiowanie eksportów NFS

Format pliku /etc/exports

  • Główny plik konfiguracyjny NFS: /etc/exports
  • Składnia: /katalog/do/eksportu klient1(opcje) klient2(opcje)
  • Klient: nazwa hosta, adres IP, podsieć CIDR (np. 192.168.56.0/24) lub domena (źródło)
  • Opcje: rw/ro, sync/async, no_subtree_check, root_squash
  • Po zmianie /etc/exports: exportfs -arv (przeładowanie eksportów)
  • Weryfikacja: exportfs -v lub showmount -e localhost
ASK_prez09_s31

Plik /etc/exports jest podstawowym mechanizmem definiowania zasobów udostępnianych przez NFS. Każda linia definiuje jeden eksport - ścieżkę katalogu na serwerze i listę klientów z opcjami dostępu.

Klient może być określony jako pojedynczy adres IP (192.168.56.10), podsieć CIDR (192.168.56.0/24), nazwa DNS (klient.asklab.local) lub domena (*.asklab.local). Znak * oznacza wszystkich klientów.

Po każdej zmianie /etc/exports należy uruchomić exportfs -arv, który odczytuje plik ponownie i aktualizuje listę eksportów w jądrze bez restartu usługi nfs-kernel-server.

Polecenie exportfs -v wyświetla aktualną listę eksportów wraz z opcjami, a showmount -e localhost pokazuje, jakie eksporty są dostępne dla klientów na danym serwerze.

32 / 50
Opcje eksportu NFS -- szczegółowy opis

rw, sync, no_subtree_check

  • rw / ro -- dostęp do odczytu i zapisu (rw) lub tylko do odczytu (ro, domyślnie)
  • sync / async -- zapis synchroniczny (sync, domyślnie od NFSv4) lub asynchroniczny (async, większa wydajność)
  • no_subtree_check -- wyłącza sprawdzanie, czy plik znajduje się w eksportowanym poddrzewie
  • no_wdelay / wdelay -- kontrola opóźnienia zapisu (wdelay domyślnie, no_wdelay dla większej spójności)
  • root_squash -- mapowanie roota na anonimowego użytkownika (najważniejsza opcja bezpieczeństwa)
  • all_squash -- mapowanie wszystkich użytkowników na anonimowych
ASK_prez09_s32

Opcja sync (domyślnie od NFSv4) wymusza synchroniczny zapis na serwerze - serwer potwierdza zapis dopiero po fizycznym zapisaniu danych na dysk. async pozwala na potwierdzenie przed zapisem, co zwiększa wydajność, ale ryzykuje utratę danych przy awarii.

no_subtree_check to ważna optymalizacja wydajności. Gdy jest włączona (domyślnie od NFSv4), serwer nie sprawdza, czy żądany plik faktycznie znajduje się w eksportowanym katalogu. Wyłączenie tego sprawdzania zwiększa wydajność.

Opcja no_wdelay wyłącza opóźnienie zapisu. Gdy serwer otrzymuje wiele małych zapisów do różnych plików, domyślnie grupuje je (wdelay). no_wdelay zapisuje każdy zapis natychmiast.

Opcje nohide, secure, insecure i insecure_locks są rzadziej używane, ale mogą być potrzebne w specyficznych konfiguracjach. Zazwyczaj domyślne ustawienia są wystarczające dla większości zastosowań.

33 / 50
root_squash -- krytyczny mechanizm bezpieczeństwa NFS

Ochrona roota przed zdalnym dostępem

  • root_squash (domyślnie włączone) -- mapuje UID 0 (root) na anonimowego użytkownika (nobody/nogroup)
  • Zapobiega sytuacji, w której root z klienta NFS ma pełny dostęp do plików na serwerze
  • no_root_squash -- wyłącza mapowanie, root klienta = root na serwerze (NIEBEZPIECZNE!)
  • all_squash -- mapuje WSZYSTKICH użytkowników (nie tylko root) na anonimowych
  • anonuid / anongid -- określa konkretny UID/GID dla anonimowego użytkownika
  • Bez root_squash atakujący z dostępem do klienta NFS może modyfikować dowolny plik na serwerze
ASK_prez09_s33

Mechanizm root_squash jest najważniejszym zabezpieczeniem w NFS. Działa na zasadzie mapowania UID 0 (root) z klienta na lokalnego użytkownika anonimowego (zazwyczaj nobody lub nfsnobody) z minimalnymi uprawnieniami.

Gdy root_squash jest wyłączony (no_root_squash), root z klienta NFS ma pełne uprawnienia roota na serwerze. Oznacza to, że po skompromitowaniu dowolnego klienta, atakujący ma pełny dostęp do wszystkich plików na serwerze NFS.

Opcja all_squash jest użyteczna w scenariuszach, gdzie wszyscy klienci powinni mieć identyczne uprawnienia, na przykład dla anonimowego dostępu publicznego do zasobów tylko do odczytu.

Parametry anonuid i anongid pozwalają na precyzyjne określenie, jakiego lokalnego użytkownika i grupę ma otrzymać anonimowy klient. Dzięki temu można kontrolować, jakie uprawnienia będą mieli klienci bez własnego konta na serwerze.

34 / 50
Administracja eksportami -- exportfs i showmount

exportfs i showmount

  • exportfs -arv -- przeładowanie wszystkich eksportów z /etc/exports (a=all, r=re-export, v=verbose)
  • exportfs -u host:/eksport -- usunięcie konkretnego eksportu bez restartu
  • exportfs -v -- wyświetlenie listy eksportów z aktualnymi opcjami
  • showmount -e serwer -- zapytanie do serwera o listę dostępnych eksportów
  • showmount -a serwer -- lista aktualnie zamontowanych eksportów
  • exportfs -f -- flush lub odświeżenie wszystkich eksportów
ASK_prez09_s34

exportfs to podstawowe narzędzie administracyjne NFS. Uruchomione bez argumentów pokazuje aktualną listę eksportów. Opcja -arv odczytuje na nowo plik /etc/exports i synchronizuje listę eksportów w jądrze.

showmount to narzędzie klienckie do odpytywania serwera NFS o dostępne eksporty. Opcja -e wyświetla listę wszystkich eksportów, a -a pokazuje, które eksporty są aktualnie zamontowane przez których klientów.

Po usunięciu eksportu z /etc/exports i wykonaniu exportfs -arv, klienci, którzy mają go zamontowany, nadal mają dostęp, ale nowi klienci nie będą mogli go zamontować.

W NFSv4 showmount może nie działać poprawnie, ponieważ rejestracja eksportów odbywa się przez inny mechanizm. W takim przypadku lepiej użyć exportfs -v do weryfikacji dostępnych eksportów.

35 / 50
Przykładowa konfiguracja /etc/exports

Eksport NFS - przykład konfiguracji

  • /srv/nfs/public 192.168.56.0/24(ro,sync,no_subtree_check)
  • /srv/nfs/private 192.168.56.10(rw,sync,no_subtree_check,root_squash)
  • /srv/nfs/backup 192.168.56.0/24(rw,sync,no_subtree_check,no_root_squash)
  • /home *.asklab.local(rw,sync,no_subtree_check)
  • Eksport publiczny tylko do odczytu dla całej podsieci
  • Eksport backup z no_root_squash (tylko dla zaufanych serwerów backupu)
ASK_prez09_s35

Przykładowa konfiguracja /etc/exports pokazuje różne scenariusze użycia. Eksport publiczny (/srv/nfs/public) jest dostępny dla całej podsieci 192.168.56.0/24 tylko do odczytu.

Eksport prywatny (/srv/nfs/private) jest dostępny tylko dla jednego konkretnego klienta (192.168.56.10) z pełnym dostępem do zapisu i włączonym root_squash dla bezpieczeństwa.

Eksport backup (/srv/nfs/backup) ma wyłączony root_squash, co oznacza, że root z klienta backupu ma pełne uprawnienia na serwerze. To celowe działanie, ponieważ narzędzia backupowe często wymagają dostępu jako root.

Opcja *.asklab.local w eksporcie /home oznacza, że każdy klient z domeny asklab.local może zamontować ten katalog. To wygodne, ale wymaga działającego DNS dla poprawnej weryfikacji nazw.

36 / 50
Montowanie NFS po stronie klienta

Montowanie udziałów NFS

  • Podstawowe montowanie: mount -t nfs4 server:/eksport /mnt
  • Opcje: hard (twarde, domyślnie) -- czeka w nieskończoność, soft -- poddaje się po czasie
  • Opcja intr -- pozwala przerwać operację SIGINT podczas oczekiwania na odpowiedź
  • Opcja timeo=N -- timeout w dziesiątkach sekund (domyślnie 600 dla TCP, ok. 1,1 s dla UDP)
  • Opcja fg/bg -- montowanie na pierwszym planie (fg) lub w tle (bg) przy niepowodzeniu
  • Opcja vers=N -- wymuszenie wersji NFS (3, 4, 4.1, 4.2), sec=krb5p -- szyfrowanie
ASK_prez09_s36

Różnica między opcjami hard i soft ma istotne znaczenie praktyczne. Przy hard klient będzie próbował w nieskończoność, aż serwer odpowie. Przy soft klient podda się po określonej liczbie prób i zwróci błąd aplikacji.

Opcja intr pozwala na przerwanie działania procesu, który czeka na odpowiedź NFS, za pomocą Ctrl+C lub SIGINT. Bez tej opcji proces zawiesza się na stałe, a jedynym rozwiązaniem jest zamknięcie go przez kill -9.

Opcja timeo określa czas oczekiwania na odpowiedź serwera. Wartość jest wyrażona w dziesiątkach sekund (timeo=7 = 0,7s). Po przekroczeniu czasu klient ponawia żądanie. Dla sieci LAN wartość 2-5 jest odpowiednia.

Opcja bg jest przydatna przy montowaniu w /etc/fstab. Jeśli serwer jest niedostępny podczas uruchamiania, bg przenosi montowanie do tła i nie blokuje procesu bootowania. Po restaurcie system uruchomi się poprawnie, a eksport zostanie zamontowany później.

37 / 50
Montowanie trwałe -- /etc/fstab dla NFS

Trwałe montowanie przez fstab

  • Przykład wpisu w /etc/fstab: server:/eksport /mnt nfs4 defaults,_netdev 0 0
  • Opcja _netdev -- informuje system, że zasób jest na sieci, montowanie po uruchomieniu sieci
  • auto/noauto -- automatyczne montowanie przy starcie (auto, domyślnie) lub ręczne (noauto)
  • users -- pozwala zwykłym użytkownikom na montowanie i odmontowywanie
  • Przykład z opcjami: server:/backup /backup nfs4 rw,hard,intr,timeo=5,sec=krb5p 0 0
  • Uwaga: w systemd fstab jest automatycznie konwertowany na jednostkę mount (.mount)
ASK_prez09_s37

Trwałe montowanie NFS przez /etc/fstab jest standardowym sposobem zapewnienia dostępu do zdalnych zasobów plikowych po każdym restarcie systemu. Opcja _netdev jest krytyczna - bez niej system może próbować zamontować eksport przed uruchomieniem sieci.

W systemach z systemd, każdy wpis w /etc/fstab jest automatycznie konwertowany na jednostkę .mount. Dzięki temu można zarządzać montowaniem NFS za pomocą systemctl.

Opcja noauto jest przydatna dla eksportów, które nie są potrzebne przy starcie systemu. Można je zamontować ręcznie za pomocą mount /punkt lub automatycznie przy pierwszym dostępie (autofs).

W przypadku częstych problemów z montowaniem NFS przy starcie, warto rozważyć użycie autofs, które montuje eksport tylko wtedy, gdy jest faktycznie potrzebny, co eliminuje problemy z kolejnością uruchamiania usług.

38 / 50
NFSv4.1 pNFS -- równoległy dostęp do plików

Równoległy dostęp pNFS

  • pNFS (Parallel NFS) -- rozszerzenie NFSv4.1 umożliwiające równoległy dostęp do plików
  • Architektura: jeden serwer metadanych (Metadata Server) + wiele serwerów danych (Data Servers)
  • Klient łączy się z serwerem metadanych tylko po informacje o lokalizacji danych (layout)
  • Dane są odczytywane/zapisywane bezpośrednio z/do serwerów danych, bez pośrednictwa serwera metadanych
  • Zapewnia liniową skalowalność wydajności -- dodanie kolejnych serwerów danych zwiększa przepustowość
  • Idealne dla HPC (High Performance Computing), klastrów obliczeniowych i dużych zbiorów danych
ASK_prez09_s38

pNFS to przełomowe rozszerzenie NFS, które adresuje problem wąskiego gardła tradycyjnego NFS. W standardowym NFS wszystkie operacje plikowe przechodzą przez jeden serwer, co ogranicza przepustowość.

W architekturze pNFS, serwer metadanych (Metadata Server lub Control MDS) przechowuje tylko informacje o strukturze plików i katalogów. Gdy klient chce odczytać plik, pyta MDS o layout, który wskazuje, na których serwerach danych znajdują się bloki pliku.

Klient komunikuje się bezpośrednio z serwerami danych (Data Servers) używając protokołu zgodnego z rodzajem używanego systemu plików (file layout, block layout, object layout). To eliminuje pośrednictwo serwera metadanych.

pNFS oferuje liniową skalowalność: dodanie kolejnych serwerów danych proporcjonalnie zwiększa całkowitą przepustowość systemu. Dzięki temu pNFS jest idealnym rozwiązaniem dla środowisk HPC i dużych klastrów obliczeniowych.

39 / 50
LAB -- cel i środowisko laboratoryjne

Cel i topologia laboratorium

  • Cel laboratorium: praktyczna konfiguracja serwera Samba i NFS na 2 maszynach wirtualnych
  • Wymagania: 2 maszyny Ubuntu 22.04 LTS w tej samej sieci (np. 192.168.56.0/24)
  • Serwer (192.168.56.100) -- maszyna z zainstalowanym Samba i nfs-kernel-server
  • Klient (192.168.56.10) -- maszyna z pakietami smbclient, cifs-utils, nfs-common
  • Część 1: Konfiguracja Samba (publiczny i prywatny udział)
  • Część 2: Konfiguracja NFS (eksporty z root_squash)
ASK_prez09_s39

Laboratorium zostało zaprojektowane jako praktyczne uzupełnienie teorii przedstawionej w poprzednich slajdach. Uczestnicy będą mieli okazję samodzielnie skonfigurować oba protokoły i przetestować ich działanie.

Do laboratorium potrzebne są dwie maszyny wirtualne z systemem Ubuntu 22.04 LTS. Można użyć VirtualBox z siecią Host-Only lub NAT. Ważne, aby maszyny mogły się komunikować między sobą.

Serwer pełni rolę udostępniacza zasobów plikowych przez oba protokoły. Klient będzie montował i testował dostęp do udostępnionych katalogów.

Przed rozpoczęciem laboratorium należy upewnić się, że firewalle na obu maszynach nie blokują niezbędnych portów (445 dla SMB, 2049 i 111 dla NFS).

40 / 50
LAB część 1 -- konfiguracja udziału Samba Publiczny

Samba Publiczny - krok po kroku

  • Krok 1: Zainstaluj Samba: apt install samba -y
  • Krok 2: Utwórz katalog: mkdir -p /srv/samba/public && chmod 777 /srv/samba/public
  • Krok 3: Dodaj udział do smb.conf: [Publiczny] z guest ok = yes, read only = yes
  • Krok 4: Zrestartuj smbd: systemctl restart smbd
  • Krok 5: Sprawdź: smbclient -L //localhost -U%
  • Krok 6: Z klienta: smbclient //192.168.56.100/Publiczny -U%
ASK_prez09_s40

Konfiguracja udziału publicznego Samba jest najprostszym scenariuszem. Udział będzie dostępny dla wszystkich bez konieczności podawania hasła, ale tylko do odczytu.

Po instalacji Samba, demon smbd uruchamia się automatycznie. Domyślny plik smb.conf zawiera kilka przykładowych udziałów, ale dla naszego laboratorium dodamy własne.

Ważne jest ustawienie odpowiednich uprawnień do katalogu /srv/samba/public. Ponieważ udział jest publiczny, katalog musi być czytelny dla wszystkich (chmod 755 lub 777).

Po restarcie smbd, polecenie smbclient -L z klienta powinno pokazać udział Publiczny na liście dostępnych zasobów. Opcja -U% oznacza anonimowe połączenie bez hasła.

41 / 50
LAB część 1 -- konfiguracja udziału Samba Prywatny

Samba Prywatny - krok po kroku

  • Krok 1: Utwórz katalog: mkdir -p /srv/samba/private
  • Krok 2: Dodaj użytkownika Linux: useradd -m -s /bin/bash ala
  • Krok 3: Dodaj użytkownika SMB: smbpasswd -a ala (podaj hasło)
  • Krok 4: Dodaj udział do smb.conf: [Prywatny] z valid users = ala, read only = no
  • Krok 5: Zrestartuj smbd: systemctl restart smbd
  • Krok 6: Z klienta: smbclient //192.168.56.100/Prywatny -U ala
ASK_prez09_s41

Udział prywatny wymaga uwierzytelnienia. Najpierw tworzymy użytkownika w systemie Linux, a następnie dodajemy go do bazy SMB za pomocą smbpasswd -a. Hasło SMB może być inne niż hasło systemowe.

Parametr valid users = ala w smb.conf ogranicza dostęp do udziału tylko dla tego jednego użytkownika. Można również podać grupę (@nazwa_grupy) lub listę użytkowników oddzielonych spacją.

Po restarcie smbd, próba połączenia bez podania hasła (-U%) powinna się nie powieść, a z użytkownikiem ala i poprawnym hasłem powinna zadziałać.

Po udanym połączeniu za pomocą smbclient, użytkownik może używać komend FTP-podobnych (ls, cd, get, put, mkdir) do zarządzania plikami w udziale prywatnym.

42 / 50
LAB część 1 -- weryfikacja Samba z klientów

Testowanie udziałów SMB z klientów

  • Test 1 -- smbclient: smbclient //192.168.56.100/Publiczny -U% (powinien działać)
  • Test 2 -- smbclient: smbclient //192.168.56.100/Prywatny -U% (powinien odmówić)
  • Test 3 -- smbclient: smbclient //192.168.56.100/Prywatny -U ala (powinien działać)
  • Test 4 -- montowanie CIFS: mount -t cifs //192.168.56.100/Prywatny /mnt -o username=ala
  • Test 5 -- zapis: dotknij /mnt/test.txt && ls -l /mnt/test.txt
  • Test 6 -- odmontowanie: umount /mnt
ASK_prez09_s42

Weryfikacja działania Samba ze strony klienta powinna obejmować kilka testów. Test 1 sprawdza dostęp anonimowy do udziału publicznego, który powinien działać bez hasła.

Test 2 sprawdza, czy udział prywatny faktycznie odrzuca anonimowe połączenia. Test 3 weryfikuje poprawne działanie uwierzytelniania z poprawnym hasłem.

Test 4 pokazuje montowanie SMB jako systemu plików za pomocą mount -t cifs. To najczęstszy sposób korzystania z udziałów SMB w systemie Linux - zamontowany katalog jest widoczny w systemie plików.

Test 5 sprawdza uprawnienia zapisu. Jeśli udział jest skonfigurowany poprawnie, użytkownik ala może tworzyć pliki w udziale prywatnym.

43 / 50
LAB część 2 -- konfiguracja NFS eksportów

Eksport NFS z opcjami

  • Krok 1: Zainstaluj NFS: apt install nfs-kernel-server -y
  • Krok 2: Utwórz katalogi: mkdir -p /srv/nfs/{public,private,test}
  • Krok 3: Dodaj do /etc/exports: /srv/nfs/public 192.168.56.0/24(ro,sync,no_subtree_check)
  • Krok 4: Dodaj eksport prywatny: /srv/nfs/private 192.168.56.10(rw,sync,no_subtree_check,root_squash)
  • Krok 5: Przeładuj eksporty: exportfs -arv
  • Krok 6: Sprawdź: exportfs -v && showmount -e localhost
ASK_prez09_s43

Po instalacji nfs-kernel-server, demon nfsd uruchamia się automatycznie. Należy sprawdzić, czy rpcbind również działa, ponieważ jest niezbędny do rejestracji usług RPC.

Tworzymy trzy katalogi do celów laboratoryjnych: publiczny (tylko do odczytu), prywatny (z root_squash) i testowy (do sprawdzenia root_squash).

W pliku /etc/exports definiujemy dwa eksporty: publiczny dostępny dla całej podsieci tylko do odczytu, i prywatny dostępny tylko dla klienta 192.168.56.10 z pełnym dostępem.

Po dodaniu wpisów do /etc/exports, wykonujemy exportfs -arv, który odświeża listę eksportów bez restartu usługi. Polecenie exportfs -v powinno pokazać skonfigurowane eksporty.

44 / 50
LAB część 2 -- montowanie NFS i test root_squash

Test root_squash w praktyce

  • Test 1: mount -t nfs4 192.168.56.100:/srv/nfs/public /mnt
  • Test 2: touch /mnt/test.txt (powinien odmówić -- read-only)
  • Test 3: mount -t nfs4 192.168.56.100:/srv/nfs/private /mnt
  • Test 4: touch /mnt/test-root.txt (powinien działać dla roota?)
  • Test 5: Sprawdź właściciela: ls -l /mnt/test-root.txt (powinien być nobody/nogroup gdy root_squash)
  • Test 6: umount /mnt i showmount -a 192.168.56.100
ASK_prez09_s44

Test 1 i 2 weryfikują, czy eksport publiczny działa tylko do odczytu. Próba utworzenia pliku na read-only eksporcie powinna zakończyć się błędem Read-only file system.

Test 3 montuje eksport prywatny, który ma włączony root_squash. Oznacza to, że root na kliencie (UID 0) zostanie zmapowany na anonimowego użytkownika na serwerze.

Test 4 i 5 są kluczowe dla zrozumienia root_squash. Nawet root na kliencie nie może tworzyć plików jako root na serwerze - właścicielem pliku będzie nobody (lub nfsnobody), co demonstruje działanie mechanizmu root_squash.

Test 6 z showmount -a pokazuje aktywne montowania ze strony serwera. To przydatne narzędzie do monitorowania, którzy klienci aktualnie korzystają z zasobów NFS.

45 / 50
Rozwiązywanie problemów -- mapowanie użytkowników

Problemy z mapowaniem użytkowników

  • Problem: użytkownik ala na kliencie ma UID 1001, na serwerze UID 1002 -- pliki widoczne jako nieznany właściciel
  • Rozwiązanie 1: Synchronizacja UID/GID między maszynami (np. przez LDAP lub ręcznie)
  • Rozwiązanie 2: Użycie mapowania w NFSv4 przez idmapd (Domain = wspólna domena)
  • Rozwiązanie 3: Opcje anonuid/anongid w /etc/exports dla NFSv3
  • Rozwiązanie 4: Użycie Samba z winbindd do spójnego mapowania użytkowników
  • Zawsze sprawdzaj UID/GID: id ala po obu stronach
ASK_prez09_s45

Problem różnych UID dla tego samego użytkownika na różnych maszynach jest jednym z najczęstszych źródeł problemów z NFS. Gdy UID się nie zgadzają, użytkownik widzi pliki jako własność nieznanego użytkownika i może nie mieć do nich dostępu.

Najprostszym rozwiązaniem jest ręczna synchronizacja UID między maszynami (useradd -u UID lub usermod -u UID). W większych środowiskach warto użyć centralnego systemu zarządzania tożsamością (LDAP, FreeIPA).

W NFSv4 problem jest łagodzony przez idmapd, który tłumaczy nazwy użytkowników na UID/GID. Wymaga to poprawnej konfiguracji /etc/idmapd.conf z tą samą wartością Domain na wszystkich maszynach.

W NFSv3 można użyć opcji anonuid/anongid w /etc/exports, aby zmapować wszystkich użytkowników (lub tylko anonimowych) na jednego konkretnego użytkownika na serwerze.

46 / 50
Rozwiązywanie problemów -- firewall i blokada portów

Firewall a porty NFS

  • SMB wymaga portów: TCP 445 (SMB direct), TCP 139 (NetBIOS), UDP 137-138 (NetBIOS)
  • NFSv3 wymaga: TCP/UDP 111 (rpcbind), TCP 2049 (nfsd), porty dynamiczne (mountd, nlockmgr)
  • NFSv4 wymaga: TCP/UDP 111 (rpcbind), TCP 2049 (nfsd) -- znacznie prostsza konfiguracja
  • Sprawdzenie otwartych portów na serwerze: ss -tlnp lub netstat -tlnp
  • Sprawdzenie dostępności zdalnego portu: nc -vz 192.168.56.100 445
  • Dla NFSv3 można ustalić stałe porty dla mountd i nlockmgr w /etc/default/nfs-kernel-server
ASK_prez09_s46

Firewall jest częstą przyczyną problemów z dostępem do udziałów SMB i NFS. Dla SMB należy upewnić się, że port TCP 445 jest otwarty na serwerze. Niektóre środowiska blokują ten port na firewallu wewnętrznym.

NFSv3 jest szczególnie problematyczny dla firewalla ze względu na dynamiczne porty usług RPC. mountd i nlockmgr mogą otrzymać dowolny port od rpcbind. Rozwiązaniem jest ustawienie stałych portów w plikach konfiguracyjnych.

NFSv4 znacznie upraszcza konfigurację firewalla, ponieważ wymaga tylko portu TCP 2049 dla nfsd i opcjonalnie 111 dla rpcbind. To jedna z głównych zalet NFSv4 nad NFSv3 w środowiskach z restrykcyjnym firewallem.

Narzędzie nc (netcat) jest niezastąpione przy testowaniu dostępności portów. Opcja -vz (verbose, zero-I/O) sprawdza, czy port jest otwarty bez wysyłania danych. UFW na serwerze można skonfigurować poleceniem ufw allow 445/tcp.

47 / 50
Rozwiązywanie problemów -- najczęstsze problemy SMB

Najczęstsze błędy Samba

  • 1. testparm zwraca błędy -- sprawdź składnię smb.conf, usuń nieznane parametry
  • 2. smbd nie nasłuchuje -- sprawdź systemctl status smbd i journalctl -u smbd
  • 3. NetBIOS nie działa -- sprawdź nmbd, porty UDP 137-138, firewalle
  • 4. Błąd uwierzytelnienia -- sprawdź czy użytkownik istnieje w bazie SMB (pdbedit -L)
  • 5. Wygasłe hasło -- zmień hasło: smbpasswd ala
  • 6. Klient Windows nie widzi serwera -- sprawdź nmbd, przeglądarkę sieci, firewalle
ASK_prez09_s47

Większość problemów z Sambą wynika z błędów w pliku smb.conf. Zawsze uruchamiaj testparm po zmianach. Narzędzie to wyświetli ostrzeżenia o nieprawidłowych parametrach i potencjalnych problemach.

Jeśli smbd nie nasłuchuje na porcie 445, sprawdź czy demon jest uruchomiony (systemctl status smbd) i czy nie ma konfliktu portów z inną usługą. Logi smbd znajdują się w /var/log/samba/log.smbd.

Problemy z NetBIOS są częste w nowoczesnych sieciach, gdzie firewalle blokują UDP 137-138. Rozwiązaniem jest użycie bezpośredniego SMB przez port 445, który nie wymaga NetBIOS.

Klienci Windows mogą nie widzieć serwera Samba w Otoczeniu sieciowym, jeśli nmbd nie działa lub jeśli sieć ma włączoną izolację NetBIOS. W takim przypadku należy połączyć się bezpośrednio przez nazwę serwera lub adres IP.

48 / 50
Rozwiązywanie problemów -- najczęstsze problemy NFS

Najczęstsze błędy NFS

  • 1. rpcbind nie działa -- serwer NFS nie zarejestruje się systemctl status rpcbind
  • 2. exportfs: brak eksportów -- sprawdź /etc/exports i uruchom exportfs -arv
  • 3. Klient nie może zamontować -- sprawdź: rpcinfo, showmount, firewall (port 111, 2049)
  • 4. NFSv3 problem z portami -- ustaw stałe porty dla mountd i nlockmgr
  • 5. root_squash nie działa -- sprawdź czy nie ma no_root_squash w /etc/exports
  • 6. Problem z wersją NFS -- klient próbuje NFSv4, ale serwer obsługuje tylko NFSv3
ASK_prez09_s48

Pierwszym krokiem diagnostyki NFS jest sprawdzenie, czy rpcbind działa. Bez niego żaden serwer NFS nie zarejestruje swoich usług RPC. Polecenie rpcinfo -p localhost powinno pokazać listę zarejestrowanych programów.

Jeśli exportfs -v nie pokazuje żadnych eksportów, sprawdź plik /etc/exports pod kątem błędów składni. Każda linia musi mieć poprawną ścieżkę, listę klientów i opcje w nawiasach.

Problemy z montowaniem NFS ze strony klienta mogą wynikać z blokady portów na firewallu, braku odpowiedzi z rpcbind lub błędnej konfiguracji /etc/exports. Użyj rpcinfo -p adres_serwera do sprawdzenia dostępności RPC.

Konflikt wersji NFS występuje, gdy klient próbuje użyć mount -t nfs4 (NFSv4) do serwera obsługującego tylko NFSv3. Rozwiązaniem jest użycie mount -t nfs z opcją vers=3.

49 / 50
Ściągawka -- najważniejsze polecenia SMB

Polecenia SMB - ściągawka

  • smbclient -L //server -U% -- lista udziałów (anonimowo)
  • smbclient //server/udzial -U user -- połączenie do udziału
  • mount -t cifs //server/udzial /mnt -o username=user -- montowanie SMB
  • testparm -- walidacja smb.conf
  • smbstatus -- aktywne połączenia SMB
  • smbpasswd -a user -- dodanie użytkownika SMB
ASK_prez09_s49

Ściągawka SMB zawiera najważniejsze polecenia używane podczas konfiguracji i diagnostyki serwera Samba. Warto zapamiętać smbclient -L do szybkiego sprawdzenia dostępnych udziałów na zdalnym serwerze.

Montowanie SMB przez mount -t cifs wymaga pakietu cifs-utils na kliencie. Opcja username=user wymaga hasła, które można podać interaktywnie lub w pliku /etc/fstab z opcją credentials=/etc/smb-credentials.

testparm powinien być uruchamiany po każdej zmianie smb.conf. Wyświetla on ostrzeżenia o potencjalnych problemach i różnicach między ustawieniami domyślnymi a skonfigurowanymi.

smbstatus to podstawowe narzędzie monitorujące dla administratora Samba. Pokazuje, którzy klienci są aktualnie połączeni, z jakich udziałów korzystają i jakie pliki mają otwarte.

50 / 50
Ściągawka -- najważniejsze polecenia NFS

Polecenia NFS - ściągawka

  • exportfs -arv -- przeładowanie eksportów z /etc/exports
  • exportfs -v -- wyświetlenie aktualnych eksportów
  • showmount -e server -- lista dostępnych eksportów NFS
  • mount -t nfs4 server:/eksport /mnt -- montowanie NFSv4
  • rpcinfo -p server -- sprawdzenie usług RPC
  • nfsidmap -c -- czyszczenie cache mapowania idmapd
ASK_prez09_s50

Ściągawka NFS zawiera kluczowe polecenia do administracji i diagnostyki. exportfs -arv to najważniejsze polecenie, które odświeża listę eksportów po zmianie /etc/exports bez restartu usługi.

showmount -e to szybki sposób na sprawdzenie, jakie eksporty są dostępne na zdalnym serwerze. W NFSv4 może nie działać poprawnie - wtedy użyj exportfs -v na samym serwerze.

rpcinfo -p to niezbędne narzędzie diagnostyczne do sprawdzenia, które usługi RPC są zarejestrowane i na jakich portach działają. Przydatne szczególnie przy konfiguracji firewalla dla NFSv3.

Podsumowując: Samba i NFS to dwa najważniejsze protokoły współdzielenia plików w sieci. Znajomość obu jest niezbędna dla administratora w środowiskach heterogenicznych. Pamiętaj o bezpieczeństwie: wyłącz SMBv1, używaj root_squash w NFS, zawsze testuj konfigurację przed wdrożeniem produkcyjnym.