NIS Network Information Service
Willemers Informatik-Ecke
Der Network Information Service (NIS) ist schon vor langer Zeit von der Firma Sun für UNIX entwickelt worden. Mit diesem Dienst ist es möglich, Konfigurationsdateien netzwerkweit zu zentralisieren. Da es zu jener Zeit noch keine Windows-PCs gab, die in ein Netzwerk eingebunden werden konnten, ist die Beschränkung auf UNIX-Systeme nachvollziehbar. Als dann die PCs endlich netzwerkfähig wurden, setzten deren Entwickler zunächst auf andere Protokolle als auf TCP/IP, wodurch NIS ein UNIX-spezifisches Protokoll blieb.

NIS (Network Information Service) stellt die UNIX-Konfigurationsdateien wie passwd, shadow, group und netgroup netzwerkweit zur Verfügung. Auch die Dateien hosts, networks und services lassen sich per NIS zentralisieren.

NIS hat seine Heimat in den großen UNIX-Netzwerken, verliert aber an Boden, weil man für die zentrale Verwaltung der Rechner inzwischen meist auf einen lokalen DNS-Server setzt, da dieser sich elegant in den Namensdienst des Internets eingliedert.

Neben den Rechnernamen kann NIS für alle Linux- und UNIX-Rechner im Netzwerk die Benutzerverwaltung zentralisieren. NIS spielt seine Möglichkeiten insbesondere im Zusammenspiel mit NFS aus.

Installation

Ein Linux-Rechner kann sowohl als Client als auch als Server mit NIS umgehen. Sie müssen dazu das Paket nis installieren, das beide Bestandteile enthält:
# apt-get install nis
Ein NIS-Server ist für eine Domäne zuständig, nach der die Installationsroutine bei der Installation fragt. Sie müssen also einen Domänennamen Ihres Netzwerks festlegen. Im Beispiel heißt das willemer.edu. Diese wird durch die Konfiguration in der Datei /etc/defaultdomain gespeichert.

Anfragereihenfolge durch nsswitch festlegen

Über welchen Weg sich ein Rechner die Information für Benutzer, Passwörter, aber auch Hostnamen sucht, wird in der Datei /etc/nsswitch.conf festgelegt. Die folgenden Einträge ermöglichen eine Verwaltung der Benutzer und Gruppen per NIS:
# /etc/nsswitch.conf
passwd:         compat
group:          compat
shadow:         compat
netgroup:       nis
Auch die anderen Dateien wie hosts und services finden Sie hier aufgeführt. Sofern hinter den Einträgen aber weder nis noch compat steht, werden sie nicht in das NIS eingebunden.

Herr oder Sklave, Diener oder Anfrager

In der Datei /etc/default/nis steht, welche Rolle der Rechner in der NIS-Umgebung spielen sollte. Sie finden hier die Variable NISSERVER, die bei einem NIS-Server auf master, bei einem Client auf false stehen sollte.
# /etc/default/nis
NISSERVER=master
Die Uminterpretation des Servers (Diener) zum Master (Herr) überrascht zunächst. Tatsächlich beschreibt master die Art des Servers. Sie können noch weitere Rechner als slave (Sklave) definieren, die auch Server sind, aber den Herrn stützen, wenn der schwächelt.

In der Datei /etc/yp.conf steht der Name oder die IP-Adresse des NIS-Servers. Wenn Sie den Server per Namen angeben, muss gewährleistet sein, dass dieser Name auch in der Datei /etc/hosts aufgeführt ist. Ein Eintrag im DNS ist da wenig hilfreich, da NIS das DNS nicht auswertet.

# yp.conf
ypserver        server.willemer.edu
# oder
ypserver        192.168.109.199
Nachdem diese Vorbereitungen getroffen sind, kann nun der Server gestartet und initialisiert werden. Vorher sollte der Dienst portmap gestartet werden. Das ist eine Bibliothek, auf der sowohl das NIS als auch NFS aufsetzen. Der Befehl ypinit -m erfasst zunächst, welche Server als Master oder Slave im NIS-Netz laufen. Das Programm wird den eigenen Server anzeigen und dann anfragen, ob weitere NIS-Server im Netzwerk aktiv sind und eingebunden werden sollen. Da hier keine weiteren Server auftreten, kann gleich bei der ersten Eingabemöglichkeit ein End-Of-File-Zeichen mit der Tastenkombination [Strg]+[D] eingegeben werden. Die Liste der Server wird angezeigt, und es wird anschließend um Bestätigung gebeten.
# /etc/init.d/portmap start
# /usr/sbin/ypserv
# /usr/lib/yp/ypinit -m
...
        next host to add:  server.willemer.edu
        next host to add:  
The current list of NIS servers looks like this:

server.willemer.edu

Is this correct?  [y/n: y]  
We need a few minutes to build the databases...
Building /var/yp/willemer.edu/ypservers...
Running /var/yp/Makefile...
make[1]: Betrete Verzeichnis '/var/yp/willemer.edu'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
...
server.willemer.edu has been set up as a NIS master server.
Interessant ist die Zeile, in der angezeigt wird, dass der Befehl make das Verzeichnis /var/yp bearbeitet hat. Diesen Vorgang werden Sie später von Hand anstoßen, wenn Sie Konfigurationen ändern, die für das gesamte NIS gelten sollen. Sie können sehen, wie NIS seine internen Datenbanken initialisiert. Die Passwort-Datenbank ist anschließend sowohl über den Namen als auch über die Benutzer-ID abfragbar.

Nun ist alles vorbereitet, die Serverprozesse können gestartet werden. Sie bedienen sich dazu am besten wieder der Init-Skripte. Zuerst starten Sie portmap, dann nis. In vielen Fällen wird portmap bereits laufen.

# /etc/init.d/portmap start
# /etc/init.d/ypserv start

Einen Client einrichten

Auch der Client muss das Paket nis einrichten.
# apt-get install nis
Der Server läuft und nun sind noch ein paar Handgriffe beim NIS-Client zu tun. So wird für die von NIS verwalteten Dateien noch je ein Leereintrag gemacht. Sie können diese Einträge über einen Editor oder mit den folgenden Befehlen einrichten:
# echo '+::::::' >> /etc/passwd
# echo '+::::::::' >> /etc/shadow
# echo '+:::' >> /etc/group
Anschließend starten Sie den NIS-Dienst auch hier durch den Aufruf des Init-Skripts:
# /etc/init.d/portmap start
# /etc/init.d/ypbind start

Client testen

Nun können Sie mit dem Befehl yptest nachprüfen, ob der NIS die Informationen liefert, die Sie erwarten. Ob Sie ihn auf dem Server oder Client starten, sollte das gleiche Ergebnis liefern.
# yptest
Sie erhalten nun eine Reihe von Tests aufgeführt. Dabei wird Ihnen angezeigt, in welcher Domäne Sie sind, wer der NIS-Server ist, und ein paar von dessen Einträgen.

Neue Benutzer anlegen

Neue Benutzer legen Sie nun auf dem NIS-Server an. Hier wird ein Benutzer paul auf dem NIS-Server mit dem Befehl adduser angelegt.
# adduser paul
Lege Benutzer »paul« an ...
make: Entering directory `/var/yp'
make[1]: Entering directory `/var/yp/willemer.edu'
Updating netid.byname...
make[1]: Leaving directory `/var/yp/willemer.edu'
make: Leaving directory `/var/yp'
Lege neue Gruppe »paul« (1005) an ...
make: Entering directory `/var/yp'
make[1]: Entering directory `/var/yp/willemer.edu'
Updating group.byname...
Updating group.bygid...
Updating netid.byname...
make[1]: Leaving directory `/var/yp/willemer.edu'
make: Leaving directory `/var/yp'
Lege neuen Benutzer »paul« (1006) mit Gruppe »paul« an ...
make: Entering directory `/var/yp'
make[1]: Entering directory `/var/yp/willemer.edu'
Updating passwd.byname...
Updating passwd.byuid...
Updating netid.byname...
Updating shadow.byname...
make[1]: Leaving directory `/var/yp/willemer.edu'
make: Leaving directory `/var/yp'
Erstelle Home-Verzeichnis »/home/paul« ...
Kopiere Dateien aus »/etc/skel« ...
Geben Sie ein neues UNIX-Passwort ein: 
Geben Sie das neue UNIX-Passwort erneut ein: 
passwd: Passwort erfolgreich geändert
Changing the user information for paul
Enter the new value, or press ENTER for the default
        Full Name []: Paul M.
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] y
#
Sie sehen an den Ausgaben, dass adduser automatisch die NIS-Funktionen aufruft und die internen Datenstrukturen füllt. Wenn Sie wie hier Konfigurationen geändert haben, die alle NIS-Clients betreffen, müssen Sie abschließend noch in das Verzeichnis /var/yp wechseln und dort den Befehl make aufrufen:
# cd /var/yp
# make
...

Test der Benutzereinrichtung

Nun sollte der Benutzer paul auch für die Clients erreichbar sein. Wenn Sie mit dem Befehl yptest nachschauen, werden Sie den Benutzer auch dort zur Verfügung haben.

Berücksichtigen Sie allerdings, dass der arme Paul nur auf dem Server ein Benutzerverzeichnis besitzt. Entweder Sie exportieren dies beispielsweise per NFS oder Sie müssen diese Verzeichnisse von Hand nacharbeiten. Im folgenden Beispiel wird dies vorgeführt:

# mkdir /home/paul
# chown paul /home/paul
# exit
$ su - paul
$ pwd
/home/paul
$ 
Die Anwender können ihr Passwort auf jedem der Clients mit dem Aufruf des Befehls yppasswd ändern. Das setzt allerdings voraus, dass der yppasswd auf dem NIS-Server läuft.