# Opis systemów NIS(YP)/NYS/NIS+ na Linux-ie.

## Autor:Thorsten Kukuk kukuk@suse.de
v1.0, 9 Marca 1999
Wersja polska: Bartosz Maruszewski B.Maruszewski@jtz.org.pl
v3.0, 9 Sierpnia 1999

Dokument ten opisuje jak skonfigurować Linux-a, aby działał jako klient NIS(YP) czy NIS+ oraz jako serwer. Dokument ten został napisany w standardzie ISO-8859-2.

## 1. Wprowadzenie.

Coraz więcej komputerów z Linux-em instalowanych jest jako część sieci komputerowych. Aby uprościć administrację siecią większość sieci (głównie oparte na Sun-ach) posiada Network Information Service. Maszyny Linux-owe mogą w pełni korzystać z serwera NIS albo samemu dostarczać taką usługę. Linux może także działać jako pełny klient NIS+, obsługa tego jest jeszcze w fazie beta.

Dokument ten próbuje odpowiedzieć na pytania dotyczące ustawienia NIS(YP) i NIS+ na twoim komputerze. Nie zapomnij przeczytać sekcji na temat Portmapper-a RPC.

NIS-HOWTO zajmuje się

> `

>             Thorsten Kukuk, <tt/kukuk@vt.uni-paderborn.de/

> `

Pierwotnym źródłem informacji dla pierwszej wersji NIS-HOWTO byli:

> `

>     Andrea Dell'Amico       <adellam@ZIA.ms.it>
>     Mitchum DSouza          <Mitch.DSouza@NetComm.IE>
>     Erwin Embsen            <erwin@nioz.nl>
>     Peter Eriksson          <peter@ifm.liu.se>

> `

którym powinniśmy podziękować za napisanie pierwszych wersji tego dokumentu.

## 1.1 Nowe wersje tego dokumentu.

Najnowszą wersję tego dokumentu możesz zawsze znaleźć pod adresem http://www.suse.de/~kukuk/linux/HOWTO/NIS-HOWTO.html.

Najnowsze wersje będą także umieszczane na różnych serwerach WWW i FTP związanych z Linux-em włącznie ze stroną LDP.

Odnośniki do tłumaczeń tego dokumentu można znaleźć pod adresem http:///www.suse.de/~kukuk/linux/nis-howto.html.

## 1.2 Zrzeczenie.

Pomimo, iż dokument ten powstał w jak najlepszej intencji może i pewnie zawiera błędy. Czytaj proszę wszystkie pliki README znajdujące się wraz z oprogramowaniem wymienianym tutaj w celu uzyskania jak najświeższych informacji. Będę sie starał aby było tu jak najmniej błędów.

## 1.3 Komentarze i poprawki.

Jeśli masz jakieś pytania czy poprawki dotyczące tego dokumentu, pisz śmiało do Thorstena Kukuk na adres kukuk@suse.de. Przyjmuję wszelkie sugestie czy krytykę. Jeśli znajdziesz jakiś błąd daj mi znać proszę, żebym mógł go poprawić w następnej wersji. Dzięki.

Proszę nie przysyłaj mi pytań na temat problemów dotyczących twojej dystrybucji Linux-a. Nie znam każdej dystrybucji. Ale będę się starał dodać każde rozwiązanie jaki mi przyślecie.

## 1.4 Podziękowania.

Chcielibyśmy podziękować wszystkim ludziom, którzy przyczynili się w jakiś sposób do powstania i rozwoju tego dokumentu. W porządku alfabetycznym:

> `

>     Byron A Jeff            <byron@cc.gatech.edu>
>     Markus Rex              <msrex@suse.de>
>     Miquel van Smoorenburg  <miquels@cistron.nl>

> `

Theo de Raadt jest odpowiedzialny za oryginalny kod yp-klienta. Swen Thuemmler przeniósł ten kod na Linux-a jak również procedury yp do biblioteki libc (znowu na podstawie pracy Theo). Thorsten Kukuk napisał od zera procedury NIS(YP) i NIS+ dla GNU libc 2.x.

## 1.5 Od tłumacza.

Tłumaczenie to jest chronione prawami autorskimi © Bartosza Maruszewskiego. Dozwolone jest rozprowadzanie i dystrybucja na prawach takich samych jak dokument oryginalny.

Jeśli znalazłeś jakieś rażące błędy ortograficzne, gramatyczne, składniowe, techniczne to pisz do mnie. Zaznaczam, że nie jestem biegły w terminologii kryptografii więc wystepują tu pewnie jakieś dziwne wyrażenia, które powinienem zapisać inaczej. Jeśli wiesz jak to ma brzmieć, napisz;

B.Maruszewski@jtz.org.pl

Oficjalną stroną tłumaczeń HOWTO jest http://www.jtz.org.pl/

Aktualne wersje przetłumaczonych dokumentów znajdują się na tejże stronie. Dostępne są także poprzez anonimowe ftp pod adresem ftp.jtz.org.pl w katalogu `/JTZ/`.

Przetłumaczone przeze mnie dokumenty znajdują się także na mojej stronie WWW. Są tam też odwołania do Polskiej Strony Tłumaczeniowej.

Kontakt z naszą grupą, grupą tłumaczy możesz uzyskać poprzez listę dyskusyjną jtz@ippt.gov.pl. Jeśli chcesz sie na nią zapisać, to wyślij list o treści `subscribe jtz Imię Nazwisko` na adres `majordomo@ippt.gov.pl`

Zmiany w tym dokumencie wprowadzone przez tłumacza to odwołania do polskich serwerów ftp.

## 2. Słowniczek i informacje ogólne.

## 2.1 Słowniczek terminów.

W dokumencie tym występuje wiele akronimów. Oto te najważniejsze i krótkie wyjaśnienie:

DBM

  DataBase Management - biblioteka funkcji, które obsługują pary z kluczem (-key-content) w bazie danych.

DLL

  Dynamically Linked Library - biblioteka dołączana do wykonywalnego programu podczas jego działania.

domainname

  "Nazwa-klucz", która jest używana przez klientów NIS, aby zlokalizować pasujący serwer NIS, który udostepnia klucz dla domeny (domainname key). Zauważ proszę, że to nie koniecznie ma coś wspólnego z domeną DNS-ową (nazwą maszyny).

FTP

  File Transfer Protocol - protokół używany do przenoszenia plików pomiędzy komputerami.

libnsl

  Name services library - biblioteka odwołań "name service" (getpwnam, getservbyname itp.) na unix-ach SVR4. GNU libc używa tego do funkcji NIS (YP) i NIS+.

libsocket

  Socket services library - biblioteka odwołań obsługi gniazdek (socket, bind, listen itp.) na unix-ach SVR4.

NIS

  Network Information Service - serwis który udostępnia informację, która musi być znana poprzez sieć dla wszystkich maszyn w sieci. W standardowej bibliotece Linux-a - libc - jest obsługa dla NIS, która dalej zwana jest "tradycyjnym NIS-em".

NIS+

  Network Information Service (Plus :-) - właściwie to taki NIS na sterydach. NIS+ został zaprojektowany przez Sun Microsystems Inc. jako zastępca NIS-a z lepszym bezpieczeństwem i lepszą obsługą _wielkich_ instalacji.

NYS

  Jest to nazwa projektu, który powstał z NIS+, YP i Switch i zarządzany jest przez Petera Erikssona <peter@ifm.liu.se>. Między innymi zawiera powtórną implementację kodu NIS-a (=YP), która używa funkcjonalności Name Service Switch biblioteki NYS.

NSS

  Name Service Switch. Plik /etc/nsswitch.conf określa kolejność, w jakiej sprawdza się pewne żądane informacje.

RPC

  Remote Procedure Call. Procedury RPC pozwalają programom w C odwoływać się do procedur na odległej maszynie poprzez sieć. Kiedy ludzie mówią o RPC to najczęściej mają na myśli wariant Sun-a RPC.

YP

  Yellow Pages(TM) - zarejestrowany znak towarowy w UK firmy British Telecom plc.

TCP-IP

  Transmission Control Protocol/Internet Protocol. To protokół komunikacji danych najczęściej używany na maszynach unix-owych.

## 2.2 Trochę ogólnych informacji.

Następujące 3 linijki to cytat z podręcznika Sun(TM) System & Network Administration Manual:

> `

>     "NIS znany był wcześniej jako Sun Yellow Pages (YP), ale nazwa Yellow
>     Pages(TM) jest zarejestrowanym znakiem towarowym w Zjednoczonym
>     Królestwie firmy British Telecom plc i nie może być używana bez zgody."

> `

NIS to skrót od Network Information Service. Celem jego jest dostarczanie informacji, która musi być znana na sieci dla wszystkich komputerów. Informacja, która najprawdopodobniej będzie dystrybuowana to:

- login/hasła/katalogi domowe (/etc/passwd)
- informacje o grupach (/etc/group)

Jeśli na przykład informacja o twoim haśle jest zapisana w bazie haseł NIS, będziesz mógł się zalogować na wszystkich maszynach na sieci, które mają uruchomionego klienta NIS.

Sun jest znakiem towarowym Sun Microsystems, Inc. licencjonowane dla SunSoft, Inc.

## 3. NIS , NYS czy NIS+ ?

## 3.1 libc 4/5 z tradycyjnym NIS czy NYS ?

Wybór pomiędzy "tradycyjnym NIS" czy kodem NIS w bibliotece NYS jest wyborem pomiędzy lenistwem i rozwojem a elastycznością i zamiłowaniem do przygody.

Kod "tradycjnego NIS" jest w standardowej bibliotece C i istnieje już długo i czasem cierpi z powodu swojego wieku i pewnej nieelastyczności.

Kod NIS w bibliotece NYS wymaga rekompilacji biblioteki libc, aby włączyć do niej kod NYS (albo możesz wziąć już skompilowaną wersję libc od kogoś kto już ją skompilował).

Inną różnicą jest to, że "tradycyjny NIS" ma pewną obsługę NIS Netgroups, której NYS nie ma. Z drugiej strony NYS pozwala obsługiwać Shadow Passwords w sposób przezroczysty. "Tradycyjny NIS" nie obsługuje Shadow passwords przez NIS.

Zapomnij o tym wszystkim jeśli używasz nowej biblioteki GNU C 2.x (aka libc6). Ma ona rzeczywistą obsługę NSS (Name Switch Service), co czyni ją bardzo elastyczną oraz zawiera obsługę następujących map NIS/NIS+: aliases, ethers, group, hosts, netgroups, networks, protocols, publickey, passwd, rpc, services i shadow. Biblioteka GNU C nie ma żadnych problemów z shadow password przez NIS.

## 3.2 NIS czy NIS+ ?

Wybór między NIS a NIS+ jest prosty - użyj NIS-a jeśli nie musisz używać NIS+ czy nie musisz stosować zaostrzonego bezpieczeństwa. Z NIS+ jest _o wiele_ więcej kłopotów jeśli chodzi o administrację (jest nim całkiem łatwo zarządzać od strony klienta, ale serwer to horror). Innym problemem jest fakt, że wsparcie dla NIS+ w Linux-ie jest ciągle w fazie rozwoju - potrzebujesz najnowszej biblioteki glibc, albo musisz poczekać na glibc 2.1. Istnieje wersja zastępcza glibc z obsługą NIS+ dla libc5.

## 4. Jak to działa.

## 4.1 Jak działa NIS.

W całej sieci musi być przynajmniej jedna maszyna działająca jako serwer NIS. Możesz zrobić więcej serwerów NIS, każdy dla innej "domeny" NIS - albo możesz mieć współpracujące serwery NIS, gdzie jeden ma być głównym serwerem NIS (master) a wszystkie inne są tak zwanymi slave NIS servers (to znaczy dla pewnej "domeny" NIS!) - albo możesz to pomieszać.

Serwery slave posiadają tylko kopię baz danych NIS i otrzymują te kopie od głównego serwera NIS kiedy tylko robione są jakieś zmiany w głównej bazie. W zależności od liczby komputerów w twojej sieci, możesz zdecydować się na instalację jednego lub większej ilości serwerów slave. Kiedy tylko serwer NIS jest unieruchamiany (goes down) albo jest zbyt wolny w odpowiedziach na żądania, klient NIS-a podłączony do tego serwera spróbuje znaleźć ten, który działa albo jest szybszy.

Bazy danych NIS są w tak zwanym formacie DBM, pochodzącym od baz danych ASCII. Na przykład, pliki `/etc/passwd` i `/etc/group` mogą być bezpośrednio zamienione na DBM przy pomocy oprogramowania translacyjnego ASCII-na-DBM ("makedbm" - dostarczanym wraz z serwerem). Główny serwer NIS powinien posiadać obie bazy - tak ASCII jak i DBM.

Serwery slave zostaną powiadomione o każdej zmianie w mapach NIS, (poprzez program "yppush") i automatycznie uaktualnią owe zmiany, aby zsynchronizować swoje bazy danych. Klienci NIS nie muszą tego robić ponieważ oni zawsze łączą się z serwerem NIS, aby odczytać informacje zapisane w bazach danych DBM.

Stare wersje ypbind wysyłają adres rozgłoszeniowy (broadcast), aby znaleźć działający serwer NIS. Jest to niebezpieczne ponieważ każdy może zainstalować serwer NIS i odpowiedzieć na takie zapytanie. Nowsze wersje ypbind (3.3 czy mt) pobierają adres serwera z pliku konfiguracyjnego - i nie ma potrzeby wysyłania adresu rozgłoszeniowego.

## 4.2 Jak działa NIS+.

NIS+ to nowa wersja "network information nameservice" z Sun-a. Największą różnicą pomiędzy NIS i NIS+ jest obsługa kodowania danych i autentykacja poprzez bezpieczne RPC w NIS+.

Model nazewnictwa w NIS+ jest zbudowany w postaci struktury drzewiastej. Każdy węzeł w drzewie odpowiada objektowi NIS+, których mamy sześć typów: katalog, pozycja (entry), grupa, dołączenie, tablica i prywatne.

Katalog NIS+, który tworzy podstawę przestrzeni nazw w NIS+ nazywa się katalogiem "root". Są dwa specjalne katalogi NIS+: org_dir i groups_dir. Katalog org_dir składa się z wszystkich tablic administracyjnych, takich jak passwd, hosts i mail_aliases. Katalog groups_dir składa się z grup objektów NIS+, które używane są do kontroli dostępu. Kolekcja org_dir, groups_dir i ich katalogów nadrzędnych to domena NIS+.

## 5. Portmapper RPC

Aby móc uruchomić jakikolwiek z wymienionych poniżej programów, będziesz musiał uruchomić program /usr/bin/portmap. Niektóre dystrybucje mają skrypt uruchamiający ten demon w plikach startowych /sbin/init.d/ czy /etc/rc.d/. Wszystko co musisz zrobić, to uaktywnić go i zrestartować komputer. Przeczytaj dokumenctaję dostarczoną wraz z dystrybucją, aby się dowiedzieć jak to zrobić.

Portmapper RPC (portmap(8)) jest serwerem, który zamienia numery programowe RPC na numery portów protokołu TCP/IP (albo UDP/IP). Musi być on uruchomiony, aby móc używać na tej maszynie odwołań RPC (co właśnie robi oprogramowanie klienta NIS/NIS+) do serwerów RPC (takich jak serwer NIS czy NIS+). Kiedy serwer RPC jest startowany, poinformuje on portmap-a na których portach nasłuchuje, i jakimi numerami programowymi RPC może służyć. Kiedy klient chce odwołać się przez RPC do danego numeru programowego, najpierw skontaktuje się z portmap-em na maszynie serwerowej, aby określić numer portu, do którego należy wysłać pakiety RPC.

Normalnie, standardowe serwery RPC są startowane przez inetd(8), więc portmap musi działać zanim wystartuje inetd.

Dla bezpieczeństwa portmapper potrzebuje serwisu czasu (Time Service). Upewnij się czy serwis ten jest włączony w /etc/inetd.conf na wszystkich hostach:

> `

>     #
>     # Time service is used for clock syncronization.
>     #
>     time    stream  tcp     nowait  nobody  /usr/sbin/tcpd  in.timed
>     time    dgram   udp     wait    nobody  /usr/sbin/tcpd  in.timed

> `

WAŻNE: Nie zapomnij zresetować (kill -HUP) inetd-a po dokonaniu zmian jego pliku konfiguracyjnym !

## 6. Czego potrzebujesz, aby ustawić NIS?

## 6.1 Sprawdź czy jesteś serwerem, serwerem slave czy klientem.

Aby odpowiedzieć na to pytanie musisz rozważyć dwa przypadki:

1. Twoja maszyna będzie częścią sieci z istniejącymi serwerami NIS.
2. Nie masz jeszcze żadnego serwera NIS w sieci.

W pierwszym przypadku potrzebujesz tylko programów klienta (ypbind, ypwhich, ypcat, yppoll, ypmatch). Najważniejszym programem jest ypbind. Program ten musi być uruchomiony przez cały czas, to znaczy powinien zawsze pojawiać się w liście procesów. Jest to proces-demon i musi być startowany z plików startowych systemu (np. /etc/init.d/nis, /sbin/init.d/ypclient, /etc/rc.local, /etc/rc.d/init.d/ypbind).
Jak tylko ypbind jest uruchomiony, twój komputer staje się klientem NIS.

W drugim przypadku, jeśli nie masz serwerów NIS, to będziesz także potrzebował programu serwera NIS (zwykle zwanego ypserv). Sekcja Konfiguracja serwera NIS opisuje jak ustawić serwer NIS na twojej maszynie Linux-owej przy pomocy implementacji "ypserv" Petera Erikssona i Thorstena Kukuka.
Zauważ, że od wersji 0.14 implementacja ta obsługuje koncept master-slave omówiony w sekcji 4.1.

Jest jeszcze jeden darmowy serwer NIS, zwany "yps", napisany przez Tobiasa Rebera w Niemczech, który obsługuje koncept master-slave, ale ma inne ograniczenia i nie jest wspierany od długiego czasu.

## 6.2 Oprogramowanie.

Biblioteka systemowa "/usr/lib/libc.a" (wersja 4.4.2 i nowsza) czy biblioteka dzielona "/lib/libc.so.x" zawierają wszystkie odwołania systemowe niezbędne do skompilowania oprogramowania klienta i serwera NIS. Do biblioteki glibc 2.x, potrzebujesz także biblioteki /lib/libnsl.so.1.

Niektórzy podawali, że NIS działa tylko z "/usr/lib/libc.a" w wersji 4.5.21 i nowszej, więc jeśli chcesz być zabezpieczony, to nie używaj starszych bibliotek. Oprogramowanie klienckie NIS można znaleźć w:

> `

>       Adres                 Katalog                          Nazwa Pliku

>       ftp.kernel.org        /pub/linux/utils/net/NIS         yp-tools-2.2.tar.gz
>       ftp.kernel.org        /pub/linux/utils/net/NIS         ypbind-mt-1.4.tar.gz
>       ftp.kernel.org        /pub/linux/utils/net/NIS         ypbind-3.3.tar.gz
>       ftp.kernel.org        /pub/linux/utils/net/NIS         ypbind-3.3-glibc5.diff.gz
>       ftp.uni-paderborn.de  /linux/local/yp                  yp-clients-2.2.tar.gz
>       ftp.icm.edu.pl        /pub/Linux/sunsite/system/network/admin yp-clients-2.2.tar.gz

> `

[Od tłumacza: Jeśli jesteś w Polsce, to użyj raczej tego ostatniego adresu.]

Jak już masz oprogramowanie, postępuj zgodnie z instrukcjami przychodzącymi wraz z nim. yp-clients 2.2 nadaje się do użytku z libc4 i libc5 aż do 5.4.20. libc 5.4.21 i glibc 2.x potrzebują yp-tools 1.4.1 lub nowsze. Nowe yp-tools 2.0 będą działąć z każdą biblioteką libc dla Linux-a. Ponieważ był pewien błąd w kodzie NIS-a nie powinieneś używać libc 5.4.21-35. W zamian użyj 5.4.36 lub nowszej, inaczej większość programów YP nie będzie działała. ypbind 3.3 będzie działać także ze wszystkimi bibliotekami. Jeśli używasz gcc 2.8.x lub nowszej wersji, egcs lub glibc 2.x, to powinieneś nałożyć łatę ypbind-3.3-glibc5.diff na ypbind 3.3. Nie powinieneś nigdy używać ypbind z yp-clients 2.2. ypbind-mt jest nowym, wielowątkowym demonem; do działania potrzebuje jądra w wersji 2.2 i glibc 2.1 lub nowszej.

## 6.3 Demon ypbind.

Zakładając, że udało ci się skompilować oprogramowanie jesteś gotowy do zainstalowania go. Odpowiednim miejscem dla demona ypbind będzie /usr/sbin. Niektórzy mogą ci mówić, że nie potrzebujesz ypbind w systemie z NYS. Jest to błędne, gdyż ypwhich i ypcat potrzebują go.

Będziesz to oczywiście musiał zrobić jako root. Inne programy (ypwhich, ypcat, yppoll, ypmatch) powinny znaleźć się w katalogu dostępnym dla wszystkich użytkowników, zwykle /usr/bin.

Nowsze wersje ypbind posiadają plik konfiguracyjny - /etc/yp.conf. Możesz tam na stałe wpisać serwer NIS - więcej informacji w podręczniku systemowym - man ypbind(8).
Potrzebujesz tego pliku także do NYS. Przykład:

> `

>       ypserver voyager
>       ypserver defiant
>       ypserver ds9

> `

Jeśli system może rozwinąć nazwę bez NIS, to mógłbyś użyć tej nazwy. W przeciwnym wypadku musisz użyć adresu IP. W ypbind 3.3 jest błąd; tylko ostatni adres zostanie użyty (ds9 w tym przykładzie). Wszystkie pozostałe pozycje zostaną zignorowane. ypbind-mt obsłuży to poprawnie i użyje tego, który odpowiedział pierwszy.

Dobrym pomysłem będzie przetestowanie ypbind przed wprowadzeniem go do plików startowych. Aby to zrobić postępuj tak:

- Upewnij się, że masz ustawioną nazwę domeny YP. Jeśli nie, to wydaj polecenie:

  > `

  >                 /bin/domainname domena.nis

  > `

  gdzie `domena.nis` powinno być jakimś łańcuchem zwykle _NIE_ związanym z DNS-em twojej maszyny! Powodem tego jest, to że zewnętrznym włamywaczom jest wtedy trochę trudniej zdobyć bazę danych z hasłami z twojego serwera NIS. Jeśli nie wiesz jaka jest nazwa domeny NIS w twojej sieci, to zapytaj swojego administratora.
- uruchom "/usr/bin/portmap" jeśli nie jest jeszcze uruchomiony.
- stwórz katalog "/var/yp" jeśli go nie ma.
- uruchom "/usr/bin/ypbind"
- użyj polecenia "rpcinfo -p localhost", aby sprawdzić czy ypbind zarejestrował swój serwis u portmapper-a. Coś takiego powinno się pojawić na ekranie:

  > `

  >            program vers proto   port
  >             100000    2   tcp    111  portmapper
  >             100000    2   udp    111  portmapper
  >             100007    2   udp    637  ypbind
  >             100007    2   tcp    639  ypbind

  > `

  lub

  > `

  >            program vers proto   port
  >             100000    2   tcp    111  portmapper
  >             100000    2   udp    111  portmapper
  >             100007    2   udp    758  ypbind
  >             100007    1   udp    758  ypbind
  >             100007    2   tcp    761  ypbind
  >             100007    1   tcp    761  ypbind

  > `

  Zależnie od wersji ypbind jakiej używasz.
- możesz także uruchomić "rpcinfo -u localhost ypbind". Polecenie to powinno dać mniej więcej taki wynik:

  > `

  >             program 100007 version 2 ready and waiting

  > `

  lub

  > `

  >             program 100007 version 1 ready and waiting
  >             program 100007 version 2 ready and waiting

  > `

  Wynik ten zależy od wersji ypbind, którą zainstalowałeś. Ważną wiadomością jest tutaj tylko "version 2".

W tym momencie powinieneś móc używać programów klienckich NIS takich jak ypcat itp... Na przykład "ypcat passwd.byname" poda ci całą bazę danych NIS z hasłami.

WAŻNE: Jeśli pominąłeś test, to upewnij się, że ustawiłeś nazwę domeny i stworzyłeś katalog

> `

>         /var/yp

> `

Ten katalog MUSI istnieć, aby ypbind poprawnie się uruchomił.

Aby sprawdzić czy nazwa domeny została ustawiona poprawnie użyj programu /bin/ypdomainname z pakietu yp-tools 2.2. Używa on funkcji yp_get_default_domain(), która jest bardziej restrykcyjna. na przykład nie pozwala na domenę "(none)", która jest domyślną w Linux-ie. i stwarza wiele kłopotów.

Jeśli test się powiódł możesz teraż zmodyfikować pliki w skryptach startowych twojego systemu, tak żeby ypbind startował podczas startu systemu. Upewnij się, że nazwa domeny zostanie ustawiona zanim wystartujesz ypbind.

Cóż, to wszystko. Zresetuj komputer i obserwuj komunikaty podczas startu, żeby zobaczyć czy ypbind właściwie wystartował.

## 6.4 Ustawianie kilenta NIS przy użyciu Tradycyjnego NIS-a.

Do sprawdzania nazw musisz ustawić (albo dodać) "nis", do linii kolejności sprawdzania w pliku /etc/host.conf. Przeczytaj stronę podręcznika systemowego "resolv+.8", aby dowiedzieć się więcej szczegółów.

Na maszynach klienckich dodaj następującą linię w /etc/passwd:

> `

>     +::::::

> `

Możesz także użyć znaczków +/-, aby włączyć/wyłączyć lub zmienić użytkowników. Jeśli chcesz wyłączyć użytkownika guest dodaj -guest do swojego pliku /etc/passwd. Chcesz użyć innej powłoki (np. ksh) dla użytkownika "linux"? Nie ma problemu, po prostu dodaj do swojego /etc/passwd "+linux::::::/bin/ksh" (bez cudzysłowiów). Pola, których nie chcesz zmieniać muszą pozostać puste. Mógłbyś także użyć Netgroups do kontroli użytkowników.

Na przykład, aby pozwolić tylko miquels, dth, ed i wszystkim członkom grupy sieciowej sysadmin na login, ale żeby dane o kontach wszystkich innych użytkowników były dostępne użyj:

> `

>           +miquels:::::::
>           +ed:::::::
>           +dth:::::::
>           +@sysadmins:::::::
>           -ftp
>           +:*::::::/etc/NoShell

> `

Zauważ, że na Linuksie możesz także zmienić pole z hasłem, jak to zrobiliśmy w tym przykładzie. Usunęliśmy także login "ftp", tak więc nie jest on już znany i anonimowe ftp nie będzie działać.

Netgroup wyglądałoby tak:

> `

>     sysadmins (-,software,) (-,kukuk,)

> `

WAŻNE: Cecha netgroup jest zaimplementowana począwszy od libc 4.5.26. Jeśli masz wersję biblioteki wcześniejszą niż 4.5.26, każdy użytkownik w bazie danych z hasłami ma dostęp do twojego Linux-a jeśli masz uruchomiony "ypbind".

## 6.5 Ustawianie klienta NIS używając NYS.

Wszystko co jest potrzebne, to to, żeby plik konfiguracyjny (/etc/yp.conf) wskazywał na poprawn-y/e serwer(y). Także plik konfiguracyjny Name Service Switch (/etc/nsswitch.conf) musi być poprawnie ustawiony.

Powinieneś zainstalować ypbind. Nie jest on potrzebny dla libc, ale narzędzia NIS(YP) go potrzebują.

Jeśli chcesz używać cechy włączania/wyłączania użytkownika (+/-guest/+@admins), musisz użyć "passwd: compat" i "group: compat" w pliku nsswitch.conf. W tym przypadku musisz użyć "shadow: files nis"

Źródła NYS są częścią źródeł libc 5. Kiedy uruchamiasz configure, za pierwszym razem odpowiedz "NO" na pytanie "Values correct", potem odpowiedz "YES", na "Build a NYS libc from nys".

## 6.6 Ustawianie klienta NIS używając glibc 2.x

Glibc używa "tradycyjnego NIS", tak więc musisz uruchomić ypbind. Plik konfiguracyjny Name Service Switch (/etc/nsswitch.conf) musi być poprawnie ustawiony. Jeśli używasz trybu kompatybilnego z passwd, shadow czy group, musisz dodać "+" na końcu tego pliku, i możesz używać cechy włączania/wyłączania użytkownika. Konfiguracja jest dokładnie taka sama jak pod Solaris-em 2.x.

## 6.7 Plik nsswitch.conf

Plik /etc/nsswitch.conf określa kolejność w jakiej odbywa się sprawdzanie kiedy pojawi się żądanie pewnej informacji, tak samo jak plik /etc/host.conf, który określa kolejność sprawdzania adresów hostów. Na przykład linia:

> `

>         hosts: files nis dns

> `

określa, że funkcje sprawdzania adresów hostów powinny najpierw szukać w lokalnym pliku /etc/hosts, potem w bazie NIS i na końcu w DNS-ie (/etc/resolv.conf i named), gdzie jeśli nie znaleziono odpowiedzi pojawia się błąd. Ten plik musi być czytelny dla każdego użytkownika. Więcej informacji znajdziesz na stronie podręcznika systemowego nsswicth.5 lub nsswitch.conf.5.

Poprawny plik /etc/nsswitch.conf dla NIS:

> `

>     #
>     # /etc/nsswitch.conf
>     #
>     # An example Name Service Switch config file. This file should be
>     # sorted with the most-used services at the beginning.
>     #
>     # Pozycja '[NOTFOUND=return]' oznacza, że poszukiwania powinny
>     # zakończyć się, jeśli poszukiwania w poprzedniej pozycji nic nie
>     # dały. Zauważ, że jeśli poszukiwania nie powiodły się z
>     # jakichś innych powodów (jak nie odpowiadający serwer NIS), to
>     # poszukiwania są kontynuowane z następną pozycją.
>     #
>     # Poprawne pozycje to:
>     #
>     #       nisplus                 Use NIS+ (NIS version 3)
>     #       nis                     Use NIS (NIS version 2), also called YP
>     #       dns                     Use DNS (Domain Name Service)
>     #       files                   Use the local files
>     #       db                      Use the /var/db databases
>     #       [NOTFOUND=return]       Stop searching if not found so far
>     #

>     passwd:     compat
>     group:      compat
>     # Jeśli masz libc5 musisz użyć shadow: files nis
>     shadow:     compat

>     passwd_compat: nis
>     group_compat: nis
>     shadow_compat: nis

>     hosts:      nis files dns

>     services:   nis [NOTFOUND=return] files
>     networks:   nis [NOTFOUND=return] files
>     protocols:  nis [NOTFOUND=return] files
>     rpc:        nis [NOTFOUND=return] files
>     ethers:     nis [NOTFOUND=return] files
>     netmasks:   nis [NOTFOUND=return] files
>     netgroup:   nis
>     bootparams: nis [NOTFOUND=return] files
>     publickey:  nis [NOTFOUND=return] files
>     automount:  files
>     aliases:    nis [NOTFOUND=return] files

> `

passwd_compat, group_compat i shadow_compat są obsługiwane tylko przez glibc 2.x. Jeśli nie ma zasad (rules) shadow w /etc/nsswitch.conf, glibc użyje zasady (rule) passwd do sprawdzenia. Jest więcej modułów szukania dla glibc jak hesoid. Więcej informacji znajdziesz w dokumentacji glibc.

## 6.8 Shadow Passwords z NIS i PAM.

Shadow passwords przez NIS to zawsze zły pomysł. Straciłeś ochronę, którą daje shadow passwords i tylko niewiele bibliotek C ma obsługę takiej kombinacji. Dobrym pomysłem na uniknięcie przesyłania shadow paswords przez NIS jest umieścić tylko użytkowników lokalnego systemu do pliku /etc/shadow. Usuń pozycje dotyczące użytkowników NIS z bazy shadow i umieść hasło spowrotem w passwd. Tak że możesz używać shadow dla logowania się jako root i normalnych haseł dla użytkowników NIS. Ma to tę zaletę, że będzie to działało z każdym klientem NIS.

### Linux

Jedyną biblioteką jaka obsługuja kombinację Shadow passwords prze NIS jest libc 2.x. Libc5 nie potrafi tego obsłużyć. Libc5 skompilowana z obsługą NYS posiada trochę kodu na ten temat. Jednak kod ten jest miernej wartości i nie działa poprawnie z wszystkimi pozycjami shadow.

### Solaris

Solaris nie obsługuje takiej kombinacji w ogóle.

### PAM

PAM nie obsługuje Shadow Passwords przez NIS,a szczególnie pam_pwdb/libpwdb. Jest to poważny problem dla użytkowników RedHat 5.x. Jeśli masz glibc i PAM, to musisz zmienić pozycje w plikach /etc/pam.d/*. Zamień wszystkie zasady dotyczące pam_pwdb na moduły pam_unix_*. Z powodu błędu w module pam_unix_auth.so nie będzie on zawsze działał.

Przykładowy plik /etc/pam.d/login może wyglądać tak:

> `

>     #%PAM-1.0
>     auth       required    /lib/security/pam_securetty.so
>     auth       required    /lib/security/pam_unix_auth.so
>     auth       required    /lib/security/pam_nologin.so
>     account    required    /lib/security/pam_unix_acct.so
>     password   required    /lib/security/pam_unix_passwd.so
>     session    required    /lib/security/pam_unix_session.so

> `

Do autoryzacji potrzbujesz modułu pam_unix_auth.so, do kont pam_unix_acct.so, do haseł pam_unix_passwd.so a do sesji pam_unix_session.so.

## 7. Czego potrzebujesz do ustawienia NIS+?

## 7.1 Oprogramowanie.

Klient dla NIS+ na Linuxa został napisany dla biblioteki GNU C 2. Jest także wersja dla libc5, ponieważ większość komercyjnych aplikacji jest z nią skompilowane i nie można ich przekompilować z biblioteką glibc. Z biblioteką tą i NIS+ są problemy: Nie mógłbyś dołączyć statycznie tej biblioteki do programów i programy skompilowane z tą biblioteką nie będą działały z inną.

Musisz ściągnąć i skompilować najnowszą bibliotekę GNU C 2.1 dla platformy Intela albo biblioteki GNU C 2.1.1 dla platform 64-bitowych. Potrzebujesz także systemu opartego na glibc jak RedHat 5.x, Debian 2.x czy SuSE Linux 6.x.

W każdej dystrybucji musisz przekompilować kompilator gcc/g++, libstdc++ i ncurses. W RedHat musisz wiele zmienić w konfiguracji PAM. W SuSE 6.0 musisz przekompilować pakiet Shadow Passwords.

Oprogramowanie klienckie NIS+ można pobrać z:

> `

>       Adres                  Katalog                    Nazwa Pliku

>       ftp.funet.fi     /pub/gnu/funet                libc-*, glibc-crypt-*,
>                                                      glibc-linuxthreads-*
>       ftp.kernel.org   /pub/linux/utils/net/NIS+     nis-utils-19990223.tar.gz
>       ftp.kernel.org   /pub/linux/utils/net/NIS+     pam_keylogin-1.2.tar.gz

> `

Dystrybucje oparte na glibc można ściągnąć z:

> `

>       Adres                  Katalog

>       ftp.redhat.com         /pub/redaht/redhat-5.2
>       ftp.debian.org         /pub/debian/dists/stable
>       ftp.icm.edu.pl         /pub/Linux/redhat
>       ftp.icm.edu.pl         /pub/Linux/debian

> `

[Od tłumacza: Jeśli jesteś w Polsce, to użyj dwóch ostatnich adresów.]

Aby skompilować bibliotekę GNU C postępuj zgodnie z instrukcjami dołączonymi do niej. Tutaj możesz znaleźć załataną libc5, opartą o źródła NYS i glibc zamiast standardowej libc5:

> `

>       Adres                  Katalog                    Nazwa Pliku
>       ftp.kernel.org     /pub/linux/utils/net/NIS+  libc-5.4.44-nsl-0.4.10.tar.gz

> `

Powinieneś także zajrzeć do http://www.suse.de/~kukuk/linux/nisplus.html, aby zdobyć więcej informacji i najnowsze źródła.

## 7.2 Konfiguracja klienta NIS+.

WAŻNE: Aby ustawić klienta NIS+, przeczytaj dokumenctaję do NIS+ na Solaris-a, aby się dowiedzieć co zrobić po stronie serwera ! Dokument ten opisuje tylko co zrobić po stronie klienta !

Po zainstalowaniu nowej biblioteki libc i nis-tools stwórz listy uwierzytelniające dla nowego klienta na serwerze NIS+. Upewnij się, że działa portmap. Potem sprawdź czy na twoim Linux-ie jest ten sam czas co na serwerze. W bezpiecznym RPC masz tylko 3 minuty, w ciągu których listy uwierzytelniające są aktualne. Dobrym pomysłem jest uruchomienie na wszystkich hostach xntpd. Potem uruchom

> `

>     domainname domena.nisplus
>     nisinit -c -H <serwer NIS+>

> `

aby zainicjalizować zimny start file. Przeczytaj stronę podręcznika systemowego o nisinit i znajdź jego opcje. Upewnij się, że nazwa domeny będzie zawsze ustawiona po resecie. Jeśli nie wiesz jaka jest nazwa domeny w twojej sieci, zapytaj administratora.

Teraz powinieneś zmienić swój plik konfiguracyjny /etc/nsswitch.conf. Upewnij się, że jedynym serwisem po publickey jest nisplus ("publickey: nisplus") i nic więcej !

Potem uruchom keyserv i upewnij się, że zawsze będzie startowany jako następy demon po portmaperze podczas startu. Uruchom:

> `

>     keylogin -r

> `

aby zapisać tajny klucz (secretkey) root-a na twoim systemie. (Mam nadzieję, że dodałeś klucz publiczny dla nowego hosta na serwerze NIS+?).

"niscat passwd.org_dir" powinno pokazać ci teraz wszystkie pozycje w bazie danych z hasłami.

## 7.3 NIS+, keylogin, login i PAM.

Kiedy użytkownik się loguje musi ustawić swój tajny klucz dla keyserv-a. Robi się to przez wywołanie "keylogin". Login z pakietu shadow zrobi to za użytkownika jeśli został skompilowany z biblioteką glibc 2.1. W przypadku login-u PAM musisz zainstalować pam_keylogin-1.2.tar.gz i zmodyfikować plik /etc/pam.d/login, tak aby używał pam_unix_auth, a nie pwdb, które nie obsługuje NIS+. Na przykład:

> `

>     #%PAM-1.0
>     auth       required     /lib/security/pam_securetty.so
>     auth       required     /lib/security/pam_keylogin.so
>     auth       required     /lib/security/pam_unix_auth.so
>     auth       required     /lib/security/pam_nologin.so
>     account    required     /lib/security/pam_unix_acct.so
>     password   required     /lib/security/pam_unix_passwd.so
>     session    required     /lib/security/pam_unix_session.so

> `

## 7.4 Plik nsswitch.conf.

Plik /etc/nsswitch.conf określa kolejność w jakiej odbywa się sprawdzanie kiedy pojawi się żądanie pewnej informacji, tak samo jak plik /etc/host.conf, który określa kolejność sprawdzania adresów hostów. Na przykład linia:

> `

>         hosts: files nis dns

> `

określa, że funkcje sprawdzania adresów hostów powinny najpierw szukać w lokalnym pliku /etc/hosts, potem w bazie NIS i na końcu w DNS-ie (/etc/resolv.conf i named), gdzie jeśli nie znaleziono odpowiedzi, to zwracany jest błąd.

Poprawny plik /etc/nsswitch.conf dla NIS:

> `

>     #
>     # /etc/nsswitch.conf
>     #
>     # An example Name Service Switch config file. This file should be
>     # sorted with the most-used services at the beginning.
>     #
>     # Pozycja '[NOTFOUND=return]' oznacza, że poszukiwania powinny
>     # zakończyć się, jeśli poszukiwania w poprzedniej pozcyji nic nie
>     # dały. Zauważ, że jeśli poszukiwania nie powiodły się z
>     # jakichś innych powodów (jak nie odpowiadający serwer NIS), to
>     # poszukiwania są kontynuowane z następną pozycją.
>     #
>     # Poprawne pozycje to:
>     #
>     #       nisplus                 Use NIS+ (NIS version 3)
>     #       nis                     Use NIS (NIS version 2), also called YP
>     #       dns                     Use DNS (Domain Name Service)
>     #       files                   Use the local files
>     #       db                      Use the /var/db databases
>     #       [NOTFOUND=return]       Stop searching if not found so far
>     #

>     passwd:     compat
>     # dla libc5: passwd: files nisplus
>     group:      compat
>     # dla libc5: group: files nisplus
>     shadow:     compat
>     # dla libc5: shadow: files nisplus

>     passwd_compat: nisplus
>     group_compat: nisplus
>     shadow_compat: nisplus

>     hosts:      nisplus files dns

>     services:   nisplus [NOTFOUND=return] files
>     networks:   nisplus [NOTFOUND=return] files
>     protocols:  nisplus [NOTFOUND=return] files
>     rpc:        nisplus [NOTFOUND=return] files
>     ethers:     nisplus [NOTFOUND=return] files
>     netmasks:   nisplus [NOTFOUND=return] files
>     netgroup:   nisplus
>     bootparams: nisplus [NOTFOUND=return] files
>     publickey:  nisplus [NOTFOUND=return] files
>     automount:  files
>     aliases:    nisplus [NOTFOUND=return] files

> `

## 8. Konfiguracja serwera NIS.

## 8.1 Program ypserv.

Dokument ten opisuje tylko jak skonfigurować serwer NIS oparty na "ypserv".

Oprogramowanie serwera NIS można znaleźć na:

> `

>       Adres                  Katatlog                      Nazwa pliku

>       ftp.kernel.org     /pub/linux/utils/net/NIS     ypserv-1.3.6.tar.gz

> `

Możesz także zajrzeć do http://www.suse.de/~kukuk/linux/nis.html po więcej informacji i najnowsze źródła.

Ustawianie serwera jest takie samo dla tradycyjnego NIS i NYS.

Skompiluj oprogramowanie, aby wygenerować programy "ypserv" i "makedbm". Możesz skonfigurować program ypserv, aby używał pliku securenets albo tcp_wrappers. Tcp_wrappers sa o wiele bardziej elastyczne, ale wielu ludzi ma z tym poważne kłopoty. A niektóre pliki konfiguracyjne mogą powodować przeciek w pamięci (?? memory leak: może autor miał na myśli brak pamięci ?? - lack of memory). Jeśli masz problemy z ypserv skompilowanym dla tcp_wrappers, to przekompiluj go do używania pliku securenets. ypserv --version, pokaże jaką masz wersję.

Jeśli uruchamiasz swój serwer jako główny, określ jakie pliki mają być dostępne przez NIS i wtedy dodaj lub usuń odpowiednie pozycje w `/var/yp/Makefile`. Zawsze powinieneś zaglądać do plików Makefile i zapoznać się z opcjami na początku pliku.

Pomiędzy ypserv 1.1 a 1.2 była jedna duża zmiana. Od wersji 1.2, ypserv "keszuje" uchwyty plików (file handles). Oznacza to, że zawsze kiedy stworzysz nową mapę musisz wywołać makedbm z opcją `-c`. Upewnij się, że używasz nowego `/var/yp/Makefile` z ypserv 1.2 lub nowszego, albo dodaj opcję `-c` do makedbm w pliku Makefile. Jeśli tego nie zrobisz, ypserv będzie wciąż używał starych map zamiast uaktualnionych.

Teraz zmodyfikuj `/var/yp/securenets` i `/etc/ypserv.conf.`
Więcej informacji na stronach podręcznika man o ypserv(8) i ypserv.conf(5).

Upewnij się czy portmapper (portmap(8)) jest uruchomiony i uruchom serwer `ypserv`. Polecenie:

> `

>         % rpcinfo -u localhost ypserv

> `

powinno pokazać coś takiego:

> `

>         program 100004 version 1 ready and waiting
>         program 100004 version 2 ready and waiting

> `

Linii z "version 1" może nie być; zależnie od wersji ypserv i konfiguracji, której używasz. Tylko w klientach SunOS 4.x jest to wymagane.

Teraz wygeneruj bazę danych NIS (YP). Na serwerze głównym uruchom:

> `

>         % /usr/lib/yp/ypinit -m

> `

na slave upewnij się, że działa `ypwhich -m`. Potem uruchom

> `

>         % /usr/lib/yp/ypinit -s masterhost

> `

To wszystko, twój serwer już działa.

Jeśli masz większe problemy, możesz wystartować `ypserv` i `ypbind` i trybie śledzenia (debug) w innym oknie. Komunikaty pojawiające się w tym trybie powinny ci powiedzieć co jest nie tak.

Jeśli musisz uaktualnić mapę, to uruchom `make` w katalogu `/var/yp` na master serwerze NIS. Uaktualni to mapę jeśli plik źródłowy jest nowszy i prześle pliki do serwerów slave. Nie używaj `ypinit` do uaktualniania map.

Możesz zmodyfikować crontab root-a *na serwerze slave* i dodać poniższe linie:

> `

>           20 *    * * *    /usr/lib/yp/ypxfr_1perhour
>           40 6    * * *    /usr/lib/yp/ypxfr_1perday
>           55 6,18 * * *    /usr/lib/yp/ypxfr_2perday

> `

To upewni nas, że mapy NIS są aktualne, nawet jeśli jakieś uaktualnienie zostało przeoczone z powodu np. wyłączenia serwera slave podczas modyfikowania bazy głównej.

Serwer slave możesz dodać kiedykolwiek później. Najpierw upewnij się, że nowy serwer slave ma pozwolenie na kontaktowanie się z masterem NIS. Potem uruchom

> `

>         % /usr/lib/yp/ypinit -s masterhost

> `

na nowym slavie. Na serwerze master dodaj nazwę nowego serwera slave do pliku `/var/yp/ypservers` uruchom `make` w <`/var/yp`, aby uaktualnić mapy.

Jeśli chcesz ograniczyć dostęp do twojego serwera NIS będziesz musiał ustawić serwer NIS także jako klienta przez uruchomienie ypbind i dodanie pozycji + do /etc/passwd _w połowie_ (halfway) pliku z hasłami. Funkcje biblioteczne zignorują wszystkie normalne pozycje po pierwszej pozycji NIS i i resztę informacji zdobędą przez NIS.W ten sposób obsługiwany jest dostęp NIS. Przykład:

> `

>          root:x:0:0:root:/root:/bin/bash
>          daemon:*:1:1:daemon:/usr/sbin:
>          bin:*:2:2:bin:/bin:
>          sys:*:3:3:sys:/dev:
>          sync:*:4:100:sync:/bin:/bin/sync
>          games:*:5:100:games:/usr/games:
>          man:*:6:100:man:/var/catman:
>          lp:*:7:7:lp:/var/spool/lpd:
>          mail:*:8:8:mail:/var/spool/mail:
>          news:*:9:9:news:/var/spool/news:
>          uucp:*:10:50:uucp:/var/spool/uucp:
>          nobody:*:65534:65534:noone at all,,,,:/dev/null:
>          +miquels::::::
>          +:*:::::/etc/NoShell
>     [ PO tej linii normalni użytkownicy ! ]
>          tester:*:299:10:Just a test account:/tmp:
>          miquels:1234567890123:101:10:Miquel van Smoorenburg:/home/miquels:/bin/zsh

> `

Użytkownik tester będzie istniał, ale będzie miał ustawioną powłokę na /etc/NoShell. miquels będzie miał normalny dostęp.

Alternatywnie mógłbyś zmodyfikować plik `/var/yp/Makefile` i ustawić NIS, tak żeby używał innego źródłowego pliku z hasłami. W dużych systemach NIS-owe pliki z hasłami i grupami znajdują się zwykle w `/etc/yp/`. Jeśli tak zrobisz, to zwykłe narzędzia jak `passwd`, `chfn`, `adduser` nie będą już działać i będziesz potrzebował specjalnych własnoręcznie zrobionych wersji.

Chociaż `yppsswd`, `ypchsh` i `ypchfn` będą oczywiście działać.

## 8.2 Program serwera yps.

Aby ustawić serwer NIS "yps" przeczytaj poprzedni paragraf. Ustawianie serwera "yps" jest podobne, _ale_ nie dokładnie takie samo, więc uważaj jak będziesz stosował instrukcje dla "ypserv-a" do "yps" ! "yps" nie jest wspierany przez żadnego autora i zawiera parę dziur w bezpieczeństwie. Na prawdę nie powinieneś go używać !

Oprogramowane do serwera NIS "yps" można znaleźć na:

> `

>       Adres               Katalog                           Nazwa pliku

>       ftp.lysator.liu.se    /pub/NYS/servers            yps-0.21.tar.gz
>       ftp.kernel.org        /pub/linux/utils/net/NIS    yps-0.21.tar.gz

> `

## 8.3 Program rpc.ypxfrd

Program rpc.ypxfrd służy do przyspieszania przesyłu bardzo dużych map z serwera master na slave. Jeśli serwer NIS slave otrzyma informacje, że jest nowa mapa wystartuje program ypxfr, aby ją pobrać. ypxfr przeczyta zawartość mapy z serwera master przy pomocy funkcji yp_all(). Proces ten może zająć do kilku minut jeśli są bardzo duże mapy, które muszą być zapisane przez biblioteki bazy danych.

Program rpc.ypxfrd przyspiesza proces pobrania przez pozwolenie serwerowi slave na skopiowanie mapy serwera master zamiast tworzenia jej od nowa. rpc.ypxfrd używa protokołu do przesyłu plików na podstawie RPC, tak że nie ma potrzby na tworzenie nowej mapy.

rpc.ypxfrd może być uruchomiony przez inetd. Ale ponieważ startuje bardzo wolno, powinien byc startowany przez ypserv. Musisz wystartować rpc.ypxfrd tyko na serwerze NIS master.

## 8.4 Program rpc.yppasswdd

Kiedy użytkownicy zmieniają swoje hasła, baza danych NIS z hasłami i przypuszczalnie inne bazy danych NIS, które zależą od bazy danych z hasłami, powinny być uaktualnione. Program "rpc.yppasswdd" jest serwerem, który odpowiedzialny jest za zmiany haseł i uaktualnianie baz danych NIS. rpc.yppasswdd jest zintegrowany z ypserv. Nie potrzebujesz starszych oddzielnych yppasswd-0.9.tar.gz czy yppasswd-0.10.tar.gz i nie powinieneś ich już używać. rpc.yppasswdd z ypserv 1.3.2 ma pełną obsługę shadow. yppasswd jest teraz częścią yp-tool-.2.2.tar.gz.

Musisz uruchomić rpc.yppaswdd tylko na serwerze NIS master. Domyślnie użytkownicy nie mają prawa zmieniać swoich "pełnych nazw" czy powłoki. Możesz na to pozwolić opcją `-e chfn` czy `-e chsh`.

Jeśli twoje pliki passwd i shadow nie są umieszczone w innym katalogu niż /etc, musisz dodać opcję -D. Na przykład jeśli umieściłeś wszystkie pliki źródłowe w /etc/yp i chcesz udostępnić swoim użytkownikom możliwość zmiany powłoki, musisz uruchomić rpc.yppasswdd z następującymi parametrami:

> `

>        rpc.yppasswdd -D /etc/yp -e chsh

> `

lub

> `

>        rpc.yppasswdd -s /etc/yp/shadow -p /etc/yp/passwd -e chsh

> `

Nic więcej do zrobienia już nie zostało. Musisz się tylko upewnić, że `rpc.yppasswdd` używa tych samych plików co `/var/yp/Makefile`. Błędy będą logowane za pomocą syslog.

## 9. Weryfikacja instalacji NIS/NYS.

Jeśli wszystko jest w porządku (jak powinno być), powinieneś móc zwersyfikować instalację kilkoma prostymi poleceniami. Zakładając na przykład, że twój plik z hsłami jest dostarczany prze NIS, polecenie

> `

>         % ypcat passwd

> `

powinno pokazać ci zawartość pliku z hasłami z NIS. Polecenie

> `

>         % ypmatch userid passwd

> `

(gdzie userid jest login-em jakiegoś użytkownika) powinno pokazać ci pozycję w pliku z hasłami dotyczącą tego użytkownika. Programy "ypcat" i "ypmatch" powinny być zawarte w dystrybucji NIS lub NYS.

Jeśli użytkownik nie może sie zalogować, uruchom następujący program po stronie klienta:

> `

>     #include <stdio.h>
>     #include <pwd.h>
>     #include <sys/types.h>

>     int
>     main(int argc, char *argv[])
>     {
>       struct passwd *pwd;

>       if(argc != 2)
>         {
>           fprintf(stderr,"Stosowanie: getwpnam nazwa-uzytkownika\n");
>           exit(1);
>         }

>       pwd=getpwnam(argv[1]);

>       if(pwd != NULL)
>         {
>           printf("name.....: [%s]\n",pwd->pw_name);
>           printf("password.: [%s]\n",pwd->pw_passwd);
>           printf("user id..: [%d]\n", pwd->pw_uid);
>           printf("group id.: [%d]\n",pwd->pw_gid);
>           printf("gecos....: [%s]\n",pwd->pw_gecos);
>           printf("directory: [%s]\n",pwd->pw_dir);
>           printf("shell....: [%s]\n",pwd->pw_shell);
>         }
>       else
>         fprintf(stderr,"Nie znaleziono uzytkownika \"%s\"!\n",argv[1]);

>       exit(0);
>     }

> `

Uruchomienie tego programu z użytkownikiem jako parametr, spowoduje wyświetlenie wszystkich informacji jakie uzyska funkcja getpwnam dla tego użytkownika. Powinno ci to pokazać, która pozycja jest niepoprawna. Najpopularniejszym problemem jest zapisanie "*" w polu hasła.

Razem z biblioteką GNU C 2.1 (glibc 2.1) dostarczane jest narzędzie getent. Użyj tego programu zamiast powyższego na systemie z tą biblioteką. Możesz spróbować:

> `

>        getent passwd

> `

lub

> `

>        getent passwd login

> `

## 10. Popularne problemy i rozwiązywanie ich.

1. Biblioteki do 4.5.19 są niepoprawne. NIS nie będzie z nimi współpracował.
2. Jeśli uaktualnisz biblioteki z 4.5.19 na 4.5.24, to polecenie su nie działa. Potrzebujesz tego polecenia ze Slackware 1.2.0. Przypadkowo tam możesz znaleźć uaktulanione biblioteki.
3. Kiedy serwer NIS się wyłączy i potem uruchomi ponownie ypbind zaczyna wypisywać coś takiego:

                yp_match: clnt_call:
                            RPC: Unable to receive; errno = Connection refused

   i użytkownicy zarejestrowani w bazie danych NIS nie mogą się zalogować. Spróbuj zalogować się jako root i zakończ ypbind i uruchom go ponownie. Uaktualnienie do ypbind 3.3 lub nowszego także powinno pomóc.
4. Po uaktualnieniu libc do wersji nowszej niż 5.4.20, narzędzia YP nie będą działać. Potrzebujesz w takim przypadku yp-tools w wersji 1.2 lub nowszej dla libc >= 5.4.21 i glibc 2.x. Dla wcześniejszych wersji libc potrzbujesz yp-clients 2.2. yp-tools 2.x powinny działać ze wszystkimi bibliotekami.
5. W libc 5.4.21-35 yp_maplist jest popsute, potrzbujesz 5.4.36 lub nowszej wersji, albo niektóre programy z YP jak np. ypwich będą przerywać działanie z błędem Segmentation fault.
6. libc 5 z tradycyjnym NIS nie obsługuje shadow passwords przez NSI. Potrzebujesz libc5 + NYS lub glibc 2.x
7. ypcat shadow nie pokazuje mapy shadow. Jest to poprawne - nazwa mapy shadow to shadow.byname a nie shadow.
8. Solaris nie zawsze używa uprzywilejowanych portów. Więc staraj się nie robić nic z hasłami jeśli masz klienta na Solarisie.

## 11. Często zadawane pytania.

Na większość twoich pytań powinieneś już uzyskać odpowiedź. Jeśli wciąż masz jakieś pytania bez odpowiedzi to możesz wysłać list na grupę

> `

>         comp.os.linux.networking

> `

albo na którąś z polskich grup

> `

>         pl.comp.security
>         lub
>         pl.comp.os.linux
>         lub
>         pl.comp.os.linux.siec(i)

> `

Albo skontaktuj się z którymś z autorów tego HOWTO.