Original in fr Fr�d�ric Raynal
fr to en Philippe Trbich and Emmanuel Bonnel
en to de Katja Socher
Fr�d�ric Raynal schreibt an seiner Diplomarbeit in Informatik �ber Bildert�towierung an der INRIA. Er liest gerade einen sehr guten Detektivroman, der auf Th. Roosevelt zu Beginn des letzten Jahrhunderts anspielt, als er Polizeipr�fekt war. Die Atmosph�re ist sehr dunkel. Es geht um die Untersuchung einer Gruppe von Personen, um einen Serienm�rder zu finden, der Kinder verletzt. Die Gruppe wird von neuen Technologien unterst�tzt (Psychologie, Fingerabdr�cke, etc...), um die L�sung zu finden. Der Roman von Caleb Carr, L'ange des t�n�bres, zeichnet ein �berraschendes Bild �ber den Beginn des letzten Jahrhunderts.
A Ein Network File System (NFS) erlaubt das Verwalten von Dateien auf mehreren Computern innerhalb eines Netzwerkes so, als ob sie auf der lokalen Festplatte gespeichert w�ren. Dadurch ist es nicht n�tig zu wissen, wo die Dateien physikalisch gespeichert sind, um auf sie zuzugreifen.
NFS erlaubt auf einfache Weise, Daten zwischen mehreren Computern zu teilen. Zum Beispiel mu� sich ein Benutzer, der in einem Netzwerk eingeloggt ist, nicht auch noch auf einem speziellen Computer einloggen: �ber NFS hat er Zugriff auf sein home directory (wir sagen exportiert) auf der Maschine, auf der er gerade arbeitet.
NFS ist kein sehr effizientes Protokol und deshalb sehr langsam �ber eine Modemverbindung. Es wurde f�r ein lokales Netzwerk entwickelt und ist sehr flexibel. Es bietet eine Menge M�glichkeiten f�r Benutzer und Administratoren.
Du mu�t diesen Dienst mit Vorsicht verwalten. Jedem zu erlauben, Daten in dein Netz zu schreiben, w�re keine gute Politik ;-) Einige essentielle Ma�nahmen reduzieren dieses Risiko.
Dieser Artikel beginnt mit einer sehr kurzen Einf�hrung zu Dateisystemen.
Dann schauen wir uns das NFS Protokol an. Danach geht es zum weniger
theoretischen Teil und wir f�hren eine NFS Server und eine Client Installation
durch. Wir werden uns auch die minimalen Sicherheitsvorkehrungen anschauen, die
man treffen sollte. Dann illustrieren wir an einem Beispiel, wie man NFS, NIS
und autofs kombinieren kann.
Zum Beispiel k�nnen wir jedes physikalische Medium f�r Daten (eine Festplatte
z.B.) als Feld von kleinen Einheiten, die Informationen speichern, betrachten:
wir reden �ber
Bl�cke. Jedes Dateisystem verwaltet diese Bl�cke auf verschiedene Weise.
Zum Beispiel versuchen wir in Abbildung 1 eine Datei
einzuf�gen, die zwei Bl�cke benutzt. Auf der oberen Illustration wurde die Datei
hinter den letzten besetzten Block gesetzt, wobei leere Stellen am Anfang
auftreten. Im unteren Teil des Bildes (ein anderes Dateisystem) wurde es an die
erste freie Stelle gesetzt. Diese Politik hat Einflu� darauf, wie stark eine
Platte fragmentiert wird. Einige Dateisysteme vermeiden Fragmentierung
automatisch, w�hrend andere von Hand defragmentiert werden m�ssen.
Fig. 1 : 2 different ways to place blocks
Das bekannteste Dateisystem unter Linux ist ext2fs (extended 2 file system). Jede Datei wird durch eine Inode1 dargestellt. Verzeichnisse speichern die Dateiliste und der Zugriff geschieht durch Operationen wie lesen/schreiben auf besondere Dateien.
Die Aufgabe des NFS Servers ist es, seinen Clienten die Inoden zu geben, auf
die sie zugreifen m�chten. Allerdings w�rde ein Client nur allein mit den
Dateiinoden nicht sehr gut arbeiten. Ein NFS Server gibt eine zus�tzliche
Netzschicht, die es remote-Rechnern erlaubt, Inoden zu handhaben.
Die 4 Dienste, die es NFS erlauben zu arbeiten, sind:
Protokol |
|
|
nfs | Dieses Protokol ist die Basis und erlaubt das Erzeugen von Dateien, Suche, Lesen oder Schreiben. Dieses Protokol verwaltet auch die Autentifizierung und die Dateistatistiken. |
|
mountd | Dieser ist verantwortlich f�r das Mounten exportierter Systeme, um auf sie mit nfs zugreifen zu k�nnen. nfs.Der Server empf�ngt Anfragen wie mount und umount und mu� auf diese Weise Informationen �ber exportierte Dateisysteme behalten. |
|
nsm
(Network Status Monitor) |
Es wird benutzt, um Netzwerknodes zu �berwachen, um den Zustand einer Maschine (Client oder Server) zu kennen. Es informiert, z.B. �ber einen Neustart. |
|
nlm
(Network Lock Manager) |
Um Daten�nderungen durch mehrere Clienten zur gleichen Zeit zu vermeiden, verwaltet dieses Protokol ein Locksystem. Es wei�, welche Dateien benutzt werden. Auf diese Weise ist es mit Hilfe des Nsm Protokols m�glich zu wissen, wenn ein Client erneut startet. Nsm befreit alle Locks des Clienten, bevor sie zur�ckgegeben werden. |
|
Der Daemon knfsd, verf�gbar mit den
neuesten Kernelversionen, unterst�tzt direkt die nfs und nlm
Protokolle. Andererseits werden mountd und nsm noch nicht
unterst�tzt. Wenn der NFS Server installiert und gestartet wird, k�nnen wir mit
dem folgenden Befehl verifizieren, da� alles l�uft:
>> ps auxwww | egrep "nfs|mount|lock|stat"Momentan sind 2 NFS Versionen verf�gbar (Versionen 2 und 3 - sie werden NFSv2 bzw. NFSv3 genannt, um sie zu unterscheiden). Linux's NFS Server unterst�tzen nur Version 2 (daher die Option auf der mountd Zeile im vorhergehenden Beispiel).
root 1370 0.0 0.2 1176 580 ? S 22:28 0:00 rpc.mountd --no-nfs-version 3
root 1379 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1380 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1381 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1382 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1383 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1384 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1385 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1386 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1399 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [lockd]
root 1409 0.0 0.2 1156 560 ? S 22:28 0:00 rpc.statd
root 1652 0.0 0.1 1228 484 pts/3 S 22:49 0:00 egrep nfs|mount|lock|stat
Bei NFS geht es um eine Datenstruktur, die file handle genannt wird. Es ist eine Bitserie, die auf eindeutige Weise erlaubt, jedes Dateisystemobjekt (wie eine Datei, aber nicht nur Dateien) zu identifizieren. Es enth�lt z.B. die Dateiinode, aber auch einen Eintrag, der das Ger�t, wo die Datei sich befindet, enth�lt. Daher k�nnen wir NFS als ein Dateisystem betrachten, das in ein Dateisystem eingebettet ist.
root >>/usr/sbin/rpcinfo -pDer rpcinfo Befehl zeigt die auf der Maschine laufenden RPC Dienste, spezifiziert als das Argument (-p option). Wir bemerken, da� portmap noch nicht l�uft: wir starten es (die meisten Linuxdistributionen enthalten Skripte, um dies beim Starten zu automatisieren) und wir �berpr�fen, ob es l�uft. Ein anderer oft vorkommender Grund f�r eine negative Antwort auf rpcinfo ist, da� der portmapper nicht antworten darf aufgrund von Sicherheitsrestriktionen in den /etc/hosts.{allow, deny} Verzeichnissen. In diesem Fall f�ge einen "portmap: hosts" Eintrag zu der hosts.allow Datei hinzu.
rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused
root >>/sbin/portmap
root >>/usr/sbin/rpcinfo -p
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
Vor dem Starten von NFS selbst, mu� es konfiguriert werden. Es gibt nur eine Konfigurationsdatei und sie hei�t /etc/exports. Jede Zeile zeigt einen Verzeichnisbaum der exportiert werde soll gefolgt von einer Liste von Clienten, die auf ihn zugreifen d�rfen. Es ist m�glich, am Ende jedes Clientennamens Optionen hinzuzuf�gen. Die man exports page erkl�rt die Syntax f�r Clientennamen und Optionen.
Die akzeptierten Formen f�r Clientennamen sind:
Wenn wir die /etc/exports Konfigurationsdatei �ndern, m�ssen wir die betroffenen Daemons informieren, da� �nderungen gemacht wurden. Der exportfs Befehl �bermittelt diese Information an unsere Server. Die -r Option synchronisiert die /etc/mtab2 Datei mit der /etc/exports Datei. Die -v Option zeigt die exportierten Dateisysteme zusammen mit ihren Optionen.
Nach dem Start enthalten die folgenden Dateien wichtige Informationen:
Der mount Befehl berechtigt zum Zugriff auf verschiedene Dateisysteme. Es informiert den Kernel, da� ein neues Dateisystem verf�gbar ist, mit Angabe seines Typs, des device und seinem Mountpunkt. Die -t Option kann dazu benutzt werden, um den Typ des benutzten Dateisystems zu spezifizieren. F�r NFS schreiben wir: -t nfs.
mount hat seine eigenen Optionen f�r NFS. Zum Beispiel k�nnen die Optionen rsize und wsize dazu benutzt werden, um die Blockgr��en f�r Lesen und Schreiben zu �ndern. Man kann NFS spezifische Optionen mit allgemeineren Optionen wie intr, noexec oder nosuid verbinden. Die mount man page listet alle diese Optionen auf.
La�t uns annehmen, der Rechner charly hat einen NFS Server und exportiert sein /usr/local Verzeichnis. Wenn man darauf vom Rechner jill aus zugreifen will, dann mu� man nur das exportierte Vrzeichnis von charly zu jill mounten:
root@jill >> mount -t nfs -o nosuid,hard,intr charly:/usr/local /usr/localDer Befehl zeigt an, da� wir ein NFS Dateisystem mounten (-t nfs), mit den nosuid, hard und intr Optionen. Die beiden letzten Argumente sind die interessantesten. Das erste spezifiziert das zu mountende device. F�r NFS ist die Syntax anders als in der gew�hnlichen mount Befehlszeile, wo man den device und das Verzeichnis spezifiziert. Hier spezifizieren wir server:exported_directory anstelle von einem device. Das letzte Argument zeigt die Stelle des Dateisystems auf der Clientenseite an. Wir teilen einfach charlys /usr/local mit jill und k�nnen dadurch vermeiden, Programme mehr als einmal in /usr/local zu installieren. Um dies permanent zu machen, k�nnen wir es auf jill in der /etc/fstab Datei spezifizieren. fstab enth�lt alle devises, die beim Start gemounted werden m�ssen. Die Syntax f�r /etc/fstab lautet:
# device mount point file system options dump fsckorder
charly:/usr/local /usr/local nfs nosuid,hard,intr 0 0
Ein Client darf nicht blind einem Server trauen und umgekehrt, deshalb m�ssen wir einschr�nkende Optionen spezifizieren, wenn wir den mount Befehl benutzen. Wir haben die erste schon erw�hnt: nosuid. Es macht den SUID und SGID bits Effekt r�ckg�ngig. Das hei�t, eine als root eingeloggte Person auf dem Server mu� sich zuerst als Benutzer auf dem Clienten einloggen und wird erst dann root. Eine andere, restriktivere Option ist noexec. Es verbietet das Ausf�hren von Programmen auf exportierten Dateisystemen. Diese Option ist nur auf Systemen nutzbar, die nur Daten enthalten.
Auf der NFS Serverseite k�nnen wir ebenso spezifizieren, da� wir dem root account des Clienten nicht trauen. Wir m�ssen dies in /etc/exports mit der root_squash Option spezifizieren. Dann, wenn ein Benutzer mit UID 0 (root) auf dem Clienten auf das Dateisystem, das vom Server exportiert wurde, zugreift, wird er der nobody UID f�r Abfragedateien. Diese Option ist per default unter Linux aktiv, kann aber mit der no_root_squash Option abgeschaltet werden. Eine Menge von UIDs kann spezifiziert werden, auf die diese Option angewendet werden soll. Erinnere dich auch, da� die anonuid und anongid Optionen es erlauben, die Benutzer UID/GID von nobody zu einer anderen ID zu �ndern.
Einige Aktionen sind allgemeiner und haben Auswirkungen auf den portmapper. Zum Beispiel verbieten wir den Zugriff zu allen Rechnern mit der folgenden Zeile in der /etc/hosts.deny Datei:
# hosts.deny :
# use the portmap
portmap: ALL
Die /etc/hosts.allow
Datei stellt das Gegengewicht zu diesem strikten Verbot dar und erlaubt den Zugriff auf
die gew�nschten Maschinen.
Gute Firewallregel tragen auch zu einem besseren Schutz bei. Beobachte die
Ports, die von verschiedenen Diensten genutzt werden und die genutzten Protokolle:
Service RPC | Port | Protocols |
portmap | 111 | upd / tcp |
nfsd | 2049 | udp |
mountd | variable | udp / tcp |
La� uns zuerst die Konfiguration unseres Servers charly anschauen. Wir beginnen mit dem Definieren einiger NIS maps, die alle notwendigen Informationen enthalten.
Die /etc/netgroup Datei enth�lt Maschinengruppen mit gemeinsamen Charakteristiken (z.B. dieselbe Architektur). Eine NIS map ist f�r NFS sehr n�tzlich. Wir m�ssen nur alle Maschinen sammeln, die berechtigt sind, auf dasselbe exportierte Dateisystem zuzugreifen. Diese Gruppe wird dann in der /etc/exports Datei benutzt, anstatt alle Clienten einzeln zu spezifizieren:
# /etc/netgroupSoweit wie es NFS betrifft, wissen wir, da� die Konfiguration sehr eingeschr�nkt ist. Die /etc/exports Datei von charly enth�lt:
charlysangels (sabrina,,) (jill,,) (kelly)
# /etc/exportsWir entscheiden uns automount zu benutzen, um auf das exportierte /usr/local Verzeichnis zuzugreifen. Anstatt dieses System zur Boot-Zeit zu mounten, geschieht es automatisch, wenn ein Benutzer auf eine Datei in diesem Verzeichnis zugreift. Wir erzeugen die /etc/auto.map Datei, um zu definieren, was zugreifbar sein wird, sowohl durch automount als auch durch NIS:
/usr/local @charlysangels(ro)
# /etc/auto.mapDa wir diese Informationen (die neuen auto.map und netgroup Dateien) in die NIS Datenbank integrieren wollen, m�ssen wir das Makefile �ndern, bevor wir es erneut bauen. Wir m�ssen sicher sein, da� netgroup in die Datenbank hinzugef�gt wird. Was auto.map betrifft, so wird diese Datei nicht per default definiert. Wir m�ssen nur einfach einen neuen Eintrag in das Makefile hinzuf�gen, mit der assoziierten Regel (benutzen der existierenden als ein Modell):
charly charly:/usr/local
#To be added in the Yellow Pages Makefile
AUTO_MAP = $(YPSRCDIR)/auto.map
# ...
#...
auto.map: $(AUTO_MAP) $(YPDIR)/Makefile
@echo "Updating $@..."Diese Produktionsregel entfernt nur Kommentare, f�gt einen neuen Eintrag in die Datenbank hinzu und �bermittelt dann die Information zu jedem Server.
-@sed -e "/^#/d" -e s/#.*$$// $(AUTO_MAP) | $(DBLOAD) \
-i $(AUTO_MAP) -o $(YPMAPDIR)/$@ - $@
-@$(NOPUSH) || $(YPPUSH) -d $(DOMAIN) $@
Wir m�ssen nur make aus dem /var/yp Verzeichnis laufen lassen.
Jetzt zu unseren drei Clienten sabrina, jill und kelly. Here, Hier gibt es nichts zu tun :) Wir m�ssen autofs sagen, da� es eine neue map, die von YP gegeben wird, verwalten soll. In jeder /etc/auto.master Datei des Clienten informiert die folgende Zeile �ber die Anwesenheit von einem map auto.map , erhalten durch die YP Dienste.
#/etc/auto.masterDann m�ssen wir autofs erneut starten, damit die neue map wirksam wird.
/usr/local yp auto.map --intr,nosuid,nodev
Jetzt haben wir ein einziges /usr/local physikalisches Verzeichnis auf charly. Dann, wenn spezifische Programme auf charly installiert werden, k�nnen alle Maschinen sie nutzen.
Dieses Beispiel k�nnte weitergehen mit der Installation nur eines /usr Systems, /usr/doc oder anderem, aber die Praxis zeigt, da� dies keine
gute Idee ist. Installationen m�ssen oft Dateien im /etc Verzeichnis oder anderes ver�ndern. Wir m��ten dann
alle Maschinen �ndern, um nicht exportierte Dateien upzudaten und das
wird schnell langweilig.
NFS