Die Serverdienste NFS und NIS

Seite: 1/8
(3022 Worte insgesamt im Text)
(15304 mal aufgerufen)  Druckerfreundliche Ansicht

Inhalt

Was ist NFS?

NFS, das "Network File System", ist eine Client-/Server-Applikation, welche entfernte Laufwerke (von einem Server) für den lokalen Rechner (den Client) transparent zur Verfügung stellt. Der Nutzer bekommt im Normalfall überhaupt nicht mit, das er seine Daten gar nicht "lokal" speichert oder läd sondern sie über das Netzwerk zum Server übertragen und von dort geladen werden. Dafür werden verschiedene Programme genutzt, die für eine konsistente Dateiübertragung sorgen.

NFS basiert auf dem RPC (remote procedure call) Protokoll, welches ursprünglich 1980 (!) von Sun Microsystems entwickelt wurde, um Filesharing auf Unix-Plattformen zu ermöglichen.

Was ist die Gefahr von NFS?

Normalerweise benutzen die von NFS eingesetzten Programme keine weiteren Mittel um die Authentizität der Benutzer zu überprüfen. Das macht das System so gefährlich.

Einerseits ist hierfür sicherlich das benutzte Übertragungsprotokoll UDP verantwortlich, welches als "zustandsloses" Protokoll keine Möglichkeit bietet, die Verbindung zwischen zwei Stationen zu überprüfen. Das macht das UDP-Protokoll zwar wesentlich schneller als das heute sehr bekannte TCP Protokoll und war seinerzeit sicherlich auch der Hauptgrund für Sun Micosystems auf diese Übertragungstechnik zu setzen (weniger "Protokoll" = weniger Serverbelastung) - allerdings mussten so auch zusätzliche Sicherungsmassnahmen eingeführt werden, um auch nur eine sichere Übertragung der Pakete sicherzustellen: so versucht NFS für jeden ausgesendeten Befehl eine Anwort zu bekommen. Bleibt diese aus, so wird der Befehl immer wieder wiederholt. (Anmerkung: bei TCP ist das Verfahren zwar ähnlich - setzt aber schon auf "Protokollebene" an; der das Protokoll nutzende Dienst braucht sich darum nicht zu kümmern.)

Inzwischen gibt es auch NFS über TCP - aber dennoch bleibt die Tatsache bestehen, dass es bei NFS am Server keine Möglichkeit gibt, die Authentizität des Clients und noch weniger dessen Nutzer zu überprüfen. In Umgebungen, in welchen keine unbekannten Clients "Zutritt" haben und in welchen allein der Administrator Vollzugriff (root-Rechte) auf den Clients hat, ist das Problem evtl. noch überschaubar. Aber auch hier läßt sich die Sicherheit von NFS umgehen, wenn etwa ein Client über CD oder USB gebootet werden kann.

Was für Programme enthält NFS?

NFS ist nicht nur ein Protokoll für Dateiübertragungen im Netzwerk - es enthält zusätzlich ein "Mount"-Protokoll, welches auf Serverseite mehrere Programme nutzt:

  • rpc.mountd = für die Einbindung (das mounten) entfernter Dateisysteme. Der mount-Daemon teilt dem Anfragenden Client mit, welche Dateisysteme des Servers eingebunden werden können.
  • nfsd = der Serverdienst, welcher die Dateiübertragung abwickelt
  • portmap = sorgt für die Grundlegende Kommunikation der Prozesse untereinander mittels sogenannter RPC- (Remote Procedure-)Calls

Auf der Client-Seite kommen ebenfalls mehrere Programme zum Einsatz:

  • biod = Dieses Programm sorgt für eine Lese- und Schreiboptimierung. Man könnte sagen, es cached die Dateien.
  • rpc.statd = Behält die Ãœbersicht über die gerade verwendeten Dateien. Es führt also die "Statistik".
  • rpc.lockd = Sorgt für das Datei-Locking um zu vermeiden, dass andere Prozesse gerade eine Datei verändern, die zum Schreiben geöffnet ist.

Wie wird NFS konfiguriert?

Serverseite:

Die zentrale Konfigurationsdatei für NFS ist hier die Datei exports, welche sich überlicherweise im Verzeichnis /etc befindet.

Dort wird genau definiert, welche Verzeichnisse des Servers von welchem Client wie gemountet werden dürfen. Dies kann durch eine Namensangabe geschehen oder durch einen IP-Adressbereich. Das "wie" beschreibt, wie der Client das Verzeichnis nutzen kann. Mögliche Formen sind hier z.B. "read-only" oder "read-write". Zusätzlich lassen sich noch einige Sicherheitsattribute setzen:

async Diese Option ermöglicht es dem NFS-Server, das NFS-Protokoll zu verletzen, indem er dem Client auf Anfragen antwortet, befor diese wirklich geschrieben worden sind. Wenn also ein Client die Anfrage stellt, eine Datei zu schreiben, speichert der NFS-Server die Daten in RAM und schreibt diese erst dann auf die Festplatte(n), wenn er genügend Zeit dafür hat. Auf diese Weise wird der Durchsatz auf Kosten der Sicherheit gesteigert. Denn schließlich kann der Server plötzlich ausfallen - und damit sind die Daten im RAM verloren.
Bis zur Version 1.0.0 war diese Option Standardmäßig aktiviert. Ab Version 1.0.1 jedoch wurde Zugungsten der Datensicherheit die Alternative sync als Standard gesetzt. Um Systemadministratoren auf diese Änderung hinzuweisen, gibt der NFS-Server ab Version 1.0.1 eine Warnung aus, wenn überhaupt keine dieser beiden Optionen gesetzt ist.
secure Hier werden nur Anfragen von einem hohen Port an einen niedrigeren (und damit priviligierten) Port erlaubt. Damit wird die Gefahr verringert, dass ein normaler Nutzer einen NFS-Server aufsetzt und diesen dann mit ihrem Server "unter gleichen" reden läßt. Diese Einstellung ist zwar Standard - Sie ausdrücklich zu setzen beruhigt aber auf jeden Fall das Gewissen.
rw Hier wird das Verzeichnis für Lese- und Schreibzugriffe freigegeben. Standardeinstellung ist ro - also "Nur Lesen".
noaccess Mit diesem Parameter können Unterverzeichnisse eines exportierten Verzeichnisses gesperrt werden.
link_relative Hiermit werden vorhandene Links relativ zum eigentlichen Root-Verzeichnis des Servers gesetzt. Sollte der Server z.B. mit einer Chroot-Umgebung laufen, sonst würden Links auf das reale Dateisystem des Servers sonst ins Leere zeigen.
link_absolute Hier werden die Links im exportierten Verzeichnis absolut gesetzt. Ein "relativer" Link auf dem Server wird dem Client also als "absolut" vorgegaukelt.
root_squash Standardeinstellung: Hier wird der Nutzer root des entfernten Systems behandelt, als wäre er nobody. Damit bekommt ein Hacker von einem fremden Rechner keine Möglichkeit sich auszubreiten.
no_root_squash Hier hat der Nutzer "root" des fremden Systems dieselben Rechte wie der lokale root.
squash_uids und squash_gids Mit dieser Option können bestimmte UIDs und GIDs vom fremden System behandelt werden, als wären sie "nobodys" - was sich besonders bei Systemaccounts als nützlich erweist. Beispiel: squash_uids=0-499 Läßt alle Anfragen von Nutzern mit einer ID kleiner als 500 nur als "nobodys" zu.
all_squash Alle UIDs werden "gesquasht", d.h. dem Nutzer nobody angerechnet. Damit haben alle fremden Nutzer die geringsten Rechte.
map_daemon Damit werden UIDs und GIDs vom entfernten System dynamisch an die im lokalen System vorhandenen angepasst. Ein Nutzer "lars" auf dem entfernten System bekommt dann dieselben Rechte wie der lokale "lars" - auch wenn dieser eine andere Nutzer-ID hat. Allerdings muß dazu auf beiden Systemen der rpc.ugidd laufen.
map_static Hiermit wird ein statisches Mapping eingeführt. Dazu muss eine Datei mit den entsprechenden Zuweisungen vorhanden und als Parameter angegeben sein. Ein Beispiel: map_static=/etc/nfs/foobar.map Die Datei /etc/nfs/foobar.map könnte dann so aussehen:
# Mapping for client foobar:
# remote local
uid 0-99 - # squashen - also eigentlich keine Rechte
uid 100-500 1000 # Mappe die UIDs von 100-500 nach 1000-1400
gid 0-49 - # Gruppen squashen
gid 50-100 700 # Mappe Gruppen mit IDs von 50-100 nach 700-750
map_nis Eine schöne Funktion: hier werden die Rechte von einem NIS-Server bezogen und entsprechend angewendet. Dazu muss der NFS-Server nur wissen, in welcher Domain sich die Clients befinden. Dies geschieht so: map_nis=<domainname></domainname>
anonuid and anongid Hiermit werden die UIDs und GIDs für den Nutzer nobody und die entsprechende Gruppe festgelegt.
no_exec Das Dateibit für ausführbare Dateien wird im entfernten System nicht gestattet: aus diesem exportierten Verzeichnis heraus dürfen keine Programme aufgerufen werden.
no_suid Das setzen des "User-ID"-Bits wird nicht gestattet. Dateien können nur mit den Rechten des jeweils angemeldeten Benutzers ausgeführt werden.
no_sgid Das setzen des "Group-ID"-Bits wird nicht gestattet. Dateien können nur mit den Gruppen-Rechten des angemeldeten Benutzers ausgeführt werden.

Tip: Sollte es bei vielen Clientzugriffen auf eine Datei oder ein Verzeichnis zu "Engpässen" also zu Wartezeiten kommen und die Daten im betreffenden Verzeichnis sind nicht so wichtig (oder das Verzeichnis wird sowieso nur Read-Only exportiert), dann hilft wahrscheinlich die Option async weiter. Damit werden asynchrone Dateizugriffe von Clients erlaubt.

Clientseite:

Ein Client kann das entfernte Dateisystem entweder temporär einbinden - dazu genügt (als root) das Kommando:

mount -t nfs <server>:/<verzeichnis> /<lokaler mountpoint="mountpoint"></lokaler></verzeichnis></server>

oder er kann es bei jedem Booten automatisch einbinden. Dafür ist ein entsprechender Eintrag in der Datei /etc/fstab nötig.


Kommentare

Einen Kommentar hinzufügen



 Suchen:


 Umfrage

(Nur für angemeldete Benutzer)

Was wird hier am meisten vermisst?

[ Ergebnis | Umfragen ]

Stimmen: 621
Kommentare: 0

 Zitate

Es gibt zwei Dinge im Leben, die du nicht zurücknehmen kannst: Den Pfeil den du verschossen und das Wort, das du gesprochen.

-- altes indianisches Sprichwort