Uruchom system plików Ubuntu za pomocą nfs. Instalowanie i konfigurowanie serwera NFS i klienta NFS. Instalowanie i konfigurowanie serwera NFS w systemie Linux.

Jeśli masz więcej niż jeden komputer w domu (lub w pracy), naturalnym pragnieniem będzie połączenie ich w sieć, aby korzystać ze współdzielonych zasobów na komputerach. Ubuntu pozwala to zrobić na różne sposoby - SMB (Server Message Block) za pomocą Samby (o tym napiszę następnym razem) i NFS (sieciowy system plików). Jeśli komputery w sieci działają inaczej system operacyjny (Linux, Windows), bardziej wskazane jest używanie Samby. Ale jeśli na wszystkich komputerach działa Ubuntu, warto zainstalować NFS

Umożliwia to zarządzanie miejscem na dysku w innym miejscu i zapisywanie tego miejsca od wielu klientów. W tym samouczku będziemy używać dwóch serwerów: jeden będzie współdzielił część swojego systemu plików. Aby podążać, będziesz potrzebować.

Krok 1 - Pobieranie i instalowanie składników

Aby pomóc użytkownikowi skonfigurować te uprawnienia, postępuj zgodnie z naszymi instrukcjami. W tym samouczku odnosimy się do serwera, który udostępnia swoje katalogi jako hosta oraz serwera, który montuje te katalogi jako klient. Host: 0 Klient: 256 .. Zacznijmy od zainstalowania wymagań wstępnych na każdym serwerze.

Korzyści z NFS to bardziej równomierne obciążenie sieci, mniejsze wykorzystanie procesora i wyświetlanie współdzielonych zasobów, takich jak zwykłe foldery w systemie.

Instalowanie NFS w systemie Ubuntu składa się z dwóch etapów: instalacji klienta NFS i Serwer NFS... Potrzebujesz klienta, aby uzyskać dostęp do folderów na innym komputerze. Aby zapewnić dostęp do folderów na komputerze, potrzebujesz serwera. Przejdźmy więc do konfiguracji.

Po zainstalowaniu tych pakietów przejdź do serwera klienta. Ponownie zaktualizujemy indeks lokalnego pakietu przed instalacją, aby mieć pewność, że posiadamy najnowsze informacje. Teraz, gdy oba serwery mają wymagane pakiety, możemy rozpocząć ich konfigurację.

Tworzenie współdzielonych katalogów na hoście

Superużytkownicy mogą robić, co chcą, w dowolnym miejscu swojego systemu. Czasami jednak system klienta ma zaufanych użytkowników, którzy powinni móc to zrobić na zamontowanym systemie plików, ale nie potrzebują dostępu administratora na hoście.

Oczywiście w sieci jest dużo informacji na temat nfs, ale trzeba przeszukać wiele stron w poszukiwaniu „pułapek”, więc postanowiłem zebrać swoje doświadczenie w tym artykule.

Zainstaluj niezbędne pakiety dla klienta (nfs-common) i serwera (nfs-kernel-server). W terminalu wykonaj następujące polecenie:

sudo apt-get install nfs-kernel-server nfs-common portmap

Przykład 1: Eksportowanie głównego celu

Możesz użyć czegoś takiego do przechowywania plików przesłanych za pomocą systemu zarządzania treścią lub stworzyć przestrzeń, w której użytkownicy będą mogli łatwo udostępniać pliki projektu. Dlatego musimy zmienić właściciela katalogu, aby pasował do tych poświadczeń.

Przykład 2. Eksportowanie katalogu źródłowego

Ten katalog jest teraz gotowy do eksportu. Ponieważ już istnieje, nie musimy go tworzyć. Nie będziemy również zmieniać uprawnień. Gdybyśmy to zrobili, spowodowałoby to różnego rodzaju problemy dla każdego, kto ma katalog domowy na komputerze-hoście. Musimy utworzyć wiersz dla każdego katalogu, który planujemy udostępnić.

Konfigurowanie serwera NFS.

Na przykład zapewnimy ogólny dostęp do folderów / common, / common1 i / common2 znajdujących się w katalogu domowym / user użytkownika, pod którego nazwą logowaliśmy się do komputera o adresie 192.168.0.1.

Warunki korzystania z folderów (na przykład):

  • / wspólny - dostęp do zapisu / odczytu dla wszystkich komputerów w lokalna sieć (z dowolnej podsieci);
  • / common1 - dostęp odczytu do komputera o adresie 192.168.0.100, pozostałym odmawia się dostępu;
  • / common2 - dostęp do odczytu / zapisu do wszystkich komputerów z zakresu adresów 192.168.0.1 - 192.168.0.255, z wyjątkiem komputera o adresie 192.168.0.200.

Wszystkie informacje dotyczące udostępniania folderów są przechowywane w pliku / etc / export. Wykonujemy polecenie w terminalu:

Zobaczmy, co każdy oznacza. Powoduje to bardziej stabilne i spójne środowisko, ponieważ odpowiedź odzwierciedla rzeczywisty stan woluminu zdalnego. Może to powodować wiele problemów podczas zmiany nazwy pliku podczas otwierania klienta. Po zakończeniu wprowadzania zmian zapisz i zamknij plik.

Krok 4 - Konfiguracja zapory na hoście

Jednak zanim będzie można korzystać z nowych promocji, należy upewnić się, że ruch na udziałach jest dozwolony przez reguły zapory. Najpierw sprawdźmy stan zapory, aby upewnić się, że jest włączona, a jeśli tak, zobaczmy, co jest obecnie dozwolone.

sudo gedit / etc / export

W wyświetlonym edytorze napisz:

/ home / user / common * (rw, async)

/ home / user / common1 192.168.0.100 (ro, async)

/ home / user / common2 192.168.0.1/24(rw,sync) 192.168.0.200 (brak dostępu)

Zapisujemy plik.

Zauważ, że:

  • pełna ścieżka do folderu udostępnianego jest zapisywana z samego katalogu głównego;
  • nie ma spacji między adresem komputera a opcjami montowania!

Uwaga dotycząca spacji:

Najlepsza praktyka zaleca włączenie najbardziej restrykcyjnej reguły, która nadal będzie zezwalać na ruch, na który chcesz zezwolić, więc zamiast uwzględniać ruch z dowolnego miejsca, będziemy konkretni. Możesz sprawdzić zmianę, wpisując.

Krok 5 - Tworzenie punktów instalacji na kliencie

Teraz, gdy serwer hosta jest skonfigurowany i obsługuje swoje zasoby, przygotujemy naszego klienta. Aby udostępnić zdalne zasoby na kliencie, musimy ustawić katalog hosta na pusty katalog klienta. Upewnij się, że montujesz w katalogu, który już istnieje, że katalog jest pusty.

/ home / user / common1 192.168.0.100 (rw, async)

W takim przypadku komputer o adresie 192.168.0.100 z prawami do odczytu / zapisu uzyska dostęp do folderu / home / user / common1, reszta nie uzyska dostępu.

/ home / user / common1 192.168.0.100 (rw, async)

W takim przypadku dostęp do folderu / home / user / common1 będzie miał komputer o adresie 192.168.0.100 z uprawnieniami do odczytu, pozostałe komputery będą miały dostęp do odczytu / zapisu!

Krok 6 - Instalacja katalogów na kliencie

Stworzymy dwa katalogi dla naszych potworów. Te polecenia powinny montować udostępnione zasoby z komputera hosta na komputer kliencki. Możesz dwukrotnie sprawdzić, czy zostały pomyślnie zainstalowane na kilka sposobów. Oba ustawione przez nas dudnienia są wyświetlane na dole. Ponieważ zostały zainstalowane z tego samego systemu plików, pokazują to samo użycie dysku.

Przykład 1: całkowity dochód

Następnie przetestujmy dostęp do zasobów, pisząc coś do każdego z nich.

Przykład 2: udostępnianie katalogu

Następnie spójrz na własność pliku. U dołu pliku dodamy wiersz dla każdego z naszych akcji. Serwer klienta automatycznie zamontuje zdalne partycje podczas rozruchu, chociaż nawiązanie połączenia może zająć kilka minut i dostępne będą promocje.

Dostępne opcje:

    ro (rw) - Zezwala tylko na żądania odczytu (odczytu / zapisu).

    subtree_check (no_subtree_check) - Jeśli eksportowany jest podkatalog systemu plików, ale nie cały system plików, serwer sprawdza, czy żądany plik znajduje się w eksportowanym podkatalogu. Wyłączenie weryfikacji zmniejsza bezpieczeństwo, ale zwiększa szybkość przesyłania danych.

    Spowoduje to usunięcie udziałów zdalnych, pozostawiając dostępną tylko pamięć lokalną. W przypadkach, gdy udostępniasz pliki przeznaczone do publicznego dostępu, nie powoduje to poważnych problemów. Jeśli problemem jest wydajność, rozważ.

    Jeśli potrzebujesz dodatkowe informacje, Czytaj poniżej. Komputer, na którym znajduje się katalog, nazywany jest serwerem, a komputery lub urządzenia łączące się z tym serwerem nazywane są klientami. Klienci zazwyczaj „montują” udostępniony katalog, aby stał się częścią ich struktury katalogów.

    sync (async) - wskazuje, że serwer powinien odpowiadać na żądania dopiero po zapisaniu zmian wprowadzonych przez te żądania na dysku. Opcja asynchroniczna informuje serwer, aby nie czekał na zapisanie informacji na dysku, co poprawia wydajność, ale zmniejsza niezawodność, ponieważ utrata informacji jest możliwa w przypadku zerwania połączenia lub awarii sprzętu.

    • Instalowanie i usuwanie systemów plików.
    • Nie dotyczy to korzystania z uwierzytelniania.
    Ponadto plik ten powinien zawierać następujące wiersze w sekcji „Mapowanie”. Zainstaluj wymagane pakiety. Na kliencie możemy zamontować całe drzewo eksportu za pomocą jednego polecenia.

    Możemy również zamontować wyeksportowane poddrzewo za pomocą. To musi być numeryczne! Absolutnie nie jest konieczne wykonywanie żadnego z poniższych kroków przedinstalacyjnych. Typowe sposoby na zrobienie tego. Ta strona zakłada, że \u200b\u200bzespół administratorów jest jedyną grupą główną i wszyscy są zaufani. Cokolwiek innego jest bardziej złożoną konfiguracją i nie zostanie tutaj omówione.

    wdelay (no_wdelay) - Nakazuje serwerowi opóźnienie wykonania żądań zapisu, jeśli oczekuje kolejne żądanie zapisu, zapisując dane w większych blokach. Zwiększa to wydajność podczas wysyłania dużych kolejek zapisu. no_wdelay instruuje, aby nie odkładać wykonania polecenia do zapisu, co może być przydatne, jeśli serwer otrzyma duża liczba plików zespoły niepowiązane ze sobą.

    Instalacja i konfiguracja

    Istnieje jednak ważne ograniczenie: maksymalnie 16 grup jest przesyłanych z klienta na serwer, a jeśli użytkownik jest członkiem więcej niż 16 grup na kliencie, niektóre pliki lub katalogi mogą być nieoczekiwanie niedostępne. Ruch jest odszyfrowywany za pomocą odpowiednich kluczy. Jeśli klient nie ma kluczy, które powinien mieć, nie może wysyłać ani odbierać danych.

    Sprawdź, czy wszystko działa

    Wymaga to osobnego przełącznika sieciowego i oddzielnych kart sieciowych, a także fizycznego bezpieczeństwa tej sieci. Powinieneś spróbować go teraz zainstalować. Główny szablon, którego będziesz używać. Do innych katalogów można skonfigurować dostęp automatyczny.

    brak dostępu- odmawia dostępu do określonego katalogu. Może to być przydatne, jeśli wcześniej ustawiłeś dostęp dla wszystkich użytkowników sieci do określonego katalogu, a teraz chcesz ograniczyć dostęp w podkatalogu tylko do niektórych użytkowników.

Zrestartuj serwer nfs-kernel-server:

sudo /etc/init.d/nfs-kernel-server restart

w przyszłości przy zmianie pliku konfiguracyjnego wystarczy ponownie odczytać plik konfiguracyjny:

Przed skonfigurowaniem montowania upewnij się, że katalogi, które będą działać jako punkty montowania, zostały już utworzone. Oczywiście, jeśli serwer jest tylko do odczytu, klient nie będzie mógł go zamontować jako nic więcej. Mocuje się na stałe ten zasób w taki sposób, że jeśli serwer stanie się niedostępny, program zaczeka, aż będzie dostępny. on cię zignoruje.

Powyższe kroki są bardzo kompletne. Istnieje łatwy sposób używania dowiązań symbolicznych. Utwórz łącze symboliczne w domu wskazujące rzeczywistą lokalizację montażu. Autotun jest montowany tylko wtedy, gdy uzyskuje się do nich dostęp i odmontowuje się go po okresie bezczynności. Aby uniknąć nieporozumień, używane będą następujące terminy.

sudo exportfs -a

Konfiguracja serwera została zakończona.

KLIENT

Instalowanie i konfigurowanie klienta NFS.

Instalacja (jeśli nie zainstalowaliśmy serwera, w przeciwnym razie klient jest już zainstalowany):

sudo apt-get install portmap nfs-common

Montowanie:

Najpierw utwórzmy foldery, w których zostaną zamontowane zasoby sieciowe. Niech w naszym przykładzie zostaną zamontowane w katalogu domowym użytkownika 2, w którym utworzymy foldery współdzielonych zasobów: / net / disk1, / net / disk2, / net / disk3. Aby to zrobić, uruchom polecenia w terminalu:

Montaż automatyczny lub automatyczny zależy od procesu automatyczna instalacja systemy plików. Jeśli nie masz ważnego powodu, aby to zrobić, pozostaw tę opcję jako domyślną. Te linie mają następujący format. Weźmy na przykład pod uwagę następujący wpis dotyczący karty głównej. Mapy bezpośrednie tworzą punkt montowania w ścieżce określonej w odpowiednim pliku mapy.

Pliki map mają następujący format. W takim przypadku powyższa linia wyglądałaby tak. Aby uzyskać dostęp do zasobu i sprawdzić, czy działa on poprawnie, wprowadź następujące informacje do powłoki. Jeśli chcesz poznać więcej szczegółów, czytaj dalej.

mkdir net
cd / net
mkdir disk1
mkdir disk2
mkdir disk3

To samo można zrobić po prostu w Nautilusie.

Montowanie zasobów sieciowych może odbywać się zarówno automatycznie, jak i ręcznie.

Aby ręcznie zamontować w terminalu, uruchom polecenia:

sudo mount -t nfs -o rw, hard, intr 192.168.0.1:/home/user/common ~ / net / disk1
sudo mount -t nfs -o ro, soft, intr 192.168.0.1:/home/user/common1 ~ / net / disk2
sudo mount -t nfs -o rw, soft, intr 192.168.0.1:/home/user/common2 ~ / net / disk3

Pamiętaj jednak, że musisz uzyskać dostęp do katalogu przed automatyczną instalacją. Gdy będzie dostępny, Twój udział będzie widoczny tylko do upływu czasu. Te dwie domyślne konfiguracje mogą być pomocne podczas konfiguracji.

Załóżmy, że masz katalog z kilkoma podkatalogami, które chcesz zainstalować osobno. Jeśli zalogowany jest użytkownik1, będziesz chciał automatycznie ustawić jego katalog domowy. Jednym z rozwiązań byłoby utworzenie osobnych wpisów dla każdego katalogu, a mianowicie.

Montowanie innych typów systemów plików

Działa, ale jest uciążliwy. Gwiazdka jest używana zamiast punktu podłączenia, a ampersand zamiast katalogu instalacyjnego. Lokalizacja systemu plików określa plik binarny przestrzeni użytkownika używany do zamontowania systemu plików, po którym następuje skrót, po którym następuje lokalizacja.

Uwaga: opcja ciężko sztywno wiąże folder na kliencie z serwerem, a jeśli serwer spadnie, komputer również może się zawiesić. Opcja miękki, jak sama nazwa wskazuje, nie jest tak kategoryczny. Pełną listę opcji można znaleźć w poleceniu man nfs w terminalu.

Ta metoda nie jest zbyt wygodna, ponieważ będziesz musiał wykonywać te polecenia za każdym razem po ponownym uruchomieniu. Zróbmy montaż automatyczny.

Cała lokalizacja musi być poprzedzona dwukropkiem. Powinieneś już mieć skonfigurowane uwierzytelnianie bez hasła przy użyciu szyfrowania z kluczem publicznym. Przykład: Zamontuj odczyt i zapis, określając użytkownika i grupę do przechowywania plików. Network File System to popularny protokół rozproszonego systemu plików, który umożliwia użytkownikom montowanie zdalnych katalogów na serwerze. System umożliwia wykorzystanie przestrzeni dyskowej w innej lokalizacji i umożliwia łatwe zapisywanie w tej samej przestrzeni z wielu serwerów.

W ten sposób działa wystarczająco dobrze w przypadku katalogów, do których użytkownicy muszą często uzyskiwać dostęp. Na potrzeby tego samouczka serwer, który będzie współdzielił swoje katalogi, będzie nazywany hostem, a serwer, który musi zainstalować te katalogi, będzie nazywany klientem. Host: 8 Klient: 333 .. Najpierw musisz zainstalować wymagane komponenty zarówno na serwerze hosta, jak i na serwerze klienta.

Aby automatycznie zamontować, edytuj plik / etc / fstab

sudo gedit / etc / fstab

Dodaj nasze dane na końcu otwartego pliku

192.168.0.1:/home/user/common / home / user2 / net / disk1 nfs defaults 0 0
192.168.0.1:/home/user/common1 / home / user2 / net / disk2 nfs defaults 0 0
192.168.0.1:/home/user/common2 / home / user2 / net / disk3 nfs defaults 0 0

Zapisujemy plik.

Zamontujmy dyski:

Teraz nasze dyski sieciowe są widoczne w Eksploratorze jako proste foldery.

Po zainstalowaniu tych pakietów możesz przełączyć się na komputer kliencki. Jest to również miejsce, w którym indeks lokalnego pakietu musi zostać zaktualizowany przed instalacją, aby upewnić się, że masz zaktualizowane informacje. To przeniesie Cię do końca tego kroku i możesz teraz przejść do następnego.

Na potrzeby tego samouczka eksperyment zostanie przeprowadzony przy użyciu dwóch różnych katalogów. Mamy teraz nowy katalog przeznaczony specjalnie do udostępniania zdalnym serwisom. Jednak własność tego katalogu nie jest jeszcze doskonała. Można to zrobić, uruchamiając następujące polecenie. Należy tutaj zauważyć, że musimy ostrożnie zmienić własność tylko tych katalogów, które są szczególnie współużytkowane. Na przykład nie można zmienić właściciela katalogu domowego, ponieważ spowoduje to wiele problemów dla użytkowników obecnych na serwerze hosta.

Zanim będziesz kontynuować czytanie tego dokumentu, będziesz musiał z powodzeniem telnetować się między maszynami, których będziesz używać jako serwera i klienta. Jeśli coś nie działa, musisz przeczytać NET-3 HOWTO i odpowiednio skonfigurować sieć.

Pierwszy krok

Zanim będziemy mogli cokolwiek zrobić, musimy skonfigurować serwer NFS. Jeśli jesteś częścią sieci wydziałowej lub uniwersyteckiej, prawdopodobnie masz skonfigurowanych kilka serwerów NFS. Oczywiście, jeśli pozwalają one na dostęp do nich i jeśli czytasz ten dokument, aby uzyskać dostęp do jednego z nich, nie musisz czytać tej sekcji i możesz po prostu przejść do sekcji Instalowanie klienta NFS.

Jeśli chcesz skonfigurować komputer inny niż Linux jako serwer, musisz przeczytać instrukcję dla żądanego systemu, aby określić, jak włączyć serwer NFS i wyeksportować system plików przez NFS. Opis, jak to zrobić na różnych platformach, został przeniesiony do osobnej sekcji. Po zidentyfikowaniu potrzebnych informacji możesz kontynuować czytanie następnej części tego dokumentu. Lub czytaj dalej w tej sekcji, ponieważ niektóre rzeczy, o których będę mówić, nie mają znaczenia, jakiego typu maszyny używasz jako serwera.

Jeśli się spieszysz, przeczytaj sekcję Linux 2.2, zanim przejdziesz dalej.

To, o czym czytałeś, będzie wymagało skonfigurowania kilku programów.

Portmapper

Portmapper w systemie Linux nosi nazwę portmap lub rpc.portmap. Strona podręcznika w moim systemie mówi, że jest to „Mapowanie numerów portów DARPA na wywołania do odpowiednich programów RPC”. To jest pierwsza luka w zabezpieczeniach, którą otworzysz, czytając ten dokument. Opis, jak zamknąć jedną z tych dziur, znajduje się w sekcji bezpieczeństwa, którą radzę przeczytać.

Uruchom portmapper. Nazywa się portmap lub rpc.portmap i powinien znajdować się w katalogu / usr / sbin (na niektórych komputerach nazywa się rpcbind). Możesz teraz uruchomić go ręcznie, ale powinien rozpoczynać się za każdym razem, gdy uruchamiasz komputer, więc musisz tworzyć / edytować skrypty rc. Zawartość twoich skryptów rc jest wyjaśniona bardziej szczegółowo na stronie podręcznika init. Zwykle można je znaleźć w katalogach /etc/rc.d, /etc/init.d lub /etc/rc.d/init.d. Jeśli istnieje skrypt o nazwie inet, będziemy go edytować. Ale to, co trzeba w nim napisać lub co jeszcze trzeba zrobić, wykracza poza zakres tego dokumentu. Uruchom portmap i sprawdź, czy działa z ps aux, a następnie rpcinfo -p. Zrobione? Dobry.

Jedna sprawa. Zdalny dostęp do twojego programu, portmapper jest określany przez zawartość twoich plików /etc/hosts.allow i /etc/hosts.deny. Jeśli rpcinfo -p nie działa, ale twój portmapper jest uruchomiony, sprawdź podane pliki. Szczegółowy opis tych plików znajduje się w sekcji dotyczącej bezpieczeństwa.

Mountd oraz nfsd

Następne programy, które musimy uruchomić, to mountd i nfsd. Ale najpierw edytujemy inny plik. To jest plik / etc / export. Powiedzmy, że chcę, aby system plików / mn / eris / lokalny na maszynie eris był dostępny dla maszyny o nazwie apollon. Następnie muszę umieścić następujące wiersze w pliku / etc / export na komputerze eris:

/ mn / eris / local apollon (rw)

Powyższe wiersze dają apollonowi dostęp do odczytu / zapisu do katalogu / mn / eris / local. Zamiast rw możemy powiedzieć ro, co oznacza dostęp tylko do odczytu (jeśli nic nie umieścisz, domyślnie będzie to dostęp tylko do odczytu. Istnieją inne opcje, które możesz tutaj ustawić, a niektóre z nich omówię później, które są związane z problemem Wszystkie są wymienione na stronie podręcznika eksportowania, z którą powinieneś przeczytać przynajmniej raz w zyciu. Istnieją również lepsze sposoby niż umieszczanie wszystkich komputerów w pliku eksportu. Możesz na przykład używać grup sieciowych, jeśli masz NIS (lub NYS) (NIS jest również znany jako YP) i zawsze używać symboli wieloznacznych dla domen IP i podsieci jako list maszyn, które mogą coś montować. Ale musisz rozważyć, kto może uzyskać dostęp do serwera w nieautoryzowany sposób, jeśli używasz takiej wszechobecnej autoryzacji.

Uwaga: ten plik eksportu nie ma takiej samej składni, jak inne systemy uniksowe. Ten dokument zawiera oddzielną sekcję dotyczącą eksportu plików dla innych systemów uniksowych.

Jesteśmy teraz gotowi do uruchomienia mountd (może również nazywać się rpc.mountd) i nfsd (który może mieć nazwę rpc.nfsd). Oba te programy odczytują dane z pliku eksportu.

Jeśli edytowałeś plik / etc / export, musisz być pewien, że nfsd i mountd wiedzą, że plik się zmienił. Tradycyjnym sposobem jest uruchomienie programu exportfs. W wielu dystrybucjach Program dla Linuksa Brak pliku exportfs. Jeśli tak, możesz utworzyć taki skrypt na swoim komputerze:

#! / bin / sh
killall -HUP /usr/sbin/rpc.mountd
killall -HUP /usr/sbin/rpc.nfsd
echo ponownie wyeksportowane systemy plików

Zapisz go w pliku, powiedz / usr / sbin / exportfs i nie zapomnij wykonać na nim chmod a + rx. Po zmodyfikowaniu pliku eksportu musisz uruchomić program exportfs jako administrator.

Powinieneś teraz sprawdzić, czy mountd i nfsd działają poprawnie. Odbywa się to najpierw za pomocą polecenia rpcinfo -p. Wynik programu powinien pokazywać coś podobnego do następującego:

program versus port proto
100000 2 tcp 111 portmapper
100000 2 UDP 111 portmapper
100005 1 UDP 745 uchwyt
100005 1 tcp 747 uchwyt
100003 2 UDP 2049 nfs
100003 2 tcp 2049 nfs

Jak widać, portmapper ogłosił swoje usługi i działa mountd i nfsd.

Jeśli pojawi się komunikat rpcinfo: nie można skontaktować się z portmapper: RPC: Błąd systemu zdalnego - Odmowa połączenia, RPC_PROG_NOT_Rregistered lub coś podobnego, oznacza to, że program portmapper nie działa lub możesz mieć coś zapisanego w / etc / files. hosty. (zezwalaj, nie zezwalaj), co uniemożliwia odpowiadanie przez portmappera, zapoznaj się z sekcją bezpieczeństwa, aby uzyskać szczegółowy opis tych plików.Jeśli otrzymasz komunikat Nie zarejestrowano programów zdalnych., oznacza to, że portmapper nie chce z tobą rozmawiać lub coś jest nie tak Zakończ nfsd, mountd i portmapper i spróbuj ponownie uruchomić sekwencję startową.

Po sprawdzeniu, czy portmapper zadeklarował usługi, możesz również przeprowadzić sprawdzenie poprawności za pomocą polecenia ps. Portmapper będzie nadal reklamować swoje usługi nawet po zakończeniu programów rozszerzeń. Więc sprawdzenie w ps może być konieczne, jeśli czujesz, że coś nie działa.

Oczywiście będziesz musiał naprawić systemowe pliki rc, aby uruchomić mountd i nfsd podczas rozruchu. Jest bardzo prawdopodobne, że te skrypty już istnieją na twoim komputerze i wystarczy odkomentować wymaganą sekcję lub aktywować skrypt na wymaganym poziomie działania.

Strony podręcznika, które powinieneś już przeglądać, to portmap, mountd, nfsd i export.

Jeśli zrobiłeś wszystko, jak powiedziałem, powinieneś był zainstalować wszystko, co jest niezbędne do działania serwera NFS.

Konfiguracja klienta NFS

Pierwszą rzeczą, której potrzebujesz, jest jądro z obsługą systemu plików NFS, wkompilowane w jądro lub dostępne jako moduł. Jest to konfigurowane przed kompilacją jądra. Jeśli nigdy nie kompilowałeś jądra, być może będziesz musiał przeczytać Rernel HOWTO i dowiedzieć się, jak to zrobić. Jeśli używasz dobra dystrybucja (np. RedHat) i nigdy nie eksperymentowałeś z jądrem lub modułami (i tym samym je zrujnowałeś ;-), jest prawdopodobne, że obsługa nfs jest już w jądrze.

Teraz możesz, w wiersz poleceń administratora, wprowadź odpowiednie polecenie montowania, a system plików pojawi się u Ciebie. Kontynuując przykład z poprzedniej sekcji, chcemy zamontować / mn / eris / local z maszyny eris. Odbywa się to za pomocą takiego polecenia:

mount -o rsize \u003d 1024, wsize \u003d 1024 eris: / mn / eris / local / mnt

(Wrócimy do opcji rsize i wsize później.) System plików jest teraz dostępny w / mnt i możesz tam wejść i uruchomić na nim ls oraz spojrzeć na poszczególne pliki. Zauważysz, że ta operacja nie jest tak szybka jak na lokalnym systemie plików, ale wygodniejsza niż ftp. Jeśli zamiast montowania systemu plików polecenie mount wyświetla błąd mount: eris: / mn / eris / local nie powiodło się, powód podany przez serwer: Odmowa uprawnień, to plik eksportu jest nieprawidłowy lub zapomniałeś uruchomić exportfs po edycji pliku eksportu. Jeśli polecenie mówi, że mount clntudp_create: RPC: Program nie został zarejestrowany, oznacza to, że nfsd lub mountd nie działają na serwerze. Lub masz problem z hostami. (Zezwól, odmów) wspomniany powyżej.

Aby przestać używać systemu plików, możesz uruchomić:

Aby automatycznie zamontować system plików nfs podczas rozruchu, musisz jak zwykle edytować plik / etc / fstab. Nasz przykład wymaga takiej linii:


...
eris: / mn / eris / local / mnt nfs rsize \u003d 1024, wsize \u003d 1024 0 0
...

To prawie wszystko, czego potrzeba. Proszę czytaj dalej.

Opcje montowania

Oto kilka opcji, które należy wziąć pod uwagę od razu podczas dodawania ich do pliku konfiguracyjnego. Kontrolują sposób, w jaki klient NFS obsługuje zamknięcie serwera lub awarię sieci. Jedną z cech NFS jest to, że może on z wdziękiem radzić sobie z tymi problemami, jeśli zainstalujesz klienta poprawnie. Istnieją dwa różne tryby obsługi błędów:

Klient NFS zgłosi błąd programowi próbującemu uzyskać dostęp do pliku znajdującego się w systemie plików podłączonym przez NFS. Niektóre programy całkiem dobrze radzą sobie z tego rodzaju błędami, ale większość programów nie. Nie polecam korzystania z tej opcji, może to doprowadzić do uszkodzenia plików i utraty danych. Szczególnie nie powinieneś używać tej opcji dla dysków pocztowych, jeśli twoja poczta coś dla ciebie znaczy.

Program uzyskujący dostęp do pliku w systemie plików podłączonym do NFS po prostu wstrzyma się, gdy połączenie z serwerem zostanie utracone. Procesu nie można przerwać ani zabić, dopóki wyraźnie nie określisz opcji intr. Po ponownym uruchomieniu serwera NFS program będzie kontynuował spokojną pracę od miejsca, w którym został przerwany. Najprawdopodobniej tego potrzebujesz. Zalecam używanie twardych opcji intr na wszystkich zamontowanych systemach plików NFS.

Kontynuując z poprzedniego przykładu, teraz w naszym pliku fstab wpis będzie wyglądał następująco:

# urządzenie punkt montowania opcji typu fs zrzuca fsckorder
...
eris: / mn / eris / local / mnt nfs rsize \u003d 1024, wsize \u003d 1024, hard, intr 0 0
...

Optymalizacja NFS

Zwykle, jeśli opcje rsize i wsize nie są określone, NFS będzie czytać i zapisywać w blokach o wielkości 4096 lub 8192 bajtów. Niektóre kombinacje jąder Linuksa i karty sieciowe nie radzi sobie z tak dużymi blokami i może nie być optymalne. Musimy więc poeksperymentować i znaleźć wartości rsize i wsize, które działają tak szybko, jak to możliwe. Możesz przetestować szybkość transmisji za pomocą podanych opcji za pomocą kilku prostych poleceń. Uruchamiając powyższe polecenie montowania i uzyskując dostęp do zapisu na dysku, możesz przetestować wydajność zapisu sekwencyjnego:

czas dd if \u003d / dev / zero of \u003d / mnt / testfile bs \u003d 16k count \u003d 4096

To polecenie tworzy plik 64 MB wypełniony wartościami zerowymi (ten plik musi być wystarczająco duży, tak duży, aby buforowanie nie odgrywało znaczącej roli w wydajności, użyj większego rozmiaru pliku, jeśli masz wystarczającą ilość pamięci). Powtórz tę operację kilka razy (5-10?) I uśrednij wyniki. Wynikowa wartość to czas przejścia, czyli wartość, która nas najbardziej interesuje w tym eksperymencie. Następnie możesz zmierzyć wydajność odczytu, wczytując plik z powrotem na swój komputer:

czas dd if \u003d / mnt / testfile of \u003d / dev / null bs \u003d 16k

wykonaj tę operację kilka razy i uśrednij wynik. Następnie odmontuj system plików i zamontuj go ponownie, ze zwiększonymi wartościami rsize i wsize. Powinny być prawdopodobnie wielokrotnościami 1024 i nie więcej niż 16384 bajtów, ponieważ jest to maksymalny rozmiar bloku danych w wersji NFS 2. Zaraz po zamontowaniu ze zwiększonymi wartościami przejdź do zamontowanego systemu plików i uruchom polecenie takie jak ls, sprawdź system plików, aby się upewnić Wszystko jest w porządku. Jeśli wartości rsize / wsize są zbyt duże, objawy są bardzo nietypowe i nie są w 100% oczywiste. Typowym objawem jest niepełna lista plików po uruchomieniu polecenia „ls” i brak komunikatów o błędach. Lub odczytanie plików w tajemniczy sposób kończy się niepowodzeniem bez komunikatu o błędzie. Po ustaleniu, że ustawienia wstępne rsize / wsize działają, możesz kontynuować dalsze testowanie wydajności. Różne platformy serwerów prawdopodobnie mają różne optymalne rozmiary bloków. Oprogramowanie SunOS i Solaris opinia ogólnasą raczej szybsze w przypadku bloku o rozmiarze 4096 bajtów niż w przypadku innych wartości.

Nowsze jądra Linuksa (od wersji 1.3) wykonują odczyt z wyprzedzeniem dla wartości rsize większych lub równych rozmiarowi strony maszyny. W procesorach Intel rozmiar strony to 4096 bajtów. Odczyt z wyprzedzeniem znacznie poprawia wydajność odczytu NFS. Tak więc na maszynach z procesor Intel możesz chcieć użyć rsize 4096 bajtów.

Pamiętaj, że musisz edytować / etc / fstab, aby użyć znalezionych wartości rsize / wsize.

Sztuczka mająca na celu poprawę wydajności zapisu NFS polega na wyłączeniu synchronicznych zapisów na serwerze. Specyfikacja NFS wymaga, aby żądania zapisu NFS nie były uważane za zakończone, dopóki dane nie zostaną zapisane na nośniku (zwykle na dysku). Ogranicza to wydajność zapisu, a zapis asynchroniczny znacznie zwiększy prędkość zapisu NFS. Demon nfsd dla Linuksa nigdy nie zapisuje synchronicznie, ponieważ sama implementacja systemu plików Linuksa na to nie pozwala, ale serwery działające na serwerach innych niż Systemy Linuxoch, możesz poprawić wydajność w ten sposób, umieszczając plik eksportu:

/ dir -async, access \u003d linuxbox

lub coś podobnego. Zapoznaj się ze stroną podręcznika podręcznika dotyczącą eksportu na tym komputerze. Pamiętaj również, że zwiększa to ryzyko utraty danych.

NFS na wolnych liniach

Wolne linie obejmują modemy, ISDN i inne połączenia międzymiastowe.

Ta sekcja opiera się na znajomości stosowanych protokołów, a nie na rzeczywistych eksperymentach. Daj mi znać, jeśli spróbujesz tego :-)

Pierwszą rzeczą do zapamiętania jest to, że NFS jest wolnym protokołem. Używanie NFS jest w większości podobne do używania Kermit do przesyłania plików. To jest wolne. Prawie wszystko jest szybsze niż NFS. FTP jest szybszy. HTTP jest szybsze. rcp jest szybszy. ssh jest szybszy.

Czy nadal chcesz to wypróbować? Ok.

Domyślne ustawienia NFS są ustawione dla dość szybkich linii z małym opóźnieniem. Jeśli użyjesz tych ustawień dla linii z dużym opóźnieniem, spowoduje to komunikaty o błędach, przerwane operacje, system może udawać, że pliki są krótsze niż są w rzeczywistości, i zachowywać się dziwnie w innych przypadkach.

Pierwszą rzeczą, którą musisz zrobić, to nie używać opcji montażu miękkiego. Spowoduje to, że oprogramowanie będzie zwracać komunikaty o błędach w przypadku przekroczenia limitu czasu. Zwykle konwencjonalne oprogramowanie nie radzi sobie zbyt dobrze z takimi błędami. To dobry sposób na dziwne awarie. Zamiast tego użyj opcji montażu twardego. Gdy opcja twarda jest aktywna, przekroczenia limitu czasu powodują niekończące się próby wznowienia zamiast przerywania programów. To jest to, czego naprawdę potrzebujesz.

Następną rzeczą do zrobienia jest eksperymentowanie z opcjami montowania timeo i retrans. Są one opisane na stronie podręcznika nfs (5), tutaj jest ich fragment:

timeo \u003d n Wartość w dziesiątych częściach sekundy przed wysłaniem
pierwsza retransmisja po przekroczeniu limitu czasu RPC. Przez
wartość domyślna to 7 dziesiątych
sekundy. Po pierwszym limicie czasu upływa limit czasu
podwaja się po każdym limicie czasu do
maksymalna wartość limitu czasu zostanie osiągnięta
wynosi 60 sekund, lub wystarczy
retransmisja przez wyzwolenie master timeout. A następnie, jeśli
system plików jest wówczas montowany z opcją twardą
każdy nowy limit czasu jest kaskadowany z
początkowa wartość jest dwukrotnie większa niż w przypadku
poprzednia kaskada dodatkowo podwajała się o
każdy przekaźnik. Zawsze maksymalny limit czasu
wynosi 60 sekund. Ogólnie najlepszy
można osiągnąć wydajność
zwiększenie limitu czasu podczas montowania
zajętej sieci, do wolnego serwera lub
przez wiele routerów.

retrans \u003d n Ta wartość określa liczbę drugorzędnych
limity czasu i retransmisje, które powinny
wystąpić przed upływem głównego limitu czasu. Przez
wartość domyślna to 3. Kiedy
głównego limitu czasu, to operacje na plikach są albo
są przerywane lub na konsoli wyświetlany jest komunikat
"serwer nie odpowiada".

Innymi słowy: jeśli żądanie nie zostanie przesłane w czasie 0,7 sekundy (700 ms), klient NFS ponowi żądanie i podwoi limit czasu do 1,4 sekundy. Jeśli nie otrzyma odpowiedzi w ciągu 1,4 sekundy, żądanie zostanie powtórzone ponownie, a limit czasu zostanie zwiększony do 2,8 sekundy.

Prędkość linii można zmierzyć za pomocą polecenia ping z rozmiarem pakietu równym wartości ustawionej przez opcje rsize / wsize.

$ ping -s 8192 lugulbanda
PING lugulbanda.uio.no (129.240.222.99): 8192 bajty danych
8200 bajtów od 129.240.222.99: icmp_seq \u003d 0 ttl \u003d 64 czas \u003d 15,2 ms
8200 bajtów od 129.240.222.99: icmp_seq \u003d 1 ttl \u003d 64 time \u003d 15,9 ms
8200 bajtów od 129.240.222.99: icmp_seq \u003d 2 ttl \u003d 64 time \u003d 14,9 ms
8200 bajtów od 129.240.222.99: icmp_seq \u003d 3 ttl \u003d 64 time \u003d 14,9 ms
8200 bajtów od 129.240.222.99: icmp_seq \u003d 4 ttl \u003d 64 czas \u003d 15,0 ms

Statystyki pingów Lugulbanda.uio.no ---
5 wysłanych pakietów, 5 odebranych pakietów, 0% utraty pakietów
w obie strony min / średnio / maks \u003d 14,9 / 15,1 / 15,9 ms

Czas tutaj pokazuje, jak długo pakiet ping przechodzi tam iz powrotem do lugulbanda. 15 ms jest dość szybkie. Pracując przez modem z prędkością 28 000 bodów można spodziewać się gdzieś około 4000-5000 ms, a jeśli linia jest ładowana przez kogoś innego, to czas będzie jeszcze dłuższy, może dwa razy. Kiedy ten czas jest wysoki, mówimy, że jest to „duże opóźnienie”. Ogólnie w przypadku dużych pakietów i bardziej obciążonych linii opóźnienie wzrośnie. Zwiększ czas w zależności od linii i obciążenia. A ponieważ opóźnienie wzrasta, gdy używasz linii do innych rzeczy: nawet jeśli chcesz używać FTP i NFS w tym samym czasie, powinieneś spróbować zmierzyć czas pingowania podczas korzystania z FTP do przesyłania plików.

Bezpieczeństwo i NFS

W żadnym wypadku nie jestem ekspertem od bezpieczeństwa komputerowego. Ale mam małą radę dla świadomych bezpieczeństwa. Ale uwaga: ta lista w żadnym wypadku nie jest pełna lista problemy związane z NFS i jeśli uważasz, że jesteś bezpieczny czytając i wykonując wszystko, co tutaj podam, to chcę cię ostrzec.

Ta sekcja nie powinna ci przeszkadzać, jeśli jesteś w zamkniętej sieci, w której ufasz wszystkim użytkownikom i nikt, komu ufasz, nie może uzyskać dostępu do komputerów w sieci. Na przykład nie powinno być połączenia telefonicznego z siecią i nie powinno być możliwości połączenia się z siecią, w której znajdują się osoby, którym nie ufasz. Myślisz, że jestem paranoikiem? Nie jestem paranoikiem. To jest podstawowa rada dotycząca bezpieczeństwa. Bezpieczeństwo wymaga dokładnego i kompetentnego administratora, który wie, gdzie znaleźć informacje o aktualnych i potencjalne problemy bezpieczeństwo.

Głównym problemem związanym z NFS jest to, że klient, jeśli nie zostanie określony, będzie ufał serwerowi i odwrotnie. To mogłoby być złe. Oznacza to, że jeśli konto administratora serwera NFS zostanie przejęte, konto administratora klienta również może zostać łatwo przejęte. I wzajemnie. Istnieje wiele strategii radzenia sobie z tym problemem, wrócimy do nich później.

Musisz przeczytać materiał doradczy CERT dotyczący NFS. Większość poniższych tekstów dotyczy porad napisanych w wydaniach CERT. Zaktualizowana lista materiałów doradczych CERT znajduje się na ftp.cert.org/01-README. Oto kilka porad dotyczących NFS:

CA-91: 21.SunOS.NFS.Jumbo.and.fsirand 12/06/91
Luka w zabezpieczeniach Sun Network File System (NFS)
Microsystems, Inc. (Sun) i programy fsirand. Ta luka
dostępne w SunOS 4.1.1, 4.1 i 4.0.3 na wszystkich
architektury. Łatki dostępne dla SunOS
4.1.1. Dostępna jest również łatka startowa dla SunOS 4.1 NFS. Słońce
dostarczy pełne poprawki dla SunOS 4.1 i SunOS 4.0.3 w późniejszym terminie.

CA-94: 15. NFS. Luki w zabezpieczeniach 19.12.94
Ten materiał doradczy zawiera pomiary
zabezpieczenie przed niektórymi lukami w zabezpieczeniach
w sieciowym systemie plików (NFS). Ten materiał został wydany w związku z
zwiększona częstotliwość hakowania maszyn przy użyciu narzędzi do
hakowanie przez wrażliwe punkty.

CA-96.08.pcnfsd 18.04.96
W tym artykule opisano problemy dotyczące zabezpieczeń w programie pcnfsd.
(znany również jako rpc.pcnfsd). Łatka poprawiająca błędy
przywiązany.

Bezpieczeństwo klienta

Po stronie klienta możemy zdecydować, że nie chcemy zbytnio ufać serwerowi. Odbywa się to na kilka sposobów za pomocą opcji montowania. Na przykład możemy zabronić programów z bitem suid ustawionym w systemie plików NFS, odbywa się to za pomocą opcji montowania nosuid. to dobry pomysł i powinieneś rozważyć to używając systemów plików zamontowanych przez NFS. Oznacza to, że administrator serwera nie będzie mógł tworzyć programów z zainstalowanym suid-administratorem w systemie plików, a następnie logować się do komputera klienta jako zwykły użytkownik i używając programu od suid-administrator, aby uzyskać również uprawnienia administratora na komputerze klienta. Możemy również uniemożliwić wykonywanie plików na zamontowanym systemie plików za pomocą opcji noexec. Ale jest używana rzadziej niż opcja nosuid, ponieważ system plików może zawierać przynajmniej kilka skryptów lub programów, które należy wykonać. Możesz wprowadzić te opcje w kolumnie opcji wraz z opcjami rsize i wsize, oddzielone przecinkami.

Bezpieczeństwo serwera: nfsd

Po stronie serwera możemy zdecydować, że nie chcemy ufać administratorowi klienta. Możemy to zrobić, określając opcję root_squash w pliku eksportu:

/ mn / eris / local apollon (rw, root_squash)

Teraz, jeśli użytkownik z UID 0 po stronie klienta próbuje uzyskać dostęp (odczyt, zapis, usuwanie), wtedy serwer plików zastąpi UID użytkownika „nobody” na serwerze. Oznacza to, że administrator klienta nie będzie mógł uzyskać dostępu ani modyfikować plików, które tylko administrator serwera może modyfikować lub do których ma dostęp. To jest dobre i musisz użyć opcji root_squash we wszystkich eksportowanych systemach plików Powiesz, że „Administrator klienta może nadal uruchomić polecenie su, aby zalogować się jako każdy inny użytkownik oraz uzyskać dostęp i zmodyfikować dowolne pliki użytkownika”. Odpowiedź brzmi: „Tak, jest sposób i działa on w systemie NFS. Z tego wynika jeden ważny wniosek: wszystkie ważne pliki i programy muszą być własnością użytkownik rootzamiast użytkownika bin lub innego użytkownika innego niż administrator, ponieważ tylko administrator klienta nie może uzyskać dostępu jako administrator serwera. Istnieje kilka innych podobnych opcji dostępnych na stronie podręcznika NFSd, więc możesz zdecydować, że (nie) ufasz komuś po stronie klienta. Masz również opcje przechodzenia przez dowolne zakresy UID i GID. Jest to opisane na stronie podręcznika Linux NFSd.

Opcja root_squash jest domyślna dla NFSd w Linuksie, użyj opcji no_root_squash, aby przenieść uprawnienia administratora w celu uzyskania dostępu do systemu plików.

Inną ważną rzeczą do zrobienia jest sprawdzenie, czy nfsd sprawdza, czy wszystkie żądania pochodzą z uprzywilejowanego portu. Jeśli akceptuje żądania z dowolnego starego portu na kliencie, użytkownik bez specjalnych uprawnień może uruchomić program, który można łatwo uzyskać przez Internet. Wie, jak „mówić” w języku protokołu nfs i będzie udawać, że użytkownik jest tym, kim chce być. NFSD w systemie Linux domyślnie przeprowadza tę kontrolę, ale w przypadku innych systemów operacyjnych musisz włączyć tę kontrolę samodzielnie. Powinno to być udokumentowane na stronie podręcznika nfsd dla twojego systemu operacyjnego.

Inna rzecz. Nigdy nie eksportuj systemu plików dla maszyny o nazwie „localhost” lub 127.0.0.1. Zaufaj mi.

Bezpieczeństwo serwera: portmapper

Podstawowy portmapper, w połączeniu z nfsd, ma problem projektowy, który umożliwia pobieranie plików z serwerów NFS bez żadnych uprawnień. Na szczęście portmapper używany przez większość dystrybucji Linuksa używa względnego zabezpieczenia przed takim atakiem i można go zabezpieczyć, konfigurując listę dostępu w dwóch plikach.

Nie wszystko dystrybucje Linuksa mają równe szanse. Niektóre dystrybucje, które wydają się być nowoczesne, nie zawierają bezpiecznej wersji portmappera, nawet teraz, wiele lat po zgłoszeniu luk. Co najmniej jedna dystrybucja zawiera nawet stronę podręcznika dla bezpieczniejszego portmappera, ale w rzeczywistości jej portmapper nie jest bezpieczny. Najłatwiejszym sposobem sprawdzenia, czy twój portmapper jest dobry, czy nie, jest uruchomienie strings (1) i obserwowanie jego wyjścia w poszukiwaniu plików, /etc/hosts.deny i /etc/hosts.allow. Zakładając, że twój portmapper to / usr / sbin / portmap, możesz to sprawdzić, uruchamiając następujące polecenie: strings / usr / sbin / portmap | grep hosty. na moim komputerze działał z następującymi wynikami:

/etc/hosts.allow
/etc/hosts.deny
@ (#) hosts_ctl.c 1.4 94/12/28 17:42:27
@ (#) hosts_access.c 1.20 96/02/11 17:01:27

Najpierw wyedytujemy plik /etc/hosts.deny. Powinien zawierać linię

co uniemożliwi każdemu dostęp. Ponieważ uniemożliwiło to każdemu dostęp, uruchom rpcinfo -p, aby sprawdzić, czy portmapper czyta ten plik i postępuje zgodnie z podanymi instrukcjami. Polecenie rpcinfo nie powinno nic drukować lub powinno wyświetlać komunikat o błędzie. Ponowne uruchamianie programu portmapper nie jest konieczne.

Zamknięcie mapy portmap dla wszystkich może być zbyt drastyczne, więc ponownie włączymy dostęp, modyfikując plik /etc/hosts.allow. Ale najpierw musimy określić, co tam umieścimy. Ten plik zawiera listę wszystkich maszyn, które mają dostęp do twojego portmappera. Spośród wielu systemów opartych na Linuksie tylko kilka maszyn potrzebuje pełnego dostępu, aby cokolwiek zrobić. Portmapper obsługuje usługi nfsd, mountd, ypbind / ypserv, pcnfsd i "r", takie jak ruptime i rusers. Spośród nich tylko nfsd, mountd, ypbind / ypserv i prawdopodobnie pcnfsd mają jakiekolwiek znaczenie. Wszystkie maszyny, które potrzebują dostępu do usług na Twoim komputerze, muszą mieć na to zezwolenie. Powiedzmy, że adres maszyny to 129.240.223.254 i znajduje się w podsieci 129.240.223.0 i potrzebuje dostępu do usług na Twoim komputerze (te terminy są wprowadzone w Networking HOWTO, wróć do niego i odśwież swoją wiedzę, jeśli to konieczne). Aby to zrobić, napiszemy w pliku hosts.allow

portmap: 129.240.223.0/255.255.255.0

Jest to to samo, co adres sieciowy, który podajesz poleceniem route, i maskę podsieci, którą podajesz poleceniu ifconfig. Dla urządzenia eth0 na tej maszynie, powinien pojawić się ifconfig

...
eth0 Link encap: 10 Mb / s Ethernet HWaddr 00: 60: 8C: 96: D5: 56
adres inet: 129.240.223.254 Bcast: 129.240.223.255 Maska: 255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU: 1500 Metryczne: 1
Pakiety RX: błędy 360315: 0 porzucone: 0 przepełnienia: 0
Pakiety TX: 179274 błędy: 0 porzucone: 0 przepełnienia: 0
Przerwanie: 10 Adres bazowy: 0x320
...

i powinien pokazać się program netstat -rn

Tablica routingu jądra
Destination Gateway Genmask Flags Metric Ref Use Iface
...
129.240.223.0 0.0.0.0 255.255.255.0 U 0 0 174412 eth0
...

(Adres sieciowy jest w pierwszej kolumnie).

Pliki hosts.deny i hosts.allow są opisane na stronach podręcznika pod tymi samymi nazwami.

WAŻNE: Nie umieszczaj w tych plikach niczego poza NUMERAMI IP w wierszach konfigurujących portmap. Wyszukiwanie nazw hostów może wyzwolić działanie portmap, które spowoduje wyszukanie nazw hostów, które wywoła portmap, który wywoła ...

Powyższe rzeczy powinny spowodować przełączenie serwera. Pozostały problem polega na tym, że ktoś włamie się do administratora (lub uruchomi MS-DOS) na zaufanej maszynie i użyje tych uprawnień do wysyłania żądań do bezpiecznego portu, tak jak każdy użytkownik, którym chce być.

NFS i firewall

Bardzo dobrym pomysłem jest zapora ogniowa portów nfs i portmap na routerze. Nfsd działa na porcie 2049 przy użyciu obu protokołów - udp i tcp. Portmapper działa na porcie 111, tcp i udp, podczas gdy mountd działa na portach 745 i 747, tcp i udp. Domyślna. Należy sprawdzić używane numery portów za pomocą polecenia rpcinfo -p.

Jeśli chcesz używać NFS przez zaporę ogniową, istnieją opcje dla nowszych wersji NFSd i mountd, aby zmusić je do korzystania z niestandardowych portów, które może otworzyć zapora.

Podsumowanie

Jeśli używasz hosts.allow / deny, root_squash, nosuid i uprzywilejowanych portów w oprogramowanie portmapper / nfs, możesz uniknąć znanych błędów w nfs i poczuć się prawie bezpiecznie. Ale mimo wszystko: gdy atakujący ma dostęp do twojej sieci, może dodać dziwne polecenia do twojego pliku .forward lub skrzynka pocztowakiedy / home lub / var / spool / mail jest montowany przez NFS. Z tego samego powodu nigdy nie powinieneś uzyskiwać dostępu do swoich prywatnych kluczy PGP przez nfs. A przynajmniej powinieneś być świadomy związanego z tym ryzyka. I przynajmniej trochę o nim wiedzieć.

NFS i portmapper tworzą złożony system i dlatego nie jest całkowicie nieprawdopodobne, że zostaną znalezione nowe błędy, czy to w rdzeniu projektu, czy w implementacji, z której korzystamy. Mogą być również znane dziury, których ktoś używa. Ale to jest życie. Aby być na bieżąco z takimi rzeczami, powinieneś przynajmniej przeczytać grupy dyskusyjne comp.os.linux.announce i comp.security.announce.

Lista kontrolna rozwiązywania problemów z montowaniem

Ta sekcja jest oparta na liście kontrolnej problemu z montowaniem napisanej przez IBM Corp. Jestem im wdzięczny za udostępnienie go do wykorzystania w tym dokumencie. Jeśli masz problem z zamontowaniem systemu plików przez NFS, sprawdź tę listę przed zgłoszeniem błędu. Każda pozycja opisuje konkretny problem i jego rozwiązanie.

Polecenie mount wciąż raportuje RPC: Program nie jest zarejestrowany Czy portmapper działa?

Poprawka: uruchom to.

Czy Mountd działa?

Poprawka: uruchom to.

Czy nfsd działa?

Poprawka: uruchom to.

Czy program Portmapper nie może odpowiadać na Twoje żądania za pomocą pliku /etc/hosts.deny?

Poprawka: Usuń regułę z pliku hosts.deny lub dodaj regułę do pliku hosts.allow, aby portmapper mógł się z tobą komunikować.

System plików nie jest eksportowany lub nie jest eksportowany na żądanie klienta. Poprawka: wyeksportuj

System rozpoznawania nazw nie jest zgodny z listą komputerów w pliku eksportu. Na przykład: lista wyeksportowanych zasobów określa eksport johnmad, ale nazwa johnmad jest tłumaczona jako johnmad.austin.ibm.com i montowanie jest niedozwolone.

Poprawka: wyeksportuj zasób dla obu postaci nazwy komputera.

Dzieje się tak również, jeśli klient ma 2 interfejsy z różne nazwy dla każdego z nich, a system plików jest eksportowany tylko dla jednej określonej nazwy.

Poprawka: wyeksportuj oba interfejsy.

Może się to również zdarzyć, jeśli serwer nie może wykonać funkcji lookuphostbyname lub lookuphostbyaddr (są to funkcje biblioteczne) na kliencie. Upewnij się, że klient może wykonywać polecenia hosta ; gospodarz ; i oba wskazują na ten sam samochód.

Poprawka: napraw system rozpoznawania nazw.

System plików został podłączony po uruchomieniu NFS (na tym serwerze). W takim przypadku serwer eksportuje sam punkt podłączenia, a nie podłączony system plików. Poprawka: Zamknij NFSd, a następnie uruchom go ponownie.

Uwaga: Klienci, którzy zostali już podłączeni do punktu podłączenia systemu plików, będą mieli problemy z uzyskaniem do niego dostępu po ponownym uruchomieniu serwera.

Data zmienia się losowo na jednym lub obu komputerach (może to zmylić markę). Korekta: ustaw prawidłową datę.

Autor tego HOWTO zaleca używanie NTP do synchronizacji zegara. Ponieważ istnieją ograniczenia eksportu NTP w Stanach Zjednoczonych, możesz pobrać NTP dla Debiana, Red Hata lub Slackware z ftp://ftp.hacktic.nl/pub/replay/pub/linux lub z serwera lustrzanego.

Serwer nie zezwala na montowanie od użytkownika, który jest w więcej niż 8 grupach. Poprawka: zmniejsz liczbę grup, do których należy użytkownik, lub zamontuj pod nazwą innego użytkownika.

Często zadawane pytania (FAQ)

To jest sekcja Często zadawane pytania (FAQ). Większość z nich jest oparta na starym FAQ Alana Coxa.

Jeśli masz problemy z montowaniem systemu plików, sprawdź, czy jest to opisane w sekcji "Lista kontrolna podczas montowania" ".

Otrzymuję przestarzałe błędy obsługi NFS podczas używania Linuksa jako serwera NFS. Jest to spowodowane błędem w jednej ze starszych wersji nfsd. Zostało to naprawione w nfs-server2.2beta16 i nowszych.

Kiedy próbuję zamontować system plików, pojawia się komunikat
nie można zarejestrować za pomocą portmap: błąd systemu przy wysyłaniu
(nie można zarejestrować w portmap: błąd systemu podczas wysyłania)

Prawdopodobnie używasz systemu Caldera. To jest błąd w skryptach rc. Skontaktuj się z Caldera w celu rozwiązania problemu.

Dlaczego nie mogę wykonać pliku po skopiowaniu go na serwer NFS? Powodem jest to, że nfsd buforuje deskryptory otwórz pliki aby poprawić wydajność (pamiętaj, że działa w przestrzeni użytkownika). Dopóki nfsd utrzymuje plik otwarty (tak jak w tym przypadku po zapisaniu do niego), jądro nie pozwoli ci go wykonać. Nfsds nowsze niż wydanie wiosenne 95 utrzymują pliki otwarte przez kilka sekund, starsze mogą utrzymywać plik otwarty przez kilka dni.

Moje pliki na NFS są tylko do odczytu. Domyślnie serwer NFS dla Linuksa wydaje wszystko jako tylko do odczytu. Przeczytaj ponownie sekcje Mountd i nfsd "" oraz "Eksportowanie systemów plików" " tego dokumentuoraz strony podręcznika `ʻexports" "i nfsd. Musisz zmodyfikować plik / etc / export.

Montuję system plików z serwera nfs pod linuxem i gdy polecenie ls jest uruchomione, nie mogę czytać ani zapisywać plików. Na starym wersje Linux musisz zamontować serwer NFS z opcjami rsize \u003d 1024, wsize \u003d 1024.

Montuję system plików z serwera NFS pod Linuksem z blokiem o rozmiarze pomiędzy 3500-4000 i regularnie zawiesza maszynę z Linuksem. Zwykle tego nie robię. Nie dzieje się tak w przypadku jąder 2.0 i 2.2. Nie ma też problemu z jądrem z serii 2.1.

Linux może uruchamiać NFS przez TCP Nie

Otrzymuję dziwne błędy podczas montowania maszyny z komputera z systemem Linux. Upewnij się, że użytkownik jest w 8 lub mniej grupach. Starsze serwery tego wymagają.

Kiedy restartuję moją maszynę, czasami zawiesza się przy próbie odmontowania zawieszonego serwera NFS. Nie odmontowuj serwerów NFS przy ponownym uruchomieniu lub zamknięciu, po prostu zignoruj \u200b\u200bto, nic nie zostanie uszkodzone, chyba że odmontujesz. Polecenie będzie wyglądać następująco: umount -avt nonfs.

Klient Linux NFS działa bardzo wolno podczas zapisywania w systemach Sun i BSD. Zazwyczaj NFS zapisuje synchronicznie (możesz to wyłączyć, jeśli uważasz, że nie grozi Ci utrata danych). Co najgorsze, jądra pochodzące z BSD nie radzą sobie z małymi blokami. Więc kiedy piszesz dane 4K z maszyny Linux w pakietach 1K, BSD robi to w ten sposób


zmień 1K
przeczytaj stronę 4K
zmień 1K
zapisz stronę 4K z powrotem na dysk
itp...

Kiedy podłączam wielu klientów do serwera Linux NFS, wydajność nieoczekiwanie spada. NFS używa pofragmentowanych pakietów UDP. Jądro ma limit liczby fragmentów lub niekompletnych pakietów, zanim zacznie je odrzucać. W jądrach serii 2.2 konfiguruje się to w czasie wykonywania za pomocą systemu plików / proc: / proc / sys / net / ipv4 / ipfrag_high_thresh i ipfrag_low_thresh. W jądrach serii 2.0 te stałe są definiowane w czasie kompilacji i są zdefiniowane w pliku ... / linux / net / ipv4 / ip_fragment.c, IPFRAG_HIGH_THRESH i IPFRAG_LOW_THRESH. Te parametry oznaczają, że kiedy zużycie pamięci przez nierozpoznane fragmenty pakietów UDP osiągnie wartość `ʻipfrag_high_thresh" "w bajtach (256K domyślnie w jądrach 2.2.3 i 2.0.36), zmniejszy się do` ʻipfrag_low_tresh" ". Odbywa się to poprzez odrzucanie fragmentów. Będzie to wyglądało na prawie całkowitą utratę pakietów i jeśli zostanie osiągnięta górna granica, wydajność serwera zostanie poważnie obniżona.

256K wystarczy, aby obsłużyć do 30 klientów. Jeśli masz 60 klientów, podwoj tę wartość. A także zwiększ wartość dolnej granicy.

Używam Linuksa 2.2 (lub nowszego) z knfsd i nie mogę podłączyć moich maszyn AIX, IRIX, Solaris, DEC-Unix, ... Knfsd ogłasza, że \u200b\u200bwdraża NFS w wersji 3. Tak nie jest. Istnieje opcja, która uniemożliwia mu ogłoszenie tego. Użyj tego. Lub możesz umieścić parametr „vers \u003d 2” na liście opcji montowania na kliencie.

Mój komputer z systemem AIX 4 nie może podłączyć mojego serwera Linux NFS. Ona raportuje
mount: 1831-011 odmowa dostępu dla serwera: / dir
wierzchowiec: 1831-008 rezygnacja z:
serwer: / reż
Uprawnienia dostępu do pliku nie pozwalają na określone działanie.

lub coś podobnego. AIX 4.2 używa zarezerwowanych portów (<1024) для NFS. AIX 4.2.1 и 4.3 не ограничены резервированными портами. Также AIX 4.2.1 и 4.3 пытаются произвести монтирование используя версию NFS3, затем NFS/TCP, и только потом NFS/UDP.

Dodawanie linii

nfso -o nfs_use_reserved_ports \u003d 1

na końcu pliku rc.tcpip wymusi użycie zarezerwowanych portów. (Tę radę przesłał Brian Gorka).

Eksportowanie systemów plików

Sposób eksportowania systemów plików przy użyciu NFS nie jest w pełni zgodny na różnych platformach. W tym przypadku Linux i Solaris 2. różnią się od siebie. W tej części wymieniono pobieżnie, jak wykonać tę operację w większości systemów. Jeśli Twojego systemu nie ma na liście, zapoznaj się ze stronami podręcznika systemu operacyjnego. Słowa kluczowe to: nfsd, narzędzie do administrowania systemem, skrypty rc, skrypty startowe, sekwencja rozruchowa, / etc / export, exportfs. Posłużę się jednym przykładem dla całej sekcji: jak wyeksportować / mn / eris / lokalny system plików dla maszyny Apollon z dostępem do odczytu / zapisu.

IRIX, HP-UX, Digital-UNIX, Ultrix, SunOS 4 (Solaris 1), AIX

Te systemy operacyjne wykorzystują tradycyjny format eksportu firmy Sun. W pliku / etc / export napisz:

/ mn / eris / local -rw \u003d apollon

Pełna dokumentacja znajduje się na stronie podręcznika eksportowania. Po edycji pliku uruchom exportfs -av, aby wyeksportować systemy plików.

Dokładna składnia polecenia exportfs jest różna. W niektórych systemach operacyjnych może się okazać, że wprowadzone wiersze są odczytywane jako:

/ mn / eris / local apollon

lub nawet tak:

Solaris 2

Sun całkowicie wymyślił koło podczas opracowywania Solaris 2. Jest więc całkowicie odmienny od innych systemów operacyjnych. To, co musisz zrobić, to wyedytować plik / etc / dfs / dfstab. Powinieneś w nim umieścić polecenia współdzielenia, jak opisano na stronie podręcznika share (1M). Coś takiego:

share -o rw \u003d apollon -d "Eris Local" / mn / eris / local

Po edycji uruchom shareall, aby wyeksportować system plików.

NFS w Linuksie 2.2

Jak napisałem, Linux 2.2.12 jest aktualną wersją jądra i użycie NFS na nim może wymagać trochę pracy. Albo nie jest to konieczne.

Jaki będzie status NFS w Linuksie 2.4, nie wiem.

Dużą nowością w Linuksie 2.2 jest wsparcie dla demona nfs w jądrze, zwanego knfsd. Ten sposób implementacji nfsd ma kilka zalet, z których główną jest szybkość. Maszyna Linux 2.2 z knfsd jest solidnym serwerem nfs. Nadal możesz używać starego nfsd w Linuksie 2.2, ale jest też kilka zalet, głównie prostota.

Jeśli używasz źródeł jądra lub pakietów binarnych utworzonych przez kogoś takiego jak RedHat (6.0 i nowsze), SuSE (6.1 lub nowsze) lub jakiś inny profesjonalny integrator systemów, najprawdopodobniej będą one dostarczane z pełną integracją "knfsd" do rdzenia i nie będziesz musiał się martwić. W większości przypadków. Dopóki sam nie skompilujesz jądra. Jeśli używasz zwykłego jądra Linuksa 2.2 (przynajmniej 2.2.12), knfsd nie będzie działać.

Aby to działało samodzielnie, musisz pobrać pakiet knfsd autorstwa H.J. Lus. Ten pakiet jest zbiorem łatek i niezbędnych narzędzi dla jąder serii 2.2, którymi Lu zajmuje się w wolnym czasie. Możesz go pobrać z lokalnego serwera lustrzanego jądra lub z serwera głównego pod adresem ftp.kernel.org:/pub/linux/devel/gcc/. Nie jest przeznaczony do ogólnego użytku. Jeśli ten pakiet nie jest dla Ciebie jasny, nie próbuj go używać samodzielnie. Poczekaj, aż Twój ulubiony integrator systemów (np. Red Hat, SuSE lub ...) wyda pakiety jądra.

Nie przesyłaj mi też pytań dotyczących tego pakietu, nie mogę Ci pomóc. Nie mam ani jednego serwera z uruchomionym knfsd. Jeśli znajdziesz błąd lub pominięcie w dokumentacji napisz do mnie, poprawię ten dokument i wydam go ponownie.

Wciąż czytasz? Ok. H.J.Lu wysyła wiadomości o nowych wersjach swojego pakietu na listę mailingową linux-kernel. Są tam również wysyłane inne komunikaty związane z NFS w jądrze 2.2. Przeczytaj je.

Jest jedna interesująca rzecz do powiedzenia o pakiecie knfsd. Ogłasza, że \u200b\u200bkorzysta z NFS w wersji 3. Jednak nie obsługuje tej wersji. Istnieje opcja, której możesz użyć, aby zapobiec rozgłaszaniu pakietu na NFS3 lub na klientach, musisz określić opcję "vers \u003d 2" wśród innych opcji montowania.

Klient

Klient jest bardzo prosty. Aby uzyskać poprawne blokowanie, musisz mieć skompilowany, zainstalowany i dostarczony ze skryptów startowych statd (z pakietu knfsd). Zrób to. Statd potrzebuje do uruchomienia katalogu / var / lib / nfs, w przeciwnym razie po prostu zakończy pracę bez żadnych komunikatów o błędach, więc musisz utworzyć katalog przed uruchomieniem programu.

Mając już uruchomiony statd, możesz użyć programu testlk (w katalogu tools / locktest), aby sprawdzić, czy blokowanie plików działa na systemach plików podłączonych do NFS. Powinno działać dobrze. Jeśli program wyświetla komunikat Brak dostępnych blokad, oznacza to, że statd nie działa.

W rzeczywistości możesz również całkowicie uniknąć blokad (zauważ, że nie polecam tego robić), używając opcji „nolock” na liście opcji montowania.

O ile wiem, to wszystko, co jest potrzebne do pracy klientów.

Jeśli masz serwer Sparc lub Alpha NFS, zauważysz, że klient nfs w Linuksie 2.2 w ogóle nie działa. Szybkości transferu do iz serwera są tak złe, że trudno to sobie wyobrazić. Jest gorzej nawet pod Linuksem 2.0. Duzo gorszy. Ale istnieje rozwiązanie tego problemu. Seria jąder Alan Cox 2.2 (które są bardziej eksperymentalne niż zwykłe jądra 2.2 utrzymywane przez Linusa) zawiera łatkę, która pozwala Linuksowi 2.2 zwiększyć wydajność z serwerami Alpha i Sparc. Jeśli chcesz używać jąder załatanych przez Alana Coxa, powinieneś przeczytać listę mailingową linux-kernel i powinieneś wiedzieć, gdzie znaleźć potrzebne łatki. Głównym serwerem tej poprawki jest http://www.uio.no/~trondmy/src/, na wypadek gdybyś chciał spróbować zastosować ją do normalnego jądra z serii 2.2. Ta poprawka najprawdopodobniej nie zostanie uwzględniona w Linuksie 2.4, ponieważ wymaga zbyt wielu zmian w bieżącym cyklu rozwoju. Poczekaj na Linuksa 2.5.

trondmy ma również łatki, które sprawiają, że Linux używa NFS w wersji 3, co pozwala również na użycie tcp jako mechanizmu transportowego zamiast UDP. NFSv3 jest bardzo dobry w sieciach z dużą ilością przeskoków, a także w sieciach, w których utrata pakietów jest różna od zera lub w których opóźnienia są bardzo duże.

Powinieneś przeczytać listę mailingową linux-kernel, jeśli zamierzasz używać tych poprawek, ponieważ od czasu do czasu znajdują one nieprzyjemne błędy. Błędy, które uszkadzają twoje pliki. Więc proszę uważać.

serwer

Demon serwera nfs w Linuksie 2.2 i nowszych nosi nazwę „knfsd”. Jest trudny do zainstalowania. Możesz go dostosować samodzielnie lub możesz zainstalować to, co SuSE, Red Hat i inne oferują jako pakiety jądra serii 2.2. Przepraszam. Jednak nadal możesz używać starego nfsd w Linuksie 2.2. Jest powolny, ale łatwy w instalacji.

Serwer NFS na dyskietce

Ta sekcja została napisana przez Rona Petersa. [email chroniony] Wyjaśnia, jak skonfigurować serwer NFS podczas uruchamiania z dyskietki. Najpierw pomyślano o tym, aby zapewnić dostęp NFS do dysku CD-ROM na innej maszynie innej niż Linux / UNIX, aby zainstalować Linuksa na komputerze, który nie ma dysku CD.