NFS i NIS
Rozdział 12. NFS i NIS
301
W tym rozdziale zajmiemy się sieciowym systemem plików (ang. Network File System - NFS). Stanowi on zbiór protokołów i produktów im towarzyszących, rozpowszechnionych w sieciach opartych na TCP/IP, głównie w różnych odmianach LINIXa, choć nie tylko. Nierozerwalnie związane są z nim dwa inne protokoły - informacja sieciowa NIS (ang. Network Information Service) i zdalne wykonywanie REX (ang. Remote Execution Service) - im również poświęcimy nieco uwagi.
Treść niniejszego rozdziału koncentruje się - z pewnymi wyjątkami - na systemie UNIX, chociaż wymienione protokoły są również dostępne na innych platformach systemowych; jakkolwiek koncepcje i zasady działania pozostają te same, to mogą wystąpić różnice w szczegółach, głównie w nazwach plików.
m plików sieciowych
Pojawienie się systemów klient /serwer oraz przetwarzania rozproszonego stworzyło sytuację, gdzie niewielka, acz poręczna stacja robocza ~w rodzaju komputera PCK, korzysta z usług znacznie potężniejszego serwera. Zawiera on wi~kszość aplikacji i danych, konieczne jest więc opracowanie pewnych reguł ich wykorzystania. Co prawda programy telnet oraz rlogin umożliwiają dostęp do serwera i wielodostępną pracę na nim, lecz użytkownikom wcale nie o to chodzi - nie chcą oni rezygnować z funkcjonalności swoich pecetów (przez zredukowanie ich do roli terminali), oczekując raczej uczynienia plików serwera częścią dziedziny przetwarzania, w którym uczestniczą ich komputery lokalne. Temu zapotrzebowaniu wychodzi naprzeciw system plików sieciowych NFS, opracowany pierwotnie przez Sun Microsystems.
Firma Sun zaprojektowała swój system z myślą o umożliwieniu współpracy w ramach jednej sieci maszyn pochodzących od różnych producentów, różniących się platformą sprzętową i pracujących pod kontrolą różnych systemów operacyjnych. W tym celu do
_.
302
TCP/IP
konała ona publikacji specyfikacji NFS, aby umożliwić producentom sprzętu i oprogramowania przystosowanie ich produktów do wymagań systemu. 1'o spowodowało, że NFS stał się standardem de facto - w całej pełni w systemie UNIX, w dużym stopniu w wielu innych systemach.
Nazwa NFS odnosi się zarówno do protokołu, jak i całej gamy produktów; owe produkty to nic innego, jak implementacja wielu protokołów związanych z NFS (szerzej na ten temat w sekcji Protokoly NFS~. Aby uniknąć nieporozumień, pod skrótem NFS będzie
- my rozumieć konkretny protokół; jest to jedyny protokół całej rodziny NFS, który ma związek z dostępem do plików.z3
Historia NFS jest nierozerwalnie związana z systemem UNIX, gdyż stanowi on część Systemu V Release 4, co natychmiast implikuje jego ścisły związek z protokołem TCPI IP, stanowiącym podstawowy protokół komunikacyjny w sieciach UNIX. Jak można się spodziewać, za chwilę padnie nazwa programu-demona, który realizuje usługi NFSistotnie, programem tym jest nf sd, uruchamiany podczas startu systemu. Dostęp do plików za pośrednictwem NFS nie różni się od dostępu do plików lokalnych (oczywiście z wyjątkiem reguł wielodostępu), co czyni go (tj. protokół) bardzo atrakcyjnym.
Udostępnienie aplikacji mechanizmów NFS następuje w wyniku czynności zwanej montowaniem24 (ang. mounting); może zostać udostępniony cały system plików serwera lub jego wybrane katalogi; katalog maszyny-klienta, odzwierciedlający montowany katalog r.
secwera, nosi nazwępunktu montowania (ang. mountpoint).
Terminologia protokołu NFS określa mianem klienta maszynę, żądającą dostępu do sys'' temu plików innej maszyny, zwanej serwerem. W systemie wielozadaniowym, maszyna I
może spełniać rolę zarówno serwera, jak i klienta, często nawet równocześnie. Oczywiście, wielodostęp wymaga istnienia pewnych reguł, ograniczających dostęp do plików, głównie ze względów bezpieczeństwa, jak równieź ze względu na szybkość pracy. Ty
owa instalac a NFS składa si z wielu bezd sko ch stac i robocz ch, korz sta c ch p j ę Y wY J Y Y Ją Y z usług jednego lub kilku serwerów. Ponieważ typowym systemem operacyjnym stacji roboczych jest jednozadaniowy MS-DOS, mogą one występować jedynie w roli klientów. Nieco inna sytuacja zachodzi, gdy stacje robocze pracują pod kontrolą systemów wielozadaniowych, jak Windows NT czy OS/2: mogą one wtedy występować również
f; w roli serwerów, co nadaje całej sieci nieco inny charakter - jej maszyny potrafiąna- :' '..` wzajem udostępniać sobie swoje pliki. Rozwiązanie takie jest jednak do przyjęcia jedynie w niewielkich sieciach, gdyż jednoczesna obsługa wielu systemów plików znacząco wpływa na zwiększenie ruchu w sieci.
E~ z3 W dziedzinie systemów komputerowych od zarania ich historii często tak się zdarza, że wielo
~i~ '~, składnikowy produkt otrzymuje nazwę (najpierw żargonową, następnie usankcjonowani ~i swego najważniejszego składnika: tak jest przecież z rodziną protokołów TCP/IP, tak jest też z j mechanizmem NFS - jak w starym dowcipie, zgodnie z którym pies policyjny składa się z
obroży, kagańca i psa wlaśc~we~o. ~waioy Ciy~e`W k ~powiW en panivę~ać o tym przy aalszel lekturze książki (przyp. tłum.)
I z4 Termin ten może wydawać się nieco dziwny - ma on genezę historyczną: w systemach komi'- puterowych typu mainframe, udostępnienie plików zawartych na zewnętrznym nośniku - najczęściej taśmie magnetycznej lub dysku - wymagało jego fizycznego zamontowania na urządzeniu. Zmieniły się realia, termin pozostał (przyp. tłum.)
1 l;
,' r`'
NFS i NIS
sny
Szybkość przesyłania informacji odgrywa tutaj rolę pierwszorzędną, o czym oczywiście projektanci NFS nie mogli zapomnieć: założenia projektowe ustalają jego sprawność na 80 procent sprawności dostępu do lokalnego dysku twardego. Stawia to szczególnie wysokie wymagania architekturze sprzętowej serwerów i ich systemom operacyjnym.
Ponieważ NFS oparty jest na filozofii UNIXa, więc brak jest w nim wyszukanych metod ochrony danych. W związku z tym firma Sun opracowała wersję Secure NFS, oferującą szyfrowanie danych oraz autoryzację dostępu do plików.
j
Protoko~y NFS
Rodzina NFS składa się kilka protokołów, z których każdy nosi tą samą nazwę - NFS. Protokoły tej rodziny mają architekturę warstwową, podobnie do modelu OSI-RM. Dokładnemu opisowi warstw poszczególnych protokołów rodziny NFS zostały poświęcone odrębne dokumenty RFC. Rysunek 12.1 przestawia warstwy protokołu NFS w kontekście warstw modelu OSI-RM.
Rysunek 12.1.
NF&, MOUNT, YP Wpl'SIW,y~7Y0i!~:JIL! YPBIND, NLM, REX NFS NFS XDR
RPC TCP lub UDP IP
Ethemet
WHRSTWY: Aplikacji
Prozontacji Sesji Transportowa Ł.~cza danych
Firyczna
Podobnie jak w modelu ISO, poszczególne warstwy są od siebie niezależne (przynajmniej w teorii), co oznacza, że wymiana danej warstw w~~.a~a ;~ayr;~ ~~~o
bez zni~any jej cech funkcjonalnych, istotnych dla warstw sąsiednich. W chwili obecnej nie istnieje żadna szerzej rozpowszechniona alternatywa dla warstw RPC i XDR, lecz istniejątakowe dla protokołów najwyższej warstwy.
Kod źródłowy protokołów RPC oraz XDR dostępny jest bezpłatnie w firmie Sun Microsystem.
tdafne wywo~anie procedury (RPC)
Protokół zdalnego wywołania procedury (ang. Remote Procedure Call - RPC) umiejscowiony jest w warstwie sesji i spełnia rolę mechanizmu wymiany komunikatów dla wszystkich aplikacji korzystających z NFS. Na jego oprogramowanie składa się zbiór procedur, zapewniających dostęp aplikacji wysokiego poziomu do zasobów sieci; wywoływanie tych procedur nie jest wcale bardziej skomplikowane niż wywoływanie procedur lokalnych.
304 TCPIIP
P~otokó~ RPC zostal stworzony specjalnie na potrzeby NFS, lecz obecnie spoty~ kany jest jako członek innych rodzin protokołów. Jego zasady pozostaje jednak niezmienione.
"twórcy aplikacji mogątworzyć swe własne procedury RPC. Grupaprocedur nosi n. usługi (ang. service); każda usługa ma przyporządkowany unikalny numer i jest rea wena przez program-demon, noszący popularną nazwę serwera RPC (nie mylić z se rem jako konkretnym komputerem); w danej maszynie może działać równocześnie le serwerów RPC, z których każdy identyfikowany jest unikalnym numerem.
Proces zdalnego ~rty~tołansa procedury pokazano na rysunku 12.2. Oawolanie się pi klienta do zdalnej procedury spowoduje wygenerowanie żądania RPC pod adresem esera. Serwer, otrzymawszy żądanie, analizuje jego parametry, wykonuje żądanąpri durę i wysyła odpowiedź zwrotną odnośnie rezultatów tego wykonania. Przez cały czas proces klienta pozostaje bezczynny. Otrzymawszy odpowiedź, dokonuje on jej a lizy, by następnie kontynuować pracę. Cała opisana akcja odbywa się pod kontrolą cedur sterujących protokołu RPC, automatycznie dołączonych do aplikacji.
Rysunek 12.2. IaIENT SERWER
Zdalne wywolanie PmcBS "', pYOCedLIYy Nykonuje sio
2gdanie RPC Start RPC II
Proces Wykonanie zawieszony Procedury ,c.
~ .r
' Odpowisdf procesu Odpawiedt RPC ł
Kontynuacja i procesu h-.
~lt ' Komunikaty RPC przesyłane są przy użyciu zarówno UDP, jak i TCP (lub równowai~ I ~:
!,,,; nych protokołów o tej samej funkcjonalności). Zazwyczaj używany jest UDP, gdyż nie ' jest wymagane nawiązywanie połączenia, a samo przesłanie odbywa się szybciej. Jed~ nak użycie UDP wiąże się z tendencją do formowania dużych pakietów, co może stano wić problem dla niektórych procedur. Poza tym, jak dobrze wiesz, UDP nie gwarantuje
I ' dostarczenia komunikatu, co wymusza dodatkową kontrolę ze strony aplikacji końco~ '' esej, najczęściej za pomocąstopera retransmisji.
Zalety wykorzystania TCP zamiast UDP dotyczą nie tylko samej niezawodności, leci również możliwości tzw. żądań wsadowych (ang. balch requests). Podczas nawiązani go połączenia użytkownik może mianowicie przesłać całą serię żądań, bez oczekiwania na kolejne potwierdzenia. Może to czasem znacznie przyspieszyć pracę aplikacji.
~C~l, .
NFS i NIS
305
Nagłówek komunikatu protokołu RPC przedstawia rysunek 12.3. Komunikat ten może być żądaniem klienta lub stanowić odpowiedź z serwera. Wszystkie jego pola zakodowane są zgodnie z konwencją XDR (patrz jedna z kolejnych sekcji). Pole identyfikacji transakcji służy do wzajemnego przyporządkowania żądań i odpowiedzi. Pole Kierunek przesyłania, stanowi rozróżnienie pomiędzy żądaniem (=0) oraz odpowiedzią (=1). Kolejne cztery pola oznaczają odpowiednio wersję protokołu RPC, numer programu (usługi), wersję programu oraz numer procedury.
Rysunek 12.3. Naglówek
i komunikatzr RPC
Nr identyfikacyjny traneakeji Wakafnik kierunku prualania
Numer wersji Numer programu Numer wersji
Numer procedury Intormac~a dla celów weryfikacp toisamości (maksimum 400 bajtów)
Autoryzacja (maksimum 400 bajtów)
Parametry wywołania procedury
Niektóre procedury mogą wymagać, na przykład ze względów bezpieczeństwa, weryfikacji klienta, czemu poświęcone są dwa kolejne pola. Dokumenty RFC nie określają sposobu przeprowadzenia weryfikacji, pozostawiając ją w gestii wywoływanej procedury, określają jedynie maksymalną wielkość każdego z tych pól na 400 bajtów. Istnieją obecnie cztery predefiniowane typy weryfikacji (podano zawartość drugiego pola):
• puste - brak weryfikacji, obydwa pola są puste;
• UNIX - weryfikacja w stylu UNIXa (identyfikator grupy i użytkownika); weryfikacja przeprowadzana jest przez NFS, pierwsze pole jest puste;
• Short - klient generuje sekwencję weryfikującą, która zwracana jest przez serwer (zazwyczaj jako odwołanie do poprzednich żądań RPC);
• DES -- informację weryfikującą stanowi zaszyfrowany zgodnie ze standardem DES (ang. Data Encryption Standard) znacznik czasu (ang. timestamp). Ten rodzaj weryfikacji jest wykorzystywany przez Secure NFS.
Jedynym wiarygodnym zabezpieczeniem jest ostatnie z wymienionych, pozostałe mogą zostać złamane przez średnio zdolnego hackera.
Każda usługa w ramach RPC posiada unikalny numer, jednoznacznie identyfikujący ją względem protokołu. Listę usług wraz z ich numerami oraz przyporządkowaniem im poszczególnych programów zawiera plik /etc/rpc. Oto przykład jego zawartości:
portmapper 100000 portmap sunrpc
rstat_svc 100001 rstatd rstat rup perfmeter rusersd 100002 rusers
nfs 100003 nfsprog
306 TCP/IP i
ypserv 100004 yprog
mountd 100005 mount showmount
ypbind 100007
walid 100008 rwali shutdown
yppasswdd 100009 yppasswd
etherstatd 100010 etherstat
rquotad 100011 rquotaprog quota rquota
sprayd 100012 spray
3270_mapper 100013
rje_mapper 100019
selection_svc 100015 selnsvc
database_svc 100016
rexd 100017 rex
alis 100018
sched 100019
llockmgr 100020
nlockmgr 100021
x25.inr 100022
statmon 100023
status 100029
bootparam 100026
ypupdated 100028 ypupdate
keyserv 100029 keyserver
ypxfrd 100069 ypxfr
pcnfsd 150001 pcnsfd
Numery przyporządkowane poszczególnym procesom-usługom zdefiniowane są w do- r kumencie RFC i powinny być identyczne we wszystkich impłementacjach RPC.
i Maper portów
POIIąCZC111C między idientem a serwerem przebiega w oparciu o numer portu TCP/IP. Aby uniknąć problemów z przydziałem portów opracowano maper portów (ang. port mapper) - bez niego zasób dostępnych portów wyczerpałby się już przy kilku aktywnych po%ezeW ac1~ RAC. Maper pocfów ~~esf cenha~nym procesem szeregU~ącym, kontrolującym listę portów i ich wykorzystanie przez poszczególne programy. Sam maper używa portu o numerze 1 11.
Kiedy klient zamierza dokonać zdalnego wywołania pcocedwry, wysyka odpowiednie żądanie do serwem. Żądanie to, mające postać komunikatu rozpoczynającego się od nagłówka pokazanego na rys. 12.3, zawiera numer wersji RPC, numer usługi oraz używany protokół. Na jego podstawie maper przyporządkowuje mu właściwy port, który pozostaje przydzielony aż do zakończenia pracy aplikacji.
Opisana procedura posiada dość poważną uciążliwość: klient musi znać adres serweta udostępniającego konkretną usługę - nie istnieje mechanizm poszukiwania określonej usługi wśród serwerów sieci. Jako że natura nie znosi próżni, nowo opracowywane sys~ temy plików nie posiadają już tej wady, nie dotyczy to jednak jeszcze NFS.
NFS i NIS 307
Zewnętrzna reprezentacja danych (XDR)
W rozdziale Telnet i FTP, przy opisywaniu telnetu, przedstawiłem aplikację TN3270, której zadaniem było pogodzenie dwóch komputerów używających niezgodnych kodów - ASCII i EBCDIC. To tylko jeden z przykładów niezgodności, wcale nie najistotniejszy. Innym problemem jest hierarchia poszczególnych bajtów w słowie wielobajtowym: procesory Intela stosują konwencję, zgodnie z którą bajt o najniższym adresie jest najmniej znaczący w słowie (konwencja little endian), podczas gdy np. procesory Motorołi czy mainframe IBM, uważają bajt o nąjniższym adresie za najbardziej znaczący (konwencja big endian). Jeszcze inne różnice biorą się z różnicy w formacie poszczególnych typów danych - większość maszyn używa kodu uzupełnień do dwóch (U2), ale istnieją architektury (na przykład wszystkie wersje CRAYów), wykorzystujące kod uzupełnieniowy do 1.
Aby ujednolicić format danych przesyłanych pomiędzy różnymi maszynami, opracowano konwencję XDR (ang. Exter~ral Data Representation). Polega ona na tym, że dane, przed opuszczeniem komputera, zostają przekształcone do postaci zgodnej ze standardem XDR (o nim za chwilę); algorytm takiego przekształcenia jest oczywiście różny dla różnych architektur sprzętowych. Po dotarciu do komputera docelowego, są następnie przekształcane na format właściwy jego architekturze.
Tak więc standard XDR, stanowiący coś w rodzaju hipotetycznej, uniwersalnej architektury, posiada następujące cechy:
• obowiązuje konwencja big endian, co oznacza, że bajt o najmniejszym adresie jest najbardziej znaczący;
• dane całkowite zapisywane sąw kodzie uzupełnień do dwóch (U2);
• istnieją dwa typy danych całkowitych: 4-bajtowry (long integer~) i 8-bajtowy (hyperinteger~);
• liczby zmiennoprzecinkowe zapisywane są w 32-bitowym formacie IEEE:zS I-bitowy znak, 8-bitowy wykładnik i 23-bitowa mantysa.
Istnieje specjalny język zwany XDR o składni zbliżonej do języka C, ułatwiający operowanie danymi w opisanym formacie. Można go wykorzystać łącznic z wieloma innymijęzykami.
NFS
Protokół NFS jest zbudowany jako zbiór procedur RPC. Nie jest on protokołem w klasycznym tego słowa znaczeniu, nie wykonuje bowiem niczego w rodzaju negocjacji pomiędzy maszynami, lecz stanowi raczej standard dostępu do plików sieciowych. Wykorzystuje on protokół transportowy UDP. Jako numer portu została mu przypisana
zs Dla programistów Borland Pascala: jest to odpowiednik typu Single (przyp. tłum.)
308
TCP/IP
celowo - bezsensowna wartość 2049. Wartość ta nie powinna zostać nigdy użyta, nieważ przydziałem numerów portów dla zdalnie wywoływanych procedur zajmuje opisany przed chwilą maper portów.
NFS został pomyślany jako protokół bezstanowy (ang. stateless) co oznacza, że nie maga on utrzymywania tablicy stanów w wykorzystującej go maszynie. Jest on rów odporny na zakłócenia (ang. robust), np. załamanie się połączenia lub awaria wewr maszyny, które to sytuacje potrafi właściwie obsłużyć.
Systematyczny opis protokołu NFS wymagałby użycia języka XDR, co wykracza ramy niniejszej książki. Poprzestaniemy więc na ogólnym opisie.
NFS definiuje szereg stałych (ang. constants) określających wiele jego parametrów, np. maksymalna długość ścieżki dostępu, maksymalny rozmiar komunikatu-żąda odczytu lub zapisu, rozmiar wskaźnika NFS i in. Nazywane są one stałymi protok yj i powinny być identyczne we wszystkich implementacjach NFS.
Oprócz stałych definiowane są struktury danych i rekordy, w terminologii NFS zwane - nieco na wyrost - obiektami, a stanowiące agregaty pól różnego typu.
Kilka obiektów NFS definiuje wielkości związane z plikami. Podstawowym obiektem identyfikującym plik jest jego uchwyt (ang. handle), mający rozmiar 32 bitów. Znacze~ nie poszczególnych bitów jest zrozumiałe dla serwera i nieistotne dla użytkownika. Typ opisujący uchwyt pliku nosi nazwę thandle.
Innym obiektem związanym z plikami jest obiekt typu ftype, opisujący typ pliku. Wy~ różnia się m.in: plik regularny (dowolny plik danych), katalog (ang. directory), łącznik~b (ang. Brak), plik blokowy i plik znakowy.
Atrybuty pliku związane są z typem fattr. Definiuje on prawa dostępu do pliku, liczbę dostępów, właściciela i wiele innych parametrów. Parametry te są istotne w przypadku próby odczytu lub zapisu do pliku.
! Obiekty danych mogą być organizowane w bardziej złożone struktury, zwane uniami
(ang. discriminating union).z' Unia rozpoczyna się od etykiety, która określa sposób in~
i,
r„ terpretacJr JeJ pozostałe) częscr; odzwrercredla to oczywrsty fakt, ze rozne rodzaJe rnfor~
f~~ mac_ji posiadają różnorodne elementy i stąd niejednolity format.
i
yi Operacje na plikach wykonywane są za pomocą poniższych procedur NFS (tabela 12.1),
Jeżeli przypadkowo jesteś programistą, zauważyłeś zapewne brak w powyższym zesta~
wie funkcji otwarcia i zamknięcia pliku. Jest to związane z tym, że NFS jest protokołem,
bezstanowym - operacje otwierania i zamykania pliku wykonuje jego część lokalna
!', w stacji roboczej, co umożliwia lepszą kontrolę sytuacji w przypadku błędu lub zerwa
,I
nia połączenia.
' Z~Odpowiadający skrótowi (ang..shortcut) w Windows 95 (przyp. tłum.)
.; z~Odpowiadające uniom języka C lub rekordom z wariantami Borland Pascala (przyp. tłum.)
NFS i NIS
gna
Tabela i2.1. Proceduryprotokolu NFS
Nazwa procedury Zrzeczenie Null Procedura pusta
Fetch file attributes Pobiera atrybutypJiku
Set file attruibutes Ustawia atrybuty pliku
Read file system root Obecnie już nie używana
Lookup filename Udostępnia uchwyt związany z plikiem
o zadanej nazwie
Read contents of link Udostępnia parametry łącznik do pliku
Read file Odczytuje porcję danych zpliku
write to cache Nie używana
Create file Tworzy nowy plik i udostępnia jego uchwyt
Delete file Usuwa plik
Rename file Zmienia nazwę pliku
Generate link Tworzy łącznik do pliku
Create directory Tworzy nowy katalog
Delete directory Usuwa katalog
Read directory Pobiera listę plików katalogu
Read file system attribUtes Udostępń~a informację o systemie plików
Protokół montowania
Jak już wcześniej wspominałem, korzystanie przez stację roboczą z usług NFS milsi byĆ poprzedzone procesem montowania. Nie zajmuje się tym właściwy protokół NFS, lecz odrębny protokół montowania. Wykorzystuje on na swoje potrzeby protokóle txansportowy UDP.
Proces montowania wiąże się z przydzieleniem aplikacji tzw. obszaru NFS, obejmującego jeden lub więcej katalogów. Obszar taki jest identyfikowany za pomocą tzw. uchwytu montowania (ang. mount handle), analogicznego do uchwytu pliku. Procesem montowania zarządza programdemon mountd; to właśnie jego zmartwieniem jest to, które maszyny i które aplikacje ukrywają się pod zwracanym uchwytem. Pozwala mu to na swobodną modyfikację swoich tablic roboczych, bez wpływu na aplikację (która nie ma do nich dostępu), lecz stanowi pewien kłopot w przypadku niespodziewanego zakończenia pracy (załamania); można sobie z tym poradzić wykorzystując polecenie oMNTALL (zobacz tabela poniżej), anulujące wszystkie istniejące montowania w stosunku do danej stacj i-kl ienta.
310 TCPIIP 1 ~ Protokół montowania aktywnyjest tylko podczas nawiazywania połaczenia klienta
z serwerem; po nawiazaniu połaczenia, dołaczony (zamontowany) system plików w znajduje się całkowicie pod kontrola procedur NFS, a odwołanie do niego następuje z wykorzystaniem uchwytu montowania.
Procedury protokołu montowania przedstawione są w tabeli 12.2.
Tabela 12.2,
Procedury protokole montowania
Nazwa Znaczenie
NULL Nic nie rób
MNT Zamontuj system plików, zwracąjąc uchwyt montowania i nazwę
;; .
systemu
UMNT Anuluj montowanie związane z konkretnym uchwytem
UMNTALL Anuluj wszystkie montowania w stosunku do danego klienta
y, EXPORT Udostępnij listę wyeksportowanych systemów plików
DUMP Udostępnij listę wszystkich systemów plików aktualnie
zamontowanych dla danego klienta
Niektóre wersje NFS udostępniająmożliwość automatycznego mornowania (ang. auto m0u?'lt~ - System plikÓw montowany jest tylko w razie potrzeby', upraszcza to admini~ strowanie systemem i często zmniejsza obciążenie jego zasobów. Proces ten jest całka wicie niewidoczny dla użytkownika. Nie jest on częścią protokołu NFS, lecz stanowi odrębną aplikację wykorzystującą jego procedury i komunikującą się z właściwą aplika cją za pomocą łączników symbolicznych (ang. links).
Blokowanie plików
Administrator sieci może okazjonalnie zabronić dostępu do wybranych plików czy kata logów, głównie w celu uzyskania wyłączności dostępu na czas zmiany wersji oprogra~ mowania czy wykonywania pewnych czynności diagnostycznych. Ten sam efekt można osiągnąć wykorzystując standardowe możliwości regulowania uprawnień dostępu da plików (ang. per~missions) systemu UNIX. Można jednak oczekiwać, że możliwdści of~ rowane w tym względzie przez protokół NFS są bardziej wyrafinowane; bowiem nawd ba~cdzo prosie s~s~em~ ,'~a1~MS ~OS,~doS~ę~~civa~~swó~m ap\~kać~om mecha~i~zmy bat
dziej subtelne od wyżej opisanego. Istotnie, mechanizm blokowania NFS funkcjon~ przy wsparciu ze strony wielu protokołów i programów-demonów (na przykład w ternie pochodzącym z Sun Microsystems, demonem tym jest proces lockd). Wszys działania związane z blokowaniem plików odbywają się pod jego kontrolą, z wyko staniem protokołu zwanego systemowym zarządcą blokowania, w skrócie KLM Kernel Lock Manager). j
Gdy aplikacja wywołuje procedurę blokowania, proces lockd sprawdza, czy doty ono „jego" maszyny (co wymaga uruchomienia lokalnego zadania), czy też wiąże
NFS i NIS
Z11
z koniecznością przekazania komunikatu (za pomocą UDP) procesowi lockd działajątemu w innej maszynie. Komunikacją pomiędzy różnymi procesami lockd zarządza protokół, zwany sieciowym zarządcą blokowania, w skrócie NLMZB (ang. Net~a~>rk Lock Manager). Istnie je wiele wersji KI,M i NUM dla có'rnych p~a~form S~pr2e~~,owych.
Z mechanizmem blokowania plików związany jest nierozerwalnie proces statd (monitor stanu- ang. statz~s monitor), kontrolujący bieżący stan blokad i decydujący o przyjęciu lub odrzuceniu kolejnego żądania blokowania.
System blokowania plików posiada jeszcze kilka dodatkowych możliwości, jak np. stopery zabezpieczające przed nieskończenie długim blokowaniem (np. w przypadku załamania się aplikacji użytkownika lub jej błędnej pracy), wczesne wykrywanie możliwości tzw. zakleszczenia (ang. deadlock) itd. Wszystkie one opisane sąw odnośnym dokumencie RFC.
Zdalne wykonywanie poleceń
Usługa zdalnego wykonywania (ang. Remote Executioh Service), polega na wykorzystaniu zasobów odległego komputera bez konieczności wykorzystywania programów logujących: telnet, rlogin czy rsh. Jest realizowana za pomocą działającego na serwerze programu-demona rexd, wykorzystującego mechanizmy NFS; w warunkach systemu wielozadaniowego, każda maszyna może być potencjalnie klientem lub serwerem (nawet jednocześnie), możliwe jest więc współdziałanie wielu procesów rexd w sieci.
Zdalne wykonywanie umożliwia wykorzystanie przez stacje robocze-klientów aplikacji obecnych jedynie na serwerze; aplikacje te mogą przy tym wykorzystywać wszystkie zasoby stacji roboczych, łącznie z ich zmiennymi środowiskowymi.
Wykonanie aplikacji lub polecenia na odległej maszynie następuje w wyniku wydania polecenia on, specyfikującego nazwę zdalnej maszyny oraz polecenie do wykonania. Oto przykład:
$ hostname tpci_hpws4 $ cat filel
This is the file "filel" on "tpci_hpws4". This is the client machine.
$ on merlin hostname merlin
$ rsh merlin cat filel cat: cannot open filel $ on merlin cat filel
This is the file "filel" on "tpci_hpws9". This is the client machine.
'R Przypadkowa zbieżność skrótów z modułami ładowalnymi Novella (Network Load Module,r) (przyp. tłum.)
312
TCP/IP
j Przykład ilustruje wykonanie polecenia cat na zdalnej maszynie, w stosunku do pli filer znajdującego się w maszynie lokalnej (na jednym z jej dysków). Za pierwsz~ razem polecenie wykonane zostało na maszynie lokalnej, toteż jego związek z lokalu; plikiem fi1e1 jest oczywisty. Kolejne wykonanie odbywa się w kontekście maszt' zdalnej, za sprawą rsh; globalna zmiana kontekstu oznacza, że i plik filer razpat want' jest w tym kontekście, czyli - mówiąc prosto - poszukiwany na zdalnej mas; nie. Ponieważ nie zawiera on pliku o tęj nazwie, polecenie sygnalizuje ten fakt jako bl Ostatnie trzecie wywołanie realizuje dokładnie to, o co chodziło: z maszyny zdalnej] pobierana jedynie aplikacja cat, natomiast jest ona wykonywana w kontekście mas; ny lokalnej - jej komunikaty nie pozostawiają co do tego wątpliwości.
rusers i spray
Przykładem aplikacji korzystających z usług NFS są aplikacje narzędziowe wymienione! w tytule. Działanie pierwszej z nich - spray -podobne jest do znanego ping i pole. ga na testowaniu połączenia z serwerem. Testowanie to polega na wysyłaniu komunikatów wsadowych i oczekiwaniu na nie odpowiedzi. Jedną z opcji programu jest opcja-c;! specyfikująca liczbę wysyłanych datagramów. Oto przykład:
$ spray -c200 beast
sending 200 packets of length 86 to beast... in 18.3 seconds elapsed time,
4 packets (2.00) dropped by beast Sent: 10 packets/sec, 912 bytes/sec Recd: 9 packets/sec, 862 bytes/sec
i Drugi z wymienionych programów- rusers -podobny jest do polecenia who, udostępniając listę użytkowników zalogowanych na zdalnych maszynach:
$ rusers
beast.tpci.com tparker bsmallwood rmaclean merlin.tpci.com ychow etreijs tgrace
i' tpci_hpws3.tpci.com tparker sysadm tpci hpws9.tpci.com pepper
~Configurowanie NF~
Mechanizm NFS jest bardzo chętnie wykorzystywany przez użytkowników, lecz ich entuzjazm znacznie słabnie, jeśli chodzi o jego szczegóły konfiguracyjne; niczym diabel od święconej wody, uciekają oni wręcz od tego problemu, spychając wszystko na barki biednego administratora. Może to i dobrze, wszak konfigurowanie NFS postrzeganejest przez użytkowników jako proces pracochłonny, złożony i wymagający sporej wiedzy, a to wymaga już zaangażowania specjalisty - ale czy taki punkt widzenia nie jest przypadkiem przesadzony? Można się o to spierać w nieskończoność, więc może niech subiektywne sądy ustąpią teraz miejsca realnym faktom: w kolejnych punktach zostaną
NFS i NIS
313
przedstawione podstawy konfigurowania NFS w środowisku dwóch różnych systemów operacyjnych: na serwerze SCO UNIX oraz stacji roboczej-kliencie pracującej pod kontrolą Windows for Workgroups. To, czy temat ten jest rzeczywiście aż tak nieprzystępny dla szeregowego użytkownika, niech pozostanie kwestią subiektywnej oceny.
Konfigurowanie serwera NFS w środowisku SCO UNIX
Ponieważ trzonem protokołu NFS są zdalne wywołania procedur, więc pierwszym krokiem jego konfigurowania jest sprawdzenie obecności usług RPC.
W systemie UNIX możesz to wykonać za pomocą polecenia:
rpcinfo -p
wyświetlającego listę serwerów RPC, uruchomionych na Twoim komputerze; lista ta składa się z czterech sekcji rpcbind (po dwie dla protokołów UDP i TCP) oraz sekcji pcnfsd, związanej właśnie z demonem NFS.
W systemie SCO UNIX uruchomienie i zatrzymanie t~FS wykonywane jest za pomocą skryptu /etc/nfs. Skrypt ten może zostać dołączony do procedur startowych, co spowoduje, że NFS będzie uruchamiany automatycznie podczas startu systemu (lista dołączonych w ten sposób skryptów znajduje się w pliku /etc/rc2 . d/Sname). ArlaloglcZnie, aby wymusić zamknięcie NFS przed zakończeniem pracy systemu UNIX, należy dołączyć nazwę skryptu /etc/nfs do pliku /etc/rco.d/Kname (nazwy te mogą się nieco różnić w poszczególnych implementacjach UNIXa).
Polecenie uruchamiające pracę systemu NFS ma postać:
/etc/nfs start
Potwierdzeniem rozpoczęcia pracy NFS jest wyświetlenie dwóch komunikatów: Starting NFS services: exportfs mountd nfsd pcnfsd biod(x4) Starting NLM services: ststd lockd
wyświetlających nazwy uruchamianych demonów.
W równie nieskomplikowany sposób można zakończyć pracę systemu:
$ /etc/nfs stop
NFS shutdown: (NFS Shutdown Complete]
Plik /etc/exports związany jest nierozerwalnie z usługami NFS w Systemie SCO UNIX. Zawiera on listę wszystkich katalogów, które zostają przeznaczone do udostępnienia ich klientom (wg. terminologii NFS - wyeksportowane). Każda linia tego pliku ma postać:
nazwa-katalogu [ -opcja, -opcja, ...... ]
I '1! i '' 314 TCP/IP
I Poszczególne opcje określają dokładniej sposób udostępnienia katalogu wymieniom ,`;! na początku linii. Dostępne są następujące wartości opcji:
• ro: Eksportowany katalog przeznaczony jest tylko do odczytu (read only); " domyślnie dozwolony jest zarówno odczyt jak i zapis;
`' • rw=nazwy maszyn: Katalog zostanie udostępniony jak tzw. read mostly, co oznacza, że dla większości maszyn będzie on katalogiem tylko do odczytu, ` jedynie wymienione maszyny będą miały prawo zapisu;
• anonsidentyfikator użytkownika: Jeżeli źródłem żądania jest niemany użytkownik, to należy użyć profilu (własności i uprawnień) wymienionego użytkownika;
• root=nazwy maszyn: Udostępnia katalog dla użytkownika root na wybranych maszynach;
• access=id_klienta: Udostępnia katalog wszystkim wymienionym klientom; pod określeniem id klienta może ukrywać się nazwa hosta lub grupy s~
użytkowników.
A oto konkretny przykład (znak # oznacza początek komentarza):
/usr/stuff -ro # ogólnie dostępny jako read only /usr -access=physics # dostępny dla grupy physics /usr/public # ogólnie dost~pny bez ograniczeń
Interpretacjązawartości pliku /ext/exports zajmuje się program exportfs. Wykonuje on po prostu czynność tzw. eksportowania, polegającą na odzwierciedleniu zawartych tam zapisów w wewnętrznych obszarach roboczych NFS. Zazwyczaj tworzonyjest pomocniczy plik o nazwie /etclxtab; nie wolno go usuwać, gdyż spowodowałobyto całkowitą dezorganizację systemu NFS.
' W razie wprowadzenia zmian do pliku /etc/exports (lub po przypadkowym usunięciu pliku lete/xtab) należy ponownie uruchomić program exportfs, aby zmianyte stały się widoczne dla NFS.
Niektóre wersje UNIXa stosują inne podejście do eksportu katalogów: rolę poszczególnych linii (nieistniejącego) pliku /etclexports pełniąkolejne polecenia share o następującęj postaci:
` share -F nfs -o opcje -d opis ścieżka
Przełącznik -F wskazuje, źe wymieniony plik Vub katalog staje się częścią systemu plików NFS. Opcje występujące po przełączniku -o są identyczne jak w przypadku pliku letc/exports. Parametr opis jest słownym opisem udostępnianego pliku lub katalogu. Przykładowe polecenie share może wyglądać następująco:
share -F nfs -d "Serwer public directory" lusr/public
NFS i NIS 315
Opcje mogą być kombinowane, na przykład polecenie:
share -F nfs -o ro=artemis,anon=200 -d "Book material" /usr/tparker/book zezwala systemowi NFS na udostępnienie katalogu /usr/tparker/book, opisanego jako Book material, dostępnego dla wszystkich maszyn do odczytu i zapisu z wyjątkiem maszyny artemis, która posiada jedynie prawo jego odczytu. Anonimowy użytkownik równoważny jest użytkownikowi o identyfikatorze 200. Polecenie share bez parametrów powoduje wyświetlenie wszystkich eksportowanych katalogów.
Konfigurowanie klienta NFS w środowisku SCO UNIX
Wyeksportowane katalogi serwera mogą być następnie zamontowane w maszynie-kliencie. Montowanie katalogu serwera polega na przyporządkowaniu go do (pustego) katalogu klienta; przyporządkowanie katalogów i inne parametry montowania stanowią składnię polecenia mount:
mount -F nfs -o opcje maszyna:system plików punkt montowania
Przełącżnik -F oznacza, że montowany system plików jest systemem NFS, natomiast fraza maszyna: system_plików punkt_montowania specyfikuje przyporządkowanie katalogów, na przykład w wyniku polecenia:
mount -F nfs artemis:usr/public /usr/artemis
lokalny katalog /usr/artemis zostaje utożsamiony z katalogiem /usr/public na zdalnej maszynie artemis, innymi słowy - wszystkie lokalne odwołania do katalogu /usr/artemis będąca rzeczywistości odwołaniami do katalogu /usr/public na maszynie artemis.
Opcje następujące po przełączniku -o mająznaczenie następujące:
• rw: Zamontuj katalog do odczytu i zapisu; • ro: Zamontuj katalog tylko do odczytu;
tirrrao=x: Poddaj się, jeżeli montowanie nW dojdzie do skutku w elągu x/10 sekund;
• retry=x: W przypadku nieudanego montowania ponów próbę najwyżej X razy;
• soft: Zrezygnuj z montowania w wypadku braku potwierdzenia z serwem; • bard: Nie rezygnuj z montowania pomimo braku potwierdzenia z serwem; • intr: Pozwól na przerwanie montowania za pomocą klawiatury.
Opcje mogą być grupowane, podobnie jak w poleceniu share, na przykład: mount -F nfs -o soft,ro artemis:usr/public /usr/artemis
316 TCP/IP
Konfigurowanie NFS w środowisku Windows
Większość produktów implementujących protokół TCP/IP w Windows 3.x, Windows for Workgroups, Windows 95 i Windows NT zawiera również sieciowy system plików NFS. Nie inaczej jest z naszym dobrym znajomym - Chameleonem NFS; wykorzystująca go maszyna może pełnić rolę zarówno serwera, jak i klienta NFS.
s
Poszczególne implementac,je NFS w środowisku Windows różnią się znacznie zakresem oferowanych usług - wiele z nich nie realizuje na przykład funkcji serwem. Sam proces instalacji i konfigurowania też jest w różnym stopniu skomplikowany - od bardzo łatwych do bardzo złożonych; ma to zresztą związek z zakresem spełnianych funkcji.
Dla celów prezentacji NFS wybrałem pakiet Chameleon pracujący w środowisku Windows 3.1 1. Jego funkcjonowanie oparte jest na programie zwanym Portmapper, kontrolującym listę udostępnianych usług sieciowych, w tym NFS; program ten uruchamiany jest automatycznie przy starcie Windows (w większości instalacji).
Ustawienia Chameleona zapamiętywane są w pliku WIN.INI; umożliwia to automatyczne zamontowanie żądanych napędów dyskowychz9 podczas jego startu. Parametry dotyczące pracy serwem mogą być regulowane za pomocą ikony (a właściwie reprezentowai
nogo przez niąprogramu) NFS w grupie NetManage Menedżera Programów; wyjątkiem jest konfiguracja drukarek sieciowych, ustalana tradycyjnie za pomocą Panelu Sterowania. Parametry związane z pracą Chameleona jako klienta, regulowane są przy pomocy Panelu Sterowania lub Menedżera Plików ten ostatni służy do montowania i rozmontowywania napędów sieciowych, pozostałe dostępne sąwłaśnie w Panelu Sterowania.
Po zainstalowaniu Chameleona możliwe jest zamontowanie napędu sieciowego; polega ono na odwzorowaniu nazwy zdalnego katalogu w oznaczenie lokalnego napędu; odtąd wszystkie odwołania do tego napędu będą w rzeczywistości odwołaniami do zdalnego katalogu.'" Aby je zrealizować wybierz opcję Podłącz dysk sieciowy z menu Dysk Menedżera Plików. Spowoduje to wyświetlenie okna dialogowego pokazanego na rys. 12.4; elementami tego dialogu są: nazwa zdalnej maszyny oraz jej montowany katalog. Wybrane oznaczenie dysku musi być różne od dysków fizycznie istniejących w systemie.
Rysunek 12.4. Montowanie zdalnego katalogu w Charneleonie NFS
Mem l:roa~ectiun _.~_....
~etne~k Path: ~p- ~ C~lusr Dirve: ,Ń .~.~.........._.._ __3 Paxag~d: _ ~......'..._.._ F~tvloue_~
Cw~eeR DriYe Cneaeacihma: rp wy t.,. W ..
'Odmiennie niż w systemie UNIX, punktami montowania w środowisku Windows są tzw. mapowane napędy dyskowe, nie katalogi (przyp. tłum.)
3°Identyczne możliwości zapewnia polecenie MAP sieci Novell oraz polecenie SUBST systemu MS-DOS w stosunku do napędów lokalnych (przyp. tłum.)
NFS i NIS
317
Przycisk _srowse umożliwi Ci zorientowanie się w zakresie istniejących maszyn oraz w zakresie systemów plików udostępnianych na każdej z nich. Za pomocą dwóch rozwijalnych list (porównaj rysunek 12.5) możesz odczytać parametry interesującego Cię systemu plików (np, uprawnienia do odczytu/zapisu itd).
Rysunek 12.5.
°rzeglądanie a~c ~,~ ~l lostępnych ~~„~ca~ systemów plików
i•~`"t~t-..
Kliknięcie na przycisk oK spowoduje wyświetlenie propozycji zamontowania wybranego systemu plików - możesz przy tym zmienić oznaczenie mapowanego dysku (rysunek 12.6). Aby anulować montowanie wybranego systemu plików, kliknij na przycisk _nisconnect w oknie z rysunku 12.4. Ikona napędu, stanowiącego punkt montowania, powinna zniknąć z Menedżera Plików.
Rysunek 12.6. Prop~Zycja aamontowania wybranego systemu plików
New Cone~r.tiru,
jieMark PaRh: ~tpćt;.!^_._..-._..-..y...' .._ Dyiver. K:.
.._ r..~xara:
Cwrent Drirp t:onnectionsv
~la6e ~;ąnneL1
cy.•nus ~ey,._SĄ ~
tłelp
ie katalogów w środowisku Windows
Chameleon umożliwia zdefiniowanie (jako funkcję serwem) uprawnień do współdzielenia przez poszczególnych użytkowników sieciowych dysków i katalogów; ewentualny brak takich definicji czyni je ogólnodostępnymi.
Definiowanie dostępu do dysków i katalogów odbywa się w oknie przedstawionym na rysunku 12.7. Aby je wyświetlić, kliknij ikonę NFS w grupie NetManage, potem w wyświetlonym oknie głównym NFS wybierz opcję vsers. Wpisując nazwę użytkownika, jego hasło (jeżeli jest wymagane), jego identyfikator i identyfikator grupy, a następnie klikając na przycisk Add, spowodujesz dodanie nowej pozycji do listy (rys. 12.8).
12.7.
(puste)
318 TCP/IP
Rysunek 12.8. Dwaj nowi użytkownicy serwery
Kliknięcie na przycisk save spowoduje zapisanie zmian na dysku; zmiany nie zapisane ważne są jedynie do końca sesji Chameleona.
i#i
Po zdefiniowaniu użytkowników serwery należy teraz definiować prawa dostępu do poszczególnych systemów plików.
Kliknij na opcję Exports w głównym oknie NFS - spowoduje to wyświetlenie okna pokazanego na rysunku 12.9. Z tego okna możesz wybierać poszczególne dyski i kata logi, w stosunku do których chcesz ustalić uprawniania dostępu. Kliknięcie na przycisk _Add spowoduje dodanie podświetlonego elementu listy w lewej części okna do listy Ex~ poru w jego prawej części. Ustalenie konkretnych uprawnień następuje w wyniku kliknięcia na przycisk Access.
R ~
n
k 12
9
.
ysu
e
.
Definiowanie praw I ns^~«l
dostępu do dysków ~ _._ -_ . ~ -___. _____
i katalogów ~ i ,
serwery
~.,..bz~ 1 ;,~_*n~~~
~:
3
.
! ; ~,~., _.
,
t_..~~...t
~~
~
l; e ~ --
~ ~~ i
__ _____-
Kiedy tylko uprawnienia zostaną przypisane, poszczególne katalogi stają się dla użytkowników serwery. Opcjonalnie użytkownik może zostać poproszony o hasła, jeżeli reguły dostępu tak stanowią.
Informacja sieciowa (NIS)
W dużych sieciach, użytkownicy często logujący się na różnych maszynach, musząm każdej z nich posiadać odrębne konta, których częścią są m.in. hasła. Łatwo sobie wy~ obrazić, że może to być czasami denerwujące, zwłaszcza w przypadku okresowej zmia: ny haseł, wymuszanej przez system IINIX. Utrzymanie zgodności haseł we wszystkicjt maszynach - jakkolwiek w końcu możliwe - zaczyna być coraz bardziej uciążliwe, ai w końcu w kieszeni użytkownika pojawia się notatnik z listą różnych haseł dla - być może kilkudziesięciu-różnych maszyn sieci.
NFS i NIS 319
Chociaż skala opisanego zjawiska zależy głównie od staranności użytkowników, to jednak stanowi ono czynnik niepożądany, bo wymagający dodatkowej fatygi.
Lekarstwo na opisaną bolączkę stanowić więc może jakiś scentralizowany system kontroli uprawnień; istotnie, w tym miejscu chcę takowy przedstawić.
System Yellow Pages, bo o nim mowa, jest aplikacją bazującą na zdalnym wywoływaniu procedur (RPC). Ze względów podyktowanych prawami autorskimi, jego kolejna wersja, w której wyeliminowano błędy wersji pierwotnej, występuje pod zmienioną nazwą Network Information Service (NIS). W użyciu są obydwie wersje, z przewagą wersji pierwszej, a piętno pierwotnej nazwy i tak widoczne jest w wersji poprawionej, w postaci dwóch literek yp, stanowiących początek wielu programów i katalogów. Obydwie nazwy często funkcjonują jako synonimy; w tej książce będę konsekwentnie używał nazwy nowszej (NIS).
Działanie systemu NIS opiera się na szeregu serwerów, podzielonych na dwie kategorie: pierwszą z nich stanowią serwery wiodące (ang. NIS master~s lub ypmasters), drugą zaś serwery podporządkowane (ang. NIS Slnves lub ypslaves). Te ostatnie wspomagają pracę serwera wiodącego, do którego sąprzyporządkowane, a w razie jego awarii przejmują_jego funkcje. Usługi oferowane przez protokół NIS zrealizowane zostały z wykorzystaniem mechanizmu zdanego wywoływania procedur (RPC) i obejmują m.in. poszuki•L~anie serwerów NIS, dostęp do plików użytkowników, funkcje administracyjne itp. W roli protokołów transportowych wykorzystywane sąw równym stopniu TCP i UDP.
Z funkcjonowaniem serwerów NIS związany jest podział sieci na mniejsze obszary, zwane domenami (ang. domains); każda domena zarządzana jest przez osobny serwer wiodący oraz kilka serwerów podporządkowanych. Domeny NIS nie powinny być mylone z domenami DNS: są one koncepcyjnie czymś zupełnie różnym, paradoksalnie jednak, w przeważającej większości przypadków, podział sieci na domeny DNS jest identyczny z jej podziałem na domeny NIS.
Drugim stopniem podziału sieci (w kategoriach usług NIS), jest podział domeny na kilka tzw. map (ang. maps). Mapy służą do zróżnicowania uprawnień dla poszczególnych grup użytkowników, korzystających z tego samego serwem wiodącego. Fizyczna postać map jest identyczna ze strukturą zbioru, zawierającego konta użytkowników (typowo /etc/passwd) - są to rekordy ASCII dodatkowo poindeksowane według pola kluezowego (ang. index key field, którym jest najczęściej nazwa użytkownika.
Istnienie tak wspaniałego mechanizmu jak NIS w niczym nie umniejsza roli lokalnych mechanizmów kontroli dostępu. Administrator sieci musi posiadać dostęp do wszystkich ważniejszych plików sieciowych także przy braku NIS (bo np. jeden z jego serwerów uległ awarii). Ponadto należy liczyć się z tym, że usunięcie awarii może trochę potrwać, a użytkownicy muszą jednak pracować, godząc się co najwyżej na przejściowe (miejmy nadzieję) obniżenie komfortu pracy; administrator powinien więc stworzyć jednolitą postać plików passwd (lub równoważnych) przynajmniej dla bardziej aktywnych użytkowników na wszystkich maszynach, z których moga potencjalnie korzystać.
320 TCPIIP Usługi protokołu NIS nie ograniczają się tylko do użytkowników systemu. Scentralizowana może zostać na przykład lista maszyn systemu (w systemie UNIX zawarta w pliku I etc I hostsy, pozy dok~czeW nowej maszyny do sieci, czy zmianie nazw istniejących maszyn, popzawki musząbyć dokonane tylko w jednym miejscu. Innąużytecznąfunkcją jest (scentralizowane) nadawanie aliasów użytkownikom.
j , Poza wspomnianymi udogodnieniami, istnienie protokołu NIS nie powoduje dla nich żadnych dodatkowych konsekwencji; jedynym użytecznym poleceniem jest poleceni yppasswd, umożliwiające użytkownikowi zmianę jego hasła. Mechanizmy NIS mus być natomiast uwzględnione przez programistów tworzących aplikacje typu klient Iser• wer dla sieci TCP/IP.
Konfigurowanie NIS
Szczegóły konfigurowania NIS są miejscami bardzo złożone i zależne od konkretnej chitektury sieci, sprawiając niemało kłopotu jej administratorowi. Ogólne zasady ko gurowania nie są jednak zbyt skomplikowane i dlatego chciałbym przedstawić je ti na przykładzie małej sieci UNIXa.
Działanie NIS opiera się na zawartości kilku plików konfiguracyjnych; większość z nic egzystuje w takiej samej roli jako elementy informacji lokalnej. Oto ważniejsze plikiti
listy:
/etc/ethers odzwierciedla adresy sprzętowe MAC Ethernet w ~t~lresy IP
/etc/group określa zasady dostępu dla poszczególnych grup użytkowników
/etc/hosts wiąże nazwy maszyn z ich adresami IP
'i y: /etc/netmasks określa maski sieciowe IP dla poszczególnych domen
/etc/protocols zawiera listę protokołów obecnych w sieci
!' /etc/rpc zawiera listę numerów usług RPC
/ect/services określa numery portów TCP dla poszczególnych usług
~I' Zawartość wymienionych plików zostanie szczegółowo opisana przy okazji konfiguracji serwerów i klientów NIS.
Ustanawianie domeny NIS
Domenę NIS stanowi obszar sieci, podległy jednemu serwerowi wiodącemu NIS, w maganemu przez kilka serwerów podporządkowanych. Jak już wcześniej wspomniał domena NIS nie ma koncepcyjnie nic wspólnego z domeną DNS, lecz często wła f;
domeny DNS stanowią podstawę do podziału sieci na domeny NIS; bywa również że w ramach jednej domeny DNS wydzielone zostaje kilka domen NIS, każda zwid z określonym zastosowaniem, np. administracyjnym, naukowo-badawczym, handlov
NFS i NIS
321
itp. Taki sposób podziału jest jednak świadomym wyborem administratora i nie jest wymuszony zasadami NIS.
Aby utworzyć domenę NIS, administrator musi wybrać dla niej nazwę, musi także znać adres IP maszyny, która będzie pełnić rolę serwera wiodącego. W końcu musi zdecydować, które maszyny będą przynależne do nowo tworzonej domeny i logując się kolejno na każdej z nich (jako root lub inny z uprawnieniami administratora) wydać polecenie:
domainname nazwa domeny
Polecenie to stanie się skuteczne dopiero po ponownym uruchomieniu maszyny, toteż administrator powinien tę czynność wykonać; celowe jest ponadto wpisanie tego polecenia do skryptu startowego, którego nazwa zależy od konkretnej wersji systemu, zazwyczaj jest to plik rc umieszczony w katalogu /etc/ r . d.
Demony NIS
Programami-demonami, organizującymi pracę protokołu NIS są: ypserv na serwerze oraz ypbind na maszynie-kliencie. Program ypserv oczekuje na żądanie od klienta i po jego otrzymaniu przystępuje do realizacji.
Program ypbind jest odpowiedzialny za połączenie z klienta z serwerem (wiodącym) za pomocą procesu zwanego związaniem (ang, binding). Jego praca rozpoczyna się od wysłania komunikatu typu broadcast do wszystkich serwerów wiodących, aby uzyskać adres 1P właściwego serwera oraz numer portu, przez który powinien wysyłać swoje żądania. Jeśli zareaguje równocześnie kilka serwerów, klient wybierze tylko pierwszą odpowiedź. Może się też tak zdarzyć, że nie nadejdzie żadna odpowiedź; program ypbind staje się uparty, ponawiając żądanie.
Programem umożliwiającym określenie, która maszyna pełni rolę serwem wiodącego dla danego klienta, jest program ypwhich:
$ ypwhich merlin
urowanie serwera wiodącego
Pierwszym krokiem konfigurowania serwem wiodącego jest zweryfikowanie zawartości wymienionych nieco wcześniej plików konfiguracyjnych N!S. Należy w szczególności upewnić się, że wszyscy użytkownicy posiadąjąprzypisane hasło, uzupełniając brakujące hasła lub usuwając nieaktualne konta. Należy ponadto sprawdzić prawidłowość przypisania poszczególnym użytkownikom katalogów roboczych.
Zaniedbania w tej dziedzinie mszczą się okrutnie - zdolnych hackerów nie brakuje a ich skutki dają znać o sobie wtedy, gdy zwykle jest za późno, bo przestają pracować krytyczne elementy sieci, jak główny serwer NIS lub jedna ze śluz.
ii 322 TCPIIP
i łi: i' i i..
Jeżeli wi c esteś uż ewien o rawne zawartości odnośn ch Tików u ewni si że ę j J p p P j Y P ~ P .I ę jesteś zalogowany jako root lub inny użytkownik posiadający uprawnienia administra
i tura. Kolejnym krokiem konfigurowania serwem będzie bowiem generowanie map funkcję tę pełni program ypinit wywołany z opcją-m:
/usr/sbin/ypinit -m.
Ścieżka do programu może być inna w Twoim systemie. Program w czasie swojej pracy przegląda zawartość pliku /var/yp, zawierającego listę katalogów dla wszystkich pli-,1 ków NIS i na te odstawie tworz wsz stkie ma ane ma u ewni si co do lokaj p Y Y wY g pY ~ P j ę
lizacji tego pliku w Twojej instalacji).
Przy tworzeniu nowej domeny tworzony jest także katalog o tej samej nazwie co nazwa domeny, zlokalizowany jako podkatalog katalogu /var/yp. Jeżeli dla danego serwetą zostanie utworzone więcej domen, to każdej z nich przyporządkowany jest inny katalog.
Ostatnim etapem pracy programu ypinit jest przekazanie serwerowi wiodącemu maszyn-serwerów podporządkowanych, jako odpowiedzi na jego zapytanie.
W środowisku prawidłowo utworzonych map może być uruchomiony demon ypserv. Najbardziej typowym sposobem jego uruchamiania jest uruchamianie go równocześnie z systemem. Należy więc wpisać do skryptu rc sekwencję podobną do poniższej:
if [ -f /etd/yp/ypserv -a -d /var/yp/'domainname' ] then
/etc/yp/ypserv fi
Sekwencja ta sprawdza obecność katalogu tożsamego z nazwą domeny i w przypadku jego istnienia uruchamia program ypserv. Ponieważ konkretna nazwa domeny niejest znana, należy ją uzyskać jako wynik polecenia domainname - umieszczenie tego polecenia w apostrofach, służy właśnie temu celowi.
Należy teraz jeszcze uruchomić program ypbind - tak, ten sam co na maszynie lokalnej - aby ypserv mógł odnaleźć żądane mapy w razie żądania maszyny-klienta. I znów najlepszym wyjściem jest wpisanie odpowiedniej sekwencji do skryptu startowego:
',~,' if [ -d /var/YP ] then /etc/yp/ypbind ; r
I,:; fi ł:.
Możesz wykonać prosty test na poprawność skonfigurowania: polecenie o następującej postaci:
a- ypmatch tparker passwd I
udostępnia odpowiednią linię pliku passwd, opisującąużytkownika o nazwie tparker. Możesz w ten sposób sprawdzić resztę użytkowników.
ś:';
NFS i NIS s2s
Konfigurowanie serwerów podporz~dkowanych
Xor~figmrora~anrćscr-werówpodparz~dkoruanych moźna rozpocząć dopiero po poprawnym skonfigurowaniu serweta wiodącego. Zaloguj się więc jako ront na maszynie, która ma stać się serwerem podporządkowanym i na wstępie ustaw nazwę domeny, używając polecenia domainname. KolejnąTwojączynrościąbędzie uruchomietite programu ypb ind'.
/etc/yp/ypbind
aby serwer podporządkowany mógł ściągnąć potrzebne pliki z serwera wiodącego. Możesz sprawdzić poprawność pracy programu ypbind przy pomocy polecenia ypwhich, które powinno zwrócić nazwę serwera wiodącego.
Ostateczne zainicjowanie serwera podporządkowanego następuje w wyniku polecenia:
letclyplypinit -s nazwa serwem
gdzie nazwa_serwera jest nazwą właściwego serwem wiodącego, natomiast przełącznik -s oznacza serwer podporządkowany (skrót od .rlnve).
Programy ypbind i ypinit powinny być normalnie uruchamiane ze skryptu startowego. Uaktualnienie map w serwerze podporządkowanym następuje w wyniku polecenia:
ypxfer mapy
gdzie mapy to nazwa pliku zawierającego poszczególne mapy, typowo jest to passwd. byname. Większość administratorów sieci zleca tę czynność demonowi zegarowemu tron, dodając xpfer do listy programów uruchamianych periodycznie.
Konfigurowanie klienta
Konfigurowanie klienta rozpoczyna się od wpisania do jego skryptu startowego polecenia domainname, z nazwą domeny jako parametrem oraz polecenia uruchamiającego program ypbind(bezparametrów).
Zgodnie ztym, co wcześniej powiedziałem, jeżeli wymaga jest informacja o użytkowniku lub grupie, najpierw przeszukiwane są lokalne pliki /etc/passwd i /etc/group. Dopiero w przypadku nieznalezienia żądanej informacji następuje odwołanie do serwera. W tym celu musisz na końcu pliku /etc/passwd dołączyć następującąlinię:
+:*:0:0:::
Jeżeli nie jest Ci obcy format pliku passwd, to z pewnością rozpoznałeś poprawną pozycję z zerową informacją. Znak + w polu nazwy użytkownika stanowi dla programu ypbind polecenie odwołania się do serwera wiodącego. Linia taka może się znajdować w dowolnym miejscu pliku.
324
i:;.
yl, ; I', ,. ,,
Kontrola pracy RPC i NFS
Kontrolę pracy protokołów RPC i NFS umożliwiają dwa podstawowe programy. Są rpcinfo i nfsstat. Chociaż z reguły są one niedostępne dla użytkownika końcowej to jednak dobrze jest zdawać sobie sprawę z ich istnienia i roli pełnionej w systemie.
T'ak się niestety składa, że pojedynczy program diagnostyczny bardzo rzadko p. od razu uchwycić prawdziwą przyczynę błędu. Dla przykładu, oprogramowanie styczne wskazuje problemy z konkretnym portem, gdy tymczasem rzeczywistą ł ną błędu jest załamanie się drugiej końcówki połączenia. Dlatego też opisane tu my mogą być traktowane jedynie jako warte wzmianki uzupełnienie bardziej za. wanych narzędzi.
TCP/IP
rpcin#o
Program ten jest monitorem mapera portów RPC w maszynie, na której został uruchomiony oraz - za pośrednictwem sieci - mapera portów RPC na serwerze. Wyświetla ne przez niego informacje zawierają zawartość tablicy mapowania, pokazując numerł portów oraz programów związanych z każdym połączeniem. Ze względu na wyjątkowi istotną rolę mapera dla omawianych protokołów, informacje te mogą stanowić cenni wskazówkę ułatwiającą zlokalizowanie problemu.
Zazwyczaj program rpcinfo wywoływany jest z opcją -p, powodującą wyświetlenie wszystkich aktualnie wykonywanych programów znanych maperowi. Opcjonalnie moż~ na podać nazwę maszyny, co ograniczy informację wyłącznie do połączeń z konkretni maszyną. Oto jeden z typowych listingów produkowanych przez program:
rpcinfo -p
program wers proto 100000 2 tcp 100000 2 udp 100008 1 udp 150001 1 udp 150001 2 udp 100002 1 udp 100002 2 udp 100024 1 udp 100024 1 tcp 100020 1 udp 100020 1 tcp 100021 2 tcp 100021 1 tcp 100021 1 udp 100021 3 tcp 100021 3 udp
port 111 111
1026 1027 1027 1028 1028 1029 1024 1034 1025 1026 1027 1038 1028 1039
portmapper portmapper walki
pcnfsd pcnfsd rusersd rusersd status status llockmgr llockmgr nlockmgr nlockmgr nlockmgr nlockmgr nlockmgr
NFS i NIS
325
W przypadku problemów z uzyskaniem dostępu do mapera, program rpcinfo wyświetla komunikat o błędzie, na przykład:
$ rpcinfo -p.
rpcinfo: can't contact port mapper: RFC: Remote system error -125
Taki stan rzeczy może świadczyć o nieaktywności zdalnęj maszyny i pomocny może okazać się program ping.
Można uzyskać informacje o stanie wybranego połączenia, podając je (wraz z nazwą maszyny) jako parametr wywołania:
$ rpcinfo -u merlin walki
program 100008 version 1 is ready and waiting
Opcja -u oznacza połączenie wykorzystujące protokół UDP, dla połączenia wykorzystującego "fCP należy podać opcję -t. Wyświetlona informacja dotyczy programu. Jeżeli program nie uzyska odpowiedzi w założonym przedziale czasowym, zamiast stanu połączenia wyświetla komunikat o błędzie,
~isstat
Program nfsstat, jak sugeruje jego nazwa, duży do wyświetlenia statystyki dotyczą cej liczby i typów aktywnych żądań RPC. Zwykle wywoływany jest bez parametrów, choć różne implementacje oferują zróżnicowany zestaw opcji, zazwyczaj ograniczający statystykę do wybranych połączeń.
Przykładowy listing produkowany przez program nfsstat wygląda następująco: Serwer rpc:
calls badcalls nullrecv badlen xdrcall 10465 0 0 0 0
Serwer nfs:
calls badcalls
10432 0
null getattr setattr root lookup readlink read
1 0°-a 24 0~ 1 0% 0 0° 10123 0% 0 0° 5 0~
wrcache write create remove rename link symlink
0 O1 2 0° 0 0<. 1 0° 0 0% 1 0~ 0 0~
Client rpc:
calls badcalls retrans badxid timeout wait newcred
Ł3273 2 0 0 0 0 0
Client nfs:
calls badcalls
8263 0
null getattr setattr ront lookup readlink read
1 0~ 24 0~ 1 0°-„ 0 0~ 10123 0% 0 0~ 5 Oó
wrcache write create remove rename link symlink
0 0°~ 2 Oó 0 0% 1 Oó 0 Oó 1 0°-0 0 0%
326 TCP/IP
Listing ten zawiera wiele użytecznych informacji diagnostycznych. Pole badcalls pokazuje liczbę błędnych komunikatów RPC. Wartości w polach nullrecv oraz badlen zawierająliczby komunikatów pustych i niekompletnych. W polu xdrcall znajdujesię liczba komunikatów nie dających się zinterpretować.
W części dotyczącej klienta, pole badxid pokazuje liczbę odebranych odpowiedzi, nie dających się skojarzyć z żadnym wysłanym żądaniem. Wartości timeout i retrans określają liczbę komunikatów wymagających powtórnego wysłania; duże liczby w tych polach mogąoznaczać zbyt wolne połączenie bądź awarię UDP. Pole wait wskazuje,ile razy (łącznie) procesy były zmuszone do oczekiwania z powodu braku wolnych portów. Wartości te mogą stanowić wskazówkę dla administratora, które elementy konfiguracji sieci należy poprawić; taki test powinien być wykonywany bardzo często.
a
f,ro' Podsumovuanie
System NFS zyskał sobie opinię systemu niezwykle złożonego i trudnego w użyciu. Nie wydaje się, aby te opinie były w pełni uzasadnione; w świetle informacji przedstawionych w tym rozdziale, jawi się on raczej jako eleganckie rozwiązanie najczęściej spoty~ kanych problemów przy wspólnym wykorzystywaniu zasobów sieciowych. Materiałowi tego rozdziału daleko do kompletności, gdyż pominąłem wiele szczegółów, chcąc unik nąć zniechęcenia Cię do dalszej lektury (mam nadzieję, że szczęśliwie udało mi się to). g,,,
R °Przedstawiłem również zasady działania i konfiguracji protokołu informacji sieciowej NIS. I chociaż nie każda sieć lokalna stanowi najbardziej podatny obszar do jego zaim~ plementowania, to jednak jest on na tyle istotnym elementem rodziny TCP/IP, żejego poznanie jest ze wszech miar pouczające.
i . i
Pytania i odpowiedzi
Scharakteryzuj w jednym zdaniu rolę, jaką spełnia NFS.
NFS umożliwia dostęp do zdalnych plików i katalogów w taki sam sposób, jak do kata logów i plików lokalnych.
Co, w kategoriach NFS, oznaczają pojęcia klienta i serwera? Po prostu: klient wysyła żądanie, a serwer na nie odpowiada.
Jaka jest rola RPC w NFS?
Protokół zdalnego wywołania procedury (RPC) zarządza komunikatami wymienianymi pomiędzy systemami bazującymi na NFS. Stanowi on zespół procedur wywoływanych przez klienta.
NFS i NIS
327
Jakie jest zadanie mapera portów?
Maper portów steruje przydziałem portów dla aplikacji, które ich wymagają.
Jakie funkcje spełnia Kernel Lock Manager?
Jest on częścią mechanizmu blokowania plików, synchronizującego ich wykorzystanie w warunkach wielodostępu. Jego praca sterowana jest żądaniami wysyłanymi przez klientów.
Quiz
1. Porównaj model warstwowy NFS z modelem OSI-RM.
2. Wyjaśnij, w jaki sposób maper dokonuje przydziału portów.
3. Co oznacza pojęcie „zewnętrznej reprezentacji danych" (XDR)?
4. Jakie zadania wykonuje protokół montowania?
5. Co oznacza termin „zdalne wykonywanie"? Jaka jest przewaga tego mechanizmu nad innymi podobnymi narzędziami?