Upline: Infos & Dokus Administration Linux

NIS und NFS Server und Clients einrichten unter Debian Sarge 3.1


Hinweis: Das hier ist eine noch nicht abschließend ausformulierte Lösung zu einer Aufgabe des Faches Rechnernetze/Netzmanagement im Studiengang Informationstechnik Vernetzte Systeme an der FHTW Berlin im WS2005. Es fehlen ein paar Kleinigkeiten zum Apache und es gab Probleme mit dem NFS-Server. Das muss noch mal etwas überarbeitet werden - daher habe ich die Systeme auch noch @home herumzuliegen, kommt also demnächst noch ...
Diese Anleitung läßt sich mit Sicherheit auch für andere Linux-/Unix-Derivate wie z.B. SuSE Linux, Redhat Linux oder Mandrake Linux verwenden, da könnten sich allerdings einige Dateien anders nennen oder die Einstellungen und Verzeichnisse (z.B. vom Apache) sind irgendwie anders untergebracht.


Serverinstallation

Vorbereitung

Als erstes installiert man die notwendigen Pakete und ein wenig Zubehör.
apt-get install vim lynx nfs-kernel-server nis apache2 php4 libapache2-mod-php4 php4-cli vsftpd
Der Speaker nervte auf dem einen Board extrem, daher die Zeile, die man auch unter Anpassungsarbeiten nach Linux-Neuinstallation findet, um die Frequenz und Tonlänge runterzustellen.
echo 'echo -e "\\33[10;50]\\33[11;10]"'>>/etc/profile

Einrichtung für NIS und NFS

/etc/hosts

Da kein Nameserver vorhanden ist, müssen der Servername und die Domain in der hosts-Datei hinterlegt werden. Man kann zusätzlich auch die IPs weiterer Server oder Clients aufnehmen. Dies macht natürlich nur Sinn, wenn feste IPs verwendet werden. Die Angabe der lokalen festen IP ist nicht notwendig, die bereits vorhandene 127er Zeile sollte man sicherheitshalber aus Kompatibilitätsgründen für diverse Software drin lassen. Die 2. Zeile trägt somit nur weitere Aliase zum Debian-Standardnamen localhost.localdomain ein.
127.0.0.1       localhost.localdomain   localhost
127.0.0.1       tbird1800.proteino.local        TBird1800

/etc/network/interfaces

Bei einem Server ist es sehr sinnvoll, diesem eine feste IP zu geben und die dhcp-Voreinstellung auszukommentiern.
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
 address 192.168.1.100
 netmask 255.255.255.0
 network 192.168.1.0
 broadcast 192.168.1.255
 gateway 192.168.1.1

/etc/default/nis

NISSERVER=true
NISCLIENT=false

/etc/exports

/home 192.168.1.0/24(rw,async)
/usr/local/share 192.168.1.0/24(r,async)

/etc/ypserv.conf (Standardeinstellung bei Debian 3.1 Sarge)

*       : *       : shadow.byname    : port
*       : *       : passwd.adjunct.byname : port
*       : *       : *                : none
Wenn in der /etc/hosts bereits die Domain eingetragen wurde, so übernimmt Debian 3.1 Sarge diese als Defaultdomain für NIS.

/etc/defaultdomain

proteino.local

/etc/passwd

lxuser GID auf 100 (users) setzen -> Ziel ist es in diesem Fall, alle User in der gleichen Gruppe mit der Group ID 100 zu haben.

Linux User hinzufügen

useradd lxuser1 -m -p password -g 100 -s /bin/bash
useradd lxuser2 -m -p password -g 100 -s /bin/bash

NIS (Yellow Pages) initialisieren

/usr/lib/yp/ypinit -m
Soweit ich das mitbekommen habe, muß man diesen Befehl auf jeden Fall Wiederholen, wenn sich an den Server-IPs etwas geändert hat, man neue Server hinzufügt usw. Nicht sicher bin ich mir, ob dies evtl. auch nötig ist, wenn ein neuer User hinzugefügt wird - das könnte ein temporäres Prob bei mir gewesen sein, muß ich noch mal überprüfen ...

Apache2

Haß-Installation und Konfiguration, da war mal wieder alles anders, als in sämtlichen Dokus im Netz beschrieben - irgendwann lief's trotzdem inkl. php ...

/etc/apache2/sites-available/default

folgende Zeile auskommentieren:
# RedirectMatch ^/$ /apache2-default/
diverse weitere Dateien angegrabbelt und drin rumgefummelt ...

FTP-Server einrichten (vsftpd)

/etc/vsftpd.conf

folgende Zeilen anpassen:
anonymous_enable=NO
local_enable=YES
ftpd_banner=Welcome to unknown FTP service ;)
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
write_enable=YES
local_umask=022
Da hier das chroot_list_file aktiviert wurde, benötigt man natürlich auch die entsprechende Datei dazu:
touch /etc/vsftpd.chroot_list
Bei Bedarf kann man dann hier alles eintragen, was sich NICHT anmelden darf.

Eigene Web-Verzeichnisse für User einrichten

Damit jeder User seine eigene Miniseite betreiben kann, ohne dafür Zugriff auf das Apache-Verzeichnis /var/www zu bekommen, werden entsprechende Verzeichnisse im /home des Users eingerichtet und per Softlink im Apache-Verzeichnis verfügbar gemacht. Folgende Befehle sind für die 3 User notwendig:
su - lxuser
mkdir www
vi www/index.html <- Inhalte reinhämmern
exit
su - lxuser1
mkdir www
cp ../lxuser/www/index.html www/
vi www/index.html <- Inhalte anpassen
exit
su - lxuser2
mkdir www
cp ../lxuser/www/index.html www/
vi www/index.html <- Inhalte anpassen
exit
ln -s /var/www/lxuser /home/lxuser/www
ln -s /var/www/lxuser1 /home/lxuser1/www
ln -s /var/www/lxuser2 /home/lxuser2/www
Anschließend legt man eine /var/www/index.html mit Verknüpfungen zur Mainpage (z.B. index.php) sowie zu lxuser, lxuser1 und lxuser2 an. Wenn man im Apache die Einstellung zur Suche nach der Startseite in der richtigen Reihenfolge hat, so wird auch bei vorhandener index.php zuerst die index.html aufgerufen, so wie es in diesem Fall sinnvoll ist. Zum Schluß kopiert man die Inhalte des Webservers z.B. per WinSCP auf den Server rüber und beachtet dabei, daß bereits eine index.html besteht.

Letzte Schritte

Restarten der Serverdienste portmap, nfs, nis, vsftpd, apache2 und hoffen, daß alles funktioniert ;)

Clientinstallation

Diese Installation läuft in einigen Punkten analog zur Serverinstallation, daher fehlen hier die entsprechenden Kommentare.
apt-get install vim lynx nis

/etc/hosts

127.0.0.1       localhost.localdomain   localhost
127.0.0.1       katmai616.proteino.local        katmai616       Katmai616
192.168.1.100   tbird1800.proteino.local

/etc/defaultdomain

proteino.local

/etc/nsswitch.conf

Diese Datei erhält ihren Namen aus der Abkürzung von Name Service Switch Configuration File, dort liegen die Informationen darüber, ob und wo Alternativen zu den lokalen Textdaten gefunden werden können. Die Voreinstellungen bei Debian sind bereits korrekt, die für nis wichtigen Zeilen sind fett markiert.
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

/etc/yp.conf

Server-Name oder -IP eintragen, Name wird z.B. über /etc/hosts aufgelöst
ypserver tbird1800.proteino.local

/etc/passwd

In dieser und den folgenden folgende Dateien muss als letzte Zeile ein + gefolgt von Doppelpunkten eintragen werden. Die Anzahl der Doppelpunkte ergibt sich aus den jeweils in der Datei üblichen Anzahl von Datenfeldern pro Zeile.
+::::::

/etc/group

+:::

/etc/shadow

+::::::::

/etc/gshadow

+:::

/etc/fstab

Einbinden des home-Verzeichnisses:
tbird1800.proteino.local:/home  /home  nfs  rsize=8192,wsize=8192,hard,intr  0  0 
tbird1800.proteino.local:/usr/local/share  /usr/local/share  nfs  rsize=8192,wsize=8192,hard,intr  0  0
Falls home-Verz. nicht sauber gemappt werden, entweder Portmapper weiter nach hinten in der Startreihenfolge verschieben oder in alle wichtigen Runleveln (also 2, 3 und 5) Startscripte für den nfs-Mounter wie folgt einbinden:

/etc/rc.3

ln -s ../init.d/mountnfs.sh S90mountnfs.sh
Hinweis: Debian 3.1 Sarge hat in der /etc/inittab als Standardrunlevel die 2 drin! im Runlevel 1 muß das Killscript relativ früh rein, also z.B. als K15.

/etc/rc.1

ln -s ../init.d/mountnfs.sh K15mountnfs.sh

Tests

verwendete Rechner: Server 192.168.1.100, Client 192.168.1.13, Win-Möhre 192.168.1.10 Einloggen der User auf Server, Client (überprüfen, ob /home verfügbar ist) und von Win-Möhre per ftp mit lynx vom Server, Client und mit anderem Browser von Win-Möhre aus die Webseiten des Servers überprüfen

Ergebnis

Der Portmapper auf meinem NFS-Server spinnt ein bissel herum. Manchmal gibt er beide Verzeichnisse nicht raus, manchmal nur eins, oft klappen aber beide. Der Fehler hat mich einige Stunden gekostet: Ergebnis war, dass ich ihn trotzdem nicht los wurde. Sämtliche Konfigurationen waren korrekt, auch die Startzeiten waren nicht der Grund für die gelegentlichen Fehler. Vermutlich könnten neuere Verionen (Kernel ist z.B. noch auf 2.6.8) weiterhelfen. Entsprechende Tests mache ich noch ...