Bociek PLD - Pisarz
I. Informacje podstawowe
II. Instalacja
III. Podręcznik użytkownika
IV. Podręcznik administratora
Usługi dostępne w PLD
NFS - Network File System
V. Tworzenie PLD - Praktyczny poradnik
VI. O podręczniku
O tej książce
Spis treści
Inne wersje tego dokumentu
HTML (jeden plik)
Odnośniki
Tworzymy dokumentację PLD
Strona PLD
Listy dyskusyjne PLD

NFS - Network File System

<- ->
 

NFS jest to usługa pozwalająca udostępniać zasoby dyskowe komputerom w sieci. Serwer udostępnia katalog(i) klientom, którzy mogą je podmontować i działać jak na lokalnym systemie plików. Ponadto można z niego uruchamiać stacje bezdyskowe lub tworzyć rozproszone systemy plików.

Serwer

Najpierw instalujemy demona portmap (o ile nie jest już zainstalowany) oraz demona NFS poleceniem:

# poldek -i portmap nfs-utils

Serwer NFS jest gotowy do pracy od razu po zainstalowaniu, wystarczy jedynie uruchomić usługę portmap, a następnie nfs (dokładnie w tej kolejności). Teraz możemy przejść do konfiguracji udziałów sieciowych. Do podstawowej pracy serwera nie ma potrzeby konfigurowania czegokolwiek, w pozostałych wypadkach należy przyjrzeć się plikowi /etc/sysconfig/nfsd, który może wyglądać następująco:

SERVICE_RUN_NICE_LEVEL="+0"

#RPCMOUNTOPTIONS="--no-nfs-version 3"

RPCNFSDCOUNT=8

NFSDTYPE=K

  • SERVICE_RUN_NICE_LEVEL - ustala priorytet serwera

  • #RPCMOUNTOPTIONS="--no-nfs-version 3" - opcja dla jąder z serii 2.2, dla współczesnych kerneli powinna być zakomentowana

  • RPCNFSDCOUNT - podaje liczbę instancji serwera, czyli ilu klientów może obsłużyć jednocześnie

  • NFSDTYPE - podaje czy serwer ma pracować jako oddzielny demon (U), czy w trybie jądra (K). Zalecane jest to drugie z rozwiązań, gdyż zapewnia większą wydajność.

Modyfikacja pliku konfiguracji wymaga restartu uslugi.

Udostępnianie

Uruchomiliśmy serwer, teraz przyszedł czas na udostępnienie zasobów. W pliku /etc/exports definiuje się udostępniane katalogi, ich listę podajemy w postaci wierszy, które mają następującą składnię:

$katalog  $klient1($opcja1,$opcja2,...)  $klient2($opcja1,$opcja2,...)

  • $katalog - udostępniony katalog. Warto tutaj wspomnieć, że jeżeli udostępniamy dany katalog to nie możemy udostępnić w nowej regułce katalogu będącego jego ojcem jak i synem, jeżeli leżą na tym samym systemie plików. Udostępnianie partycji FAT, itp. też nie jest dobrym rozwiązaniem.

  • $klient - IP lub nazwa komputera, któremu udostępniamy katalog. Można podać także całą sieć, wtedy zezwolimy wszystkim komputerom w sieci na przeglądanie i/lub zapisywanie do katalogu.

  • $opcje - tutaj możemy ustalić m.in. czy zasób ma być udostępniony tylko do odczytu, czy także do zapisu, oraz nałożyć inne ograniczenia. Wszystkie opcje opisane są w manualu (man exports).

Oto przykładowe wpisy do /etc/exports:

/srv/pub   192.168.0.1(ro) 192.168.0.2(rw)
/home        192.168.0.0/255.255.255.0(rw)

Pomijając sensowność wpisów, pierwszy wiersz daje prawo odczytu katalogu /srv/pub komputerowi 192.168.0.1 i prawo odczytu i zapisu komputerowi 192.168.0.2. Drugi z kolei daje prawo zapisu do katalogu /home komputerom z podsieci 192.168.0.0/24. Jeżeli modyfikujemy /etc/exports w trakcie pracy serwera to musimy poinformować demona, żeby ponownie odczytał plik konfiguracji. Przed tym możemy sprawdzić czy nasze wpisy są poprawne:

# exportfs -v

Polecenie to wyświetli listę katalogów gotowych do wyeksportowania, jeśli któryś z udziałów nie jest wyświetlony, to prawdopodobnie popełniliśmy jakiś błąd w składni. Gdy jesteśmy pewni, że chcemy udostępnić udziały NFS, to wydajemy polecenie:

# exportfs -rv

W PLD stworzono grupę systemową fileshare, która ma prawo do modyfikowania konfiguracji udziałów sieciowych (NFS i SMB), bez konieczności posiadania praw root-a. Aby nadać użytkownikowi takie prawo wystarczy zapisać go do tej grupy, opis zarządzania grupami użytkowników opisano w tym dokumencie.

Klient

Konfigurację klienta rozpoczynamy od zainstalowania i uruchomienia usługi portmap. Jeśli chcemy, aby zasoby NFS były montowane w trakcie startu systemu, instalujemy pakiet nfs-utils-clients, dostarczający wymagany rc-skrypt: /etc/rc.d/init.d/nfsfs.

Teraz przyszedł czas na połączenie się z zasobem NFS, w tym celu musimy go zamontować np.:

# mount serwer.net:/srv/pub /mnt/net -t nfs

serwer.net to IP bądź nazwa naszego serwera, /srv/pub jest przykładowym udostępnionym katalogiem na serwerze (wpisaliśmy go wcześniej do /etc/exports). Katalog /mnt/net to przykładowe miejsce podmontowania zasobu. Można użyć dodatkowo flagi -o a po niej podać potrzebne nam opcje montowania. Pełną listę opcji znajdziemy w podręczniku systemowym: man 5 nfs.

Jeśli nic nie stoi na przeszkodzie abyśmy podłączali zasób przy starcie systemu, to dodajemy wpis do /etc/fstab:

192.168.0.1:/srv/pub  /mnt/net   nfs      rw,hard,intr  0     0

Wpis wygląda znajomo, ale uwagę zwracają opcje hard i intr. Otóż hard oznacza, że programy korzystające z zasobów NFS w momencie awarii serwera zostaną zawieszone w oczekiwaniu na dostęp do danych i nie będzie możliwości ich odwieszenia w postaci polecenia kill, chyba, że dodamy opcję intr dzięki czemu będziemy mogli zabić dany proces. Zamiast hard możemy użyć opcji soft, jednak w przypadku awarii serwera NFS sygnalizuje błąd programom korzystającym z zasobów. Wadą tego rozwiązania jest to, że nie wszystkie programy potrafią poradzić sobie z takim komunikatem i może dojść do utraty danych.

Bezpieczeństwo serwera

Musimy zadbać o bezpieczeństwo naszego serwera, podstawowym sposobem zabezpieczania zasobu jest ograniczenie dostępu. Możemy go ograniczać za pomocą ustawień w pliku /etc/exports, za pomocą filtra pakietów lub plików /etc/tcpd/hosts.allow i /etc/tcpd/hosts.deny, co zostało przedstawione poniżej.

Najpierw blokujemy wszystkim dostęp do naszych usług wpisując do pliku pliku /etc/tcpd/hosts.deny:

portmap:ALL                                                                     
lockd:ALL                                                                       
mountd:ALL                                                                      
rquotad:ALL                                                                     
statd:ALL

Następnie w /etc/tcpd/hosts.allow wpisujemy komputery, którym zezwalamy na korzystanie z wymienionych usług. Możemy zarówno wpisać adresy IP komputerów jak i całą podsieć.

portmap: 192.168.0.0/255.255.255.0                                              
lockd: 192.168.0.0/255.255.255.0                                                
rquotad: 192.168.0.0/255.255.255.0                                              
mountd: 192.168.0.0/255.255.255.0                                               
statd: 192.168.0.0/255.255.255.0

NFS nie obsługuje autoryzacji na poziomie użytkownika, a jedynie na poziomie hosta. Z tego względu nie bardzo nadaje się do udostępniania w Internecie, jeśli to tylko możliwe lepiej użyć protokołu FTP lub WebDAV.

Dostrajanie wydajności

Wolne działanie protokołu NFS wskazuje przeważnie na brak odpowiedniego dostrojenia połączenia, wystarczy ustawić kilka opcji by uzyskać zaskakująco duży wzrost wydajności. Podane poniżej zalecenia dotyczą konfiguracji klienta.

Na początek zajmiemy się opcjami rsize i wsize. Dzięki nim możemy zwiększyć szybkość odczytu i zapisu plików na serwer. Manual systemowy radzi by ustawić im na wartości: rsize=8192 i wsize=8192. Linijka w pliku /etc/fstab będzie wyglądać teraz następująco:

192.168.0.1:/usr/local  /usr/local   nfs      rw,hard,intr,rsize=8192,wsize=8192  0     0

Domyślnie NFS działa w oparciu o protokół UDP, doświadczenie pokazuje jednak, że przełączenie w tryb TCP może w niektórych wypadkach zwiększyć szybkość przesyłu danych. Niestety nie każdy serwer NFS obsługuje połączenia TCP, więc nie wszędzie możemy użyć tej opcji. Na szczęście PLD zawiera demona pozwalającego na używanie TCP. Aby włączyć tą opcję do linijki w pliku /etc/fstab dodajemy wpis tcp np.:

192.168.0.1:/usr/local  /usr/local   nfs      rw,hard,intr,tcp  0     0

W przypadku protokołu NFS należy trochę eksperymentować z ustawieniami, na początek dobrym pomysłem może być użycie obu powyższych wskazówek. Więcej o dostrajaniu NFS-a można odnaleźć w podręczniku systemowym.

 
<- ->