Linux als SOHO-Server

für Linux- und Windows-Clients
http://linux.eusterholz.dyndns.org

Kapitel:

Home
Debian Installation
Debian Etc.
Internet-Zugang
Telnet
FTP
r-Utilities
SSH
Printing
NTP
Nameserver
NFS/NIS/Automount
Samba (SMB-Server)
Apache (WEB-Server)
Modem / ISDN
Backup
Etc.


NIS

NFS ] [ NIS ] Automount ] /home-Dir ]


Der 'Network Information Service' (NIS) wurde ursprünglich von der Firma 'Sun Microsystems' entwickelt. Es ist auch bekannt unter der Bezeichnung: 'Yellow Pages' oder auch kurz 'YP'. Doch kollidierte der Name: 'YP' mit einem eingetragenen Warenzeichen der 'British Telecom', sodass 'Sun Microsystems' auf den Begriff: 'Network Information Service' auswich. Noch heute beginnen viele NIS-Programme oder Konfigurations-Dateien die mit NIS zu tun haben mit dem Kürzel 'yp...' ('ypbind'; 'ypcat' usw.).

Bei NIS handelt es sich um ein RPC-basiertes Client/Server-System. Eine Gruppe von Rechnern greift dabei innerhalb einer NIS-Domäne auf gemeinsame Konfigurationsdateien zu, die in Form einer Datenbank auf dem NIS-Server liegen. Jeder der Rechner in der NIS-Domäne, auf dem ein NIS-Client läuft, kann eine Abfrage an diese Datenbank absetzen, um Benutzerinformationen zu erhalten (z. B. Login-Name, Passwort, User-Groups,...). Ein Systemadministrator wird dadurch in die Lage versetzt, einen NIS-Clients mit minimalem Aufwand einzurichten, sowie Änderungen an der Systemkonfiguration von einem zentralen Ort aus durchzuführen.

In folgenden wird die Realisierung eines NIS-Clients/-Server unter Debian-Linux vorgestellt. In Bereich Server wird zwischen Master/Slave-NIS-Server unterschieden.

Installation

Für einen NIS-Server bzw. NIS-Client unter Debian wird das Paket: 'nis' benötigt, ob ein Server oder Client realisiert wird, hängt dann von der nachfolgenden Konfiguration ab. Weiterhin müssen die 'RPC-Progamme' und der 'Portmapper' auf den Server/Client vorhanden sein, dieses sollte jedoch bei der Basis-Installation unter Debian schon vorhanden sein. Das Paket: 'nis' kann unter Debian am einfachsten mit: 'apt-get install nis' installiert werden, dabei werden eventuelle Abhängigkeiten (fehlende Pakete) aufgelöst.
Während der Installation des Paketes 'nis' wird mittels Dialog nach einem NIS-Domänennamen gefragt. Beim NIS-Domänennamen handelt sich dabei nicht um einen Domänennamen im Sinne von DNS, sondern im Sinne von NIS (YP). Dieser Name sollte aus Sicherheitsgründen anders, als der der Maschine gewählt werden. NIS-Server/-Clients die miteinander kooperieren wollen, müssen der gleichen NIS-Domäne angehören, also den gleichen NIS-Domänennamen besitzen. Der bei der Installation eingegebene NIS-Domänenname findet sich in der Datei: '/etc/defaultdomain' wieder. Der Name kann auch bei Bedarf in dieser Datei direkt geändert werden:

/etc/defaultdomain

eusterholz.nis

Im Unterschied zum DNS wird beim NIS-Domänennamen zwischen Groß- und Kleinschreibung unterschieden.

NIS-Server

Bei NIS-Servern wird zwischen Master- bzw. Slave-Servern unterschieden. Der zentrale Server wird NIS-Master genannt, zusätzlich kann es eine beliebige Anzahl von NIS-Slave-Server geben, deren Aufgabe es ist, den NIS-Master zu entlasten und Redundanz zu gewährleisten, falls der NIS-Master nicht erreichbar sein sollte (vergleichbar mit den Primary- und Secondary-Servern bei DNS). Jeder Master und jeder Slave kann zugleich auch NIS-Client sein; was auch der Normalfall ist. Ist ein NIS-Client zugleich auch NIS-Slave-Server so wird das Netzwerk von seinen Anfragen entlastet, auch der lokale Rechnerbetrieb ist im Falle eines Netzausfalls gewährleistet.

NIS-Server (Master)

Nach Installation des Paketes: 'nis' und Vergabe des NIS-Domännamens ist zunächst die Konfigurationsdatei: '/etc/default/nis' für einen NIS-Master-Server anzupassen:

Auszug aus: /etc/default/nis (ca. Zeile: 6) (Master)

#
# /etc/defaults/nis Configuration settings for the NIS daemons.
#

# Are we a NIS server and if so what kind (values: false, slave, master)
NISSERVER=master

# Are we a NIS client (i.e. start ypbind?)
NISCLIENT=true

...

Die Art des Betriebsart wird in der Zeile mit dem Parameter 'NISSERVER=master' festgelegt.

Aus Sicherheitsaspekten sollten weiterhin die Dateien: 'ypserv.securenets' und 'ypserv.conf' angepasst werden:

/etc/ypserv.securenets (ca. Zeile 16)

#
# securenets This file defines the access rights to your NIS server
# for NIS clients (and slave servers - ypxfrd uses this
# file too). This file contains netmask/network pairs.
# A clients IP address needs to match with at least one
# of those.
#
# One can use the word "host" instead of a netmask of
# 255.255.255.255. Only IP addresses are allowed in this
# file, not hostnames.
#
# Always allow access for localhost
255.0.0.0       127.0.0.0

# This line gives access to everybody. PLEASE ADJUST!
255.255.255.0   192.168.1.0

In der Datei: 'ypserv.securenets' werden Hosts und Netzwerke eingetragen, die einen Zugriff zum Server erhalten sollen. Jede aktive Zeile entspricht dabei einer Freigabe. Jeder Adresse, die nicht in irgendeiner Zeile in dieser Datei angegeben ist, wird der Zugriff verweigert. Wird die Datei auf dem Default belassen, so erhält jeder Zugriff zu dem NIS-Server.

Weitere Optionen und Zugriffsberechtigungen können in der Datei: 'ypserv.conf' eingestellt werden.

/etc/ypserv.conf

#
# ypserv.conf In this file you can set certain options for the NIS server,
# and you can deny or restrict access to certain maps based
# on the originating host.
#
# See ypserv.conf(5) for a description of the syntax.
#

# The following, when uncommented, will give you shadow like passwords.
# Note that it will not work if you have slave NIS servers in your
# network that do not run the same server as you.

# Host                       : Map              : Security   : Passwd_mangle
#
# *                          : passwd.byname    : port       : yes
# *                          : passwd.byuid     : port       : yes
# *                          : *                : none

# This is the default - restrict access to the shadow password file,
# allow access to all others.
192.168.1.0                  : shadow.byname    : port
192.168.1.0                  : passwd.adjunct.byname : port
192.168.1.0                  : *                : none

Auch hier sollten nur Clients aus den eigenen lokalen Netzwerk zugelassen werden. Eine genau Beschreibung der Datei 'ypserv.conf' ist in den Manualseiten zu finden.

Bevor der NIS-Server weiter konfiguriert wird, sollte dieser neu gestartet werden. Der Start kann von der Kommandozeile aus mit:

/etc/init.d/nis start

erfolgen. Ob der Server arbeit, kann mit folgenden Kommando festgestellt werden:

rpcinfo -u localhost ypserv
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting

Die Ausgabe sollte zeigen, dass der NIS-Server aktiv und sauber eingebunden ist.

Als nächsten Schritt ist die NIS-Datenbank (Maps) für den Master zu initialisieren. NIS arbeitet aus Gründen der Performance nicht mit ASCII-Konfigurationsdateien, sondern mit Maps. Diese Maps werden über ein 'Makefile', welches sich im Verzeichnis: '/var/yp' befindet generiert. In den genannten Verzeichnis liegen auch später die erzeugten Maps. Welche Maps erzeugt werden, kann mit einen Standarteditor im 'Makefile' beeinflusst werden. Unter Debian ist der default-Makefile schon gut vorbereitet und wird an dieser Stelle nicht weiter behandelt.
Bevor die Maps nun erzeugt werden, sollte geprüft werden, ob die Datei: 'etc/networks' existiert, da diese für die Erstellen der Datenbank benötigt wird. Sollte die Datei nicht vorhanden sein, so kann sie einfach als leere Datei erzeugt werden.
Das Erstellen der Datenbank geschieht mit dem Kommando: 'ypinit -m', wobei die Option '-m' für einen NIS-Master erforderlich ist.

meridian:~# /usr/lib/yp/ypinit -m

At this point, we have to construct a list of the hosts which will run NIS
servers. meridian.eusterholz.tld is in the list of NIS server hosts. Please continue to add
the names for the other hosts, one per line. When you are done with the
list, type a <control D>.
next host to add: meridian.eusterholz.tld
next host to add:
The current list of NIS servers looks like this:

meridian.eusterholz.tld

Is this correct? [y/n: y] y
We need a few minutes to build the databases...
Building /var/yp/eusterholz.nis/ypservers...
Running /var/yp/Makefile...
make[1]: Entering directory `/var/yp/eusterholz.nis'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updating services.byservicename...
Updating netid.byname...
Updating protocols.bynumber...
Updating protocols.byname...
Updating netgroup...
Updating netgroup.byhost...
Updating netgroup.byuser...
Updating shadow.byname...
make[1]: Leaving directory `/var/yp/eusterholz.nis'

meridian.eusterholz.tld has been set up as a NIS master server.

Now you can run ypinit -s meridian.eusterholz.tld on all slave server.
meridian:~#

Nach Aufruf des 'ypinit -m' sind die Rechner anzugeben, auf dem NIS als Server laufen soll. Der eigene Rechner wird automatisch angezeigt und eingetragen, weitere NIS-Slaves-Server können angegeben werden. Nach Fertigstellung der Eingabe der NIS-Server ist der Dialog mit 'CTRL-D' abzuschließen. Mit einen bestätigenden 'y' werden die einzelnen Maps dann generiert.

Ein weiterer Test, ob der NIS-Server korrekt arbeitet kann mit:

joshua:~# ypwhich
joshua.eusterholz.nis

erfolgen, zurückgegeben werden sollte der FQDN des Servers.

NIS-Server (Slave)

Um einen NIS-Slave-Server zu erstellen, muss auf dem Server ebenfalls das Paket: 'nis', sowie die RPC-Programme und der Portmapper installiert sein (vgl. Installation oben). Die Konfigurationsdatei: '/etc/default/nis' ist nun als 'NISSERVER' ein 'slave' einzutragen:

/etc/default/nis (ca. Zeile: 6) (Slave)

#
# /etc/defaults/nis Configuration settings for the NIS daemons.
#

# Are we a NIS server and if so what kind (values: false, slave, master)
NISSERVER=slave

# Are we a NIS client (i.e. start ypbind?)
NISCLIENT=true

...

Bei den Dateien: 'ypserv.securenets' und 'ypserv.conf' ist genau wie beim NIS-Master zu verfahren.

Damit künftig beim Master-Server auch die Maps für die Slaves berücksichtigt werden, ist im 'Makefile' des Servers: '/var/yp/Makefile' der Parameter: 'NOPUSH="false"' einzustellen:

Auszug aus: /var/yp/Makefile (ca. Zeile: 23) (Master)

...

# If we have only one server, we don't have to push the maps to the
# slave servers (NOPUSH=true). If you have slave servers, change this
# to "NOPUSH=false" and put all hostnames of your slave servers in the file
# /var/yp/ypservers.
NOPUSH=false

...

Danach sollte nochmals auf dem Master ein: '/usr/lib/yp/ypinit -m' durchgeführt werden. Diesmal sollte der NIS-Slave-Server mit in der Liste eingetragen werden.

Zurück auf den NIS-Slave, sollte dieser nun mit:

/etc/init.d/nis start

aktiviert werden. Mit einen:

/usr/lib/yp/ypinit -s <NIS-Master>

werden nun die Maps für den Slave erstellt, Die Option '-s' steht für Slave.

Damit die Datenbanken zwischen Server und Client immer konsistent sind, sollten noch ein Cron-Jobs auf den Slave-Server eingebaut werden. Dabei ist die Datei: 'nis' im Verzeichnis: '/etc/cron.d' zu erstellen und mit dem Kommando: 'chmod 755' ausführbar zu machen:

/etc/cron.d/nis (Slave)

# cron-script to update a nis-slave
# copy the script to: '/etc/cron.d/nis' and make: 'chmod 755 /etc/cron.d/nis'

20  *    *  *  *  root  /usr/lib/yp/ypxfr_1perhour > /dev/null 2>&1
40  6    *  *  *  root  /usr/lib/yp/ypxfr_1perday  > /dev/null 2>&1
55  6,18 *  *  *  root  /usr/lib/yp/ypxfr_2perday  > /dev/null 2>&1

Im Skript: 'nis' werden die vorgefertigten Skripte: '/usr/lib/yp/ypxfr_*' aufgerufen, die eine Synchronisation der Maps einleiten. Dabei werden einige Maps, bei denen die Wahrscheinlichkeit größer ist, dass sie sich ändern, auch entsprechen häufiger abgeglichen (z.B.: passwd-Map).

Damit sich auf dem NIS-Master (Slave) auch Benutzer anmelden können, sollte dieser auch genau wie ein NIS-Client konfiguriert sein. Siehe die folgende Konfiguration eines reinen NIS-Clients.

NIS-Client

Genau wie bei den NIS-Server, muss auf dem NIS-Client das Paket: 'nis', sowie die RPC-Programme und der Portmapper installiert sein (vgl. Installation oben).

Als nächstes sollte, auch wenn dieses nicht zwingend notwendig ist, da ein NIS-Client seinen Server auch via 'ypbind -broadcast' finden sollte, die Datei: '/etc/yp.conf' angepasst werden:

/etc/yp.conf

#
# yp.conf       Configuration file for the ypbind process. You can define
#               NIS servers manually here if they can't be found by
#               broadcasting on the local net (which is the default).
#
#               See the manual page of ypbind for the syntax of this file.
#
# IMPORTANT:    For the "ypserver", use IP addresses, or make sure that
#               the host is in /etc/hosts. This file is only interpreted
#               once, and if DNS isn't reachable yet the ypserver cannot
#               be resolved and ypbind won't ever bind to the server.

ypserver        192.168.1.10
ypserver        192.168.1.20

Im einfachsten Fall wird einfach die IP-Adressen der NIS-Server eingegeben (z.B. der Master-/Slave-Server). Ein 'ypbind' setzt gleichzeitig eine Anfrage an alle Server ab. Der Server, der zuerst antwortet, wird dann zum Server für den Client. Anstatt der IP-Adresse kann auch der host-Name eingesetzt werden, sofern eine Namensauflösung gewährleistet ist.
Weitere Arten von Einträgen für spezielle Konfigurationen können in den Manualseiten nachgelesen werden.

Ab jetzt kann der NIS-Client gestartet werden, der Start kann auf der Kommandozeile wie beim Server auch mit:

/etc/init.d/nis start

erfolgen.

Als nächstes kann noch in der Datei: '/etc/nsswitch.conf' festgelegt werden, welche Ressourcen und in welcher Reihenfolge diese vom NIS-Client genutzt werden sollen:

/etc/nsswitch.conf

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Unter Debian ist die Datei: 'nsswitch.conf' schon vorkonfiguriert und kann im Prinzip so belassen werden.

Bei den Dateien 'passwd', 'shadow' und 'group' im Verzeichnis: '/etc' ist jeweils ein spezielle Eintrage beginnend mit einen '+'-Zeichen und einer Folge von ':'-Zeichen zu machen (siehe gelbe Markierung). Das bedeutet, dass an dieser Stelle die Daten aus der NIS-Map eingefügt werden. Daneben kann es weiterhin lokale Accounts geben, d.h. es müssen nicht unbedingt alle User per NIS verwaltet werden. Typisches Beispiel sind diverse Pseudo-User, insbesondere der Benutzer: 'root', der lokal sein sollte. Für die Benutzer ist dies alles völlig transparent, d.h. sie merken praktisch nichts davon, ob ihre Daten per NIS kommen oder nicht.

Auszug aus: /etc/passwd

...
Debian-exim:x:102:102::/var/spool/exim4:/bin/false
linux:x:1000:1000:linux,,,:/home/linux:/bin/bash
identd:x:100:65534::/var/run/identd:/bin/false
+::::::
-alpha::::::
-bravo::::::

Auszug aus: /etc/shadow

...
Debian-exim:!:13043:0:99999:7:::
linux:$1$4ZK5.1KD$Affw/DLFgDvyYuipSqINz.:13043:0:99999:7:::
identd:!:13043:0:99999:7:::
+::::::::
-alpha::::::::
-bravo::::::::

Auszug aus: /etc/group

...
ssh:x:103:
messagebus:x:104:
dirmngr:x:105:
+:::

Außerdem ist es möglich, bestimmte Benutzer von einem Import auszunehmen, auf diesen Weise kann man Ausnahmen definieren (grüne Markierung). Bei der obigen Konfiguration wird die komplette NIS-Map importiert, bis auf die beiden Benutzer: 'alpha' und 'bravo'. Das System verhält sich so, als seien diese beiden Benutzer unbekannt.

Auch können einzelne Felder im NIS-Eintrag überschrieben werden, z.B. mit den Eintrag:

   +:*:::::/sbin/nologin

Hier wird das Passwort-Feld und das Login-Shell-Feld überschrieben, so dass die Accounts zwar auf diesem Client vorhanden sind, die Benutzer sich aber nicht einloggen können (kein gültiges Passwort und keine Login-Shell). Dieses könnte z.B. für einen Mail-Server oder File-Server nützlich sein.
Weitere spezielle Einstellungen können in der Dokumentation zu NIS nachgelesen werden.

Anmerkungen

Da die NIS-Informationen auf dem Netz nicht besonders gesichert sind, eignet sich NIS nicht für Netze mit besonderen Sicherheitsanforderungen.

Auf dem NIS-Client sollte in der Datei '/etc/host.conf' ein Hinweis auf NIS aufgenommen werden:

/etc/host.conf

order hosts nis bind
multi on

Wenn ein neuer Benutzer auf dem NIS-System eingetragen wird, so sollte dieses mit dem Kommando: 'adduser' auf dem Master-Server geschehen, danach müssen die Maps mittels '/usr/lib/yp/ypinit -m' neu generiert werden. Das Löschen eines Users sollte mit dem Kommando: 'delluser' ebenfalls auf dem Master geschehen.
Passwörter können auf jedem System (auch Clients) geändert werden, dazu sollte das Kommando: 'yppasswd' verwendet werden, ein normales 'passwd'  funktioniert unter NIS nicht. Mit dem Kommando: 'ypcat passwd' kann getestet werden, ob die Verteilung der Passwörter durch den NIS-Server funktioniert. Das Kommando sollte eine Liste aus von Einträgen der passwd-Datei liefern.

Weitere Tests, um die korrekte Arbeitsweise des NIS-Services festzustellen, können mit folgenden Kommandos erfolgen:

  • 'yptest'
    Ausgiebiger Test bezüglich der Konfiguration und Funktion des NIS-Services, vgl. hierzu die entsprechende Manualseite.
  • 'ypwhich'
    Verknüpfen mit dem NIS-Service und Ausgabe des NIS-Masters
  • 'ypcat -x'
    Darstellung aller gemappten Keys die in Benutzung sind.
  • 'ypcat -t passwd.byname'
    Anzeige der Daten in der Map, z.B. von 'passwd.byname'
  • 'yppoll -h <hostname> passwd.byname'
    Abfrage eines Hosts bez. der NIS-Informationen
  • 'ypdomainname'
    Abfrage des YP-Domännamens

Weitere Infos

The Linux NIS(YP)/NYS/NIS+ HOWTO http://www.linux-nis.org/nis-howto/HOWTO/
Managing NFS and NIS, 2nd Edition http://www.hn.edu.cn/book/NetWork/NetworkingBookshelf_2ndEd/nfs/
Network Information Services (NIS and NIS+) Guide http://www.unet.univie.ac.at/aix/aixbman/nisplus/toc.htm
Manualseiten zu: yp.conf; ypserv.conf man yp.conf; man ypserv.conf
System-Dokumentation: nis /usr/share/doc/nis/nis.debian.howto.gz
RFC: 3898 http://www.faqs.org/rfcs/rfc3898.html

Home ] Nach oben ] NFS ] [ NIS ] Automount ] /home-Dir ]

letzte Änderung: 11. März 2009

 

Copyright © 2004 Norbert Eusterholz