Administracja Sieciowymi systemami operacyjnymi.
Wykład 7
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
1
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.
2
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
3
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.
4