Network File System – NFS Produkt SUN służący do rozproszenia

Transkrypt

Network File System – NFS Produkt SUN służący do rozproszenia
Network File System – NFS
Produkt SUN służący do rozproszenia systemu plików. Jak każdy rozproszony system NFS jest
przeźroczysty dla użytkownika. Oznacza to, że korzystnie z dzielonych zasobów odbywa się tak
samo jak z lokalnych.
Załóżmy, że mamy w naszej sieci serwer NFS udostępniający katalog /home. Oraz klienta który
podłącza ten udział pod swój katalog /home2. W tym momencie widać, że podłączony zasób stał się
częścią lokalnego drzewa katalogowego na kliencie. Oraz jeżeli na serwerze w katalogu /home
istniał plik test.txt to na kliencie jest widoczny w lokalizacji /home2/test.txt. Plik ten można
wykorzystywać jakby był na lokalnym katalogu.
Taka dogodność jest nieoceniona. Jednak NFS ma także wadę. Wróćmy do naszego przykładu z
serwerem NFS udostępniającym katalog /home. Niech w tym katalogu dwoje użytkowników
trzyma swoje dane. Pierwszy użytkownik alice z UID=1000 oraz drugi bob z UID=1001. Teraz ten
zasób jest podłączony do klienta a na nim użytkownik bob ma taki sam UID ale alice ma
UID=1002. Ponieważ UID=1000 należy do użytkownika charlie. Dzięki takiej sytuacji charlie
może przeglądać dane z katalogu /home2/alice. A także je usuwać! Ponieważ uprawnienia są nadal
sprawdzanie po numerach identyfikacyjnych użytkownika (UID).
Należy tę możliwość mieć na uwadze gdy planujemy rozproszenie naszego systemu plików.
Instalacja serwera NFS
W debianie można znaleźć dwa serwery NFS. Pierwszy działający w przestrzeni użytkownika (nfsuserspace-server) oraz drugi działający w przestrzeni jądra (nfs-kernel-server). Serwery te z
naszego punktu widzenia są bardzo podobne. Zajmiemy się serwerem w przestrzeni jądra ponieważ
konfiguracja zasobów jest taka sama na serwerze w przestrzeni użytkownika.
# aptitude install nfs-kernel-server
Paczka ta zainstaluje kilka bibliotek oraz paczkę nfs-common. Sieciowy system plików działa na
zdalnych wywołaniach procedur (RPC – Remote Procedure Call). W źródłach jądra Linuksa
zawarte są sekcje wspierające zarówno serwer jak i klienta NFS. Zawarte są w menu File
Systems>Network File Systems. Należy miec to na uwadze w przypadku własnoręcznej kompilacji
jądra. Bez tych opcji serwer nie będzie mógł pełnić roli serwera i/lub klienta NFS.
Jeżeli chcemy aby dany komputer był klientem NFS wystarczy zainstalować paczkę nfs-common.
# aptitude install nfs-common
Konfiguracja zasobów udostępnianych.
Serwer NFS gromadzi informacje o zasobach do udostępnienia w pliku /etc/exports. Oto
przykładowy wpis do tego pliku:
/home 192.168.0.1(rw,sync,no_subtree_check) 10.0.0.0/8(ro,secure,root_squash)
klient.nfs.example.com(rw,fsid=0)
Jak widać na przykładzie powyżej najpierw podajemy katalog lokalny do udostępnienia. Nie można
w ten sposób udostępnić pseudosystemów plików np. proc albo sysfs. Następnie wpisujemy kto
może zamontować ten zasób. Możemy podać adres hosta (opcja pierwsza), sieć hostów (opcje
druga), oraz nazwę domenową hosta (opcja 3) przy czym ta nazwa musi być rozwiązywalna!. Po
każdej z tych 3 notacji w nawiasach podajemy opcje dla tego zasobu. Jeżeli chcemy udostępnić
zasób np. do 5 różnych podsieci stosujemy taką samą notacją jak podano w przykładzie:
/zasob/ktory/usodtepniamy adres_sieci_1/maska_sieci_1(opcje_dla_sieci1)
adres_sieci_2/maska_sieci_2(opcje_dla_sieci2) #i tak dla 5 różnych sieci
Podobnie można zrobić dla 5 różnych hostów. Można także mieszać te notacje co zrobiono w
pierwszym przykładzie. Taka notacja pozwala na dużą swobodę w ustawieniach dostępu do zasobu.
Warto zwrócić uwagę, że maskę sieciową można podać zarówno w notacji CIDR jak i notacji
adresowej (np. 255.255.0.0).
Komentarz podajemy po znaku „#”. Znak ten powoduje ignorowanie całej linijki.
Opcje dla zasobów NFS
Oto krótki spis najważniejszych opcji wraz z krótkim opisem. Nie podano tutaj ustawień buforów
zapisu/odczytu oraz kilka innych opcji ponieważ domyślne wartości powinny wystarczy. Wszystkie
opcje można znaleźć w podręczniku man exports:
rw/ro – read-write/read-only.
sync/async – synchroniczna/asynchroniczna praca serwera. Jest to związane z trybem
synchronicznym i asynchronicznym wywołań RPC. Zasób w trybie synchroniczny jest zapisywany
i odpowiedź serwera otrzymamy dopiero po zapisaniu tego zasobu (wtedy jest on dostępny). W
trybie asynchronicznym zasób jest zapisywany w tle.
secure/insecure – nie zezwalaj/zezwalaj dostęp do zasobu połączeniom z wyższych portów
(powyzej 1023) np. Klienci za NAT używają portów wyższych.
fsid – parametr identyfikujący urządzenie. Można podać tutaj UUID partycji dzięki czemu w
przypadku zmian kolejności wykrywania dysków NFS pod montuje ten sam system plików. Inne
możliwe parametry to root (oznaczający liczbę 0) oraz liczba całkowita nie ujemna.
root_squash/no_root_squash/all_squash – pierwszy parametr nakazuje NFS traktować zapytania
użytkownika root jako jego zapytania. Druga opcja zmienia to zachowanie w ten sposób, że
działania użytkownika root traktujemy jak zapytania anonimowego użytkownika (ze względów
bezpieczeństwa należy stosować tę opcję). Ostatni parametr zamienia wszystkie zapytania na
zapytania anonimowego użytkownika.
squash_uid/squash_gid – określają UID/GID użytkowników których zapytania mają być
zamieniane na zapytania anonimowego użytkownika. Oto przykłady użycia:
squash_uid=5-50,70,99,202-444
squash_uid=5-444
Pierwsza opcja zawiera oczywiście mniej numerów UID. Opcja squash_gid konfigurujemy
analogicznie.
anonuid/anongid – określanie jawne UID i GID anonimowego użytkownika
subtree_check/no_subtree_check. Opcje te odpowiednio włączają lub wyłączają sprawdzanie
względnych ścieżek przy próbie dostępu do plików. Przydatne gdy udostępniamy nie cały system
plików ale jego podkatalog. Jeżeli nie podamy żadnej z tych 2 opcji serwer wyświetli stosowną
informacje i przyjmie domyślnie opcję no_subtree_check.
crossmnt/nocrossmnt – zezwalaj/nie zezwalaj na montowanie krzyżowe. Aby zobrazować jak działa
montowanie krzyżowe posłużę się przykładem. Niech zasób /mnt/katalog serwera A montuje serwer
B w katalogu /mnt/serwera. Teraz niech serwer C zamontuje zasób /mnt serwera B w swoim
katalogu /mnt/serwerb. Jeżeli opcja montowania krzyżowego jest włączona na serwerze C
zobaczymy zawartość zasobu /mnt/serwerb/serwera który jest w rzeczywistości zasobem
/mnt/katalog na serwerze A. Domyślny parametr to nocrossmnt.
Po ustawieniu zasobu i jego opcji należy eksportować ustawione zasoby. Można to zrobić na 2
sposoby:
# /etc/init.d/nfs-kernel-server restart
albo w przypadku nfs-kernel-server
# exportfs -a
Montowanie zasobu.
Zasoby NFS montujemy podobnie do urządzeń:
# mount -t nfs -o rw 192.168.0.1:/home /home2
adres IP należy ustawić na swój. Po nim wpisujemy dwukropek po którym podajemy katalog na
serwerze NFS (zasób) który montujemy. Ostatni parametr to katalog lokalny na którym zasób jest
montowany. Polecenie mount udostępnia szereg opcji które można podać w parametrze -o.
Dokładny ich opis można znaleźć w podręczniku man mount.

Podobne dokumenty