Ah, du möchtest also Ordner auf deinem Ubuntu Server per NFS freigeben, um von anderen Rechnern im Netzwerk darauf zuzugreifen? Kein Problem, das ist eine gängige und praktische Methode! Hier ist eine Schritt-für-Schritt-Anleitung, wie du das bewerkstelligen kannst:

1. NFS Server installieren:

Falls der NFS-Server noch nicht installiert ist, musst du das zuerst erledigen. Öffne dein Terminal auf dem Ubuntu Server und führe folgende Befehle aus:

Bash

sudo apt update
sudo apt install nfs-kernel-server

Der erste Befehl aktualisiert die Paketlisten, und der zweite installiert den NFS-Kernel-Server.

2. Freizugebende Ordner erstellen (optional):

Wenn du die Ordner, die du freigeben möchtest, noch nicht hast, erstelle sie jetzt. Zum Beispiel, um einen Ordner namens gemeinsam im Home-Verzeichnis des Benutzers zu erstellen:

Bash

mkdir ~/gemeinsam

Du kannst natürlich jeden beliebigen Ordner auf dem System freigeben.

3. Exportdatei konfigurieren (/etc/exports):

Die Datei /etc/exports enthält die Konfiguration der freigegebenen Ordner und die Zugriffsrechte für die Clients. Öffne diese Datei mit einem Texteditor deiner Wahl (z.B. nano):

Bash

sudo nano /etc/exports

In dieser Datei definierst du für jeden freizugebenden Ordner eine Zeile mit folgender Syntax:

<freigegebener_ordner> <client(s)>(<optionen>)

Lass uns das anhand einiger Beispiele verdeutlichen:

  • Freigabe für einen bestimmten Client (z.B. mit der IP-Adresse 192.168.1.100): /home/deinbenutzer/gemeinsam 192.168.1.100(rw,sync,no_subtree_check)
  • Freigabe für ein ganzes Subnetz (z.B. 192.168.1.0 bis 192.168.1.255): /home/deinbenutzer/gemeinsam 192.168.1.0/24(rw,sync,no_subtree_check)
  • Freigabe für alle Clients im Netzwerk (Vorsicht!): /home/deinbenutzer/gemeinsam *(rw,sync,no_subtree_check)

Erläuterung der Optionen:

  • rw: Erlaubt dem Client Lese- und Schreibzugriff.
  • ro: Erlaubt dem Client nur Lesezugriff (read-only).
  • sync: Erzwingt, dass Änderungen auf der Festplatte gespeichert werden, bevor die Anfrage als abgeschlossen gilt. Dies ist sicherer, kann aber die Performance beeinträchtigen.
  • async: Erlaubt dem Server, Anfragen als abgeschlossen zu melden, bevor die Änderungen auf der Festplatte sind. Das ist schneller, birgt aber bei einem Serverabsturz ein höheres Datenverlustrisiko.
  • no_subtree_check: Deaktiviert die Subtree-Überprüfung, was in den meisten Fällen die Performance verbessert.
  • root_squash: Verhindert, dass der root-Benutzer auf dem Client Root-Rechte auf dem freigegebenen Ordner hat. Stattdessen wird er dem anonymen Benutzer auf dem Server zugeordnet (standardmäßig nobody).
  • no_root_squash: Deaktiviert die root-Unterdrückung. Der root-Benutzer auf dem Client hat volle root-Rechte auf dem freigegebenen Ordner. Sei hier sehr vorsichtig!
  • all_squash: Ordnet alle Benutzer-IDs und Gruppen-IDs auf dem Client dem anonymen Benutzer und der anonymen Gruppe auf dem Server zu.
  • anonuid=<uid> und anongid=<gid>: Ermöglichen die explizite Angabe der Benutzer- und Gruppen-ID für anonyme Zugriffe.

Nachdem du die gewünschten Freigaben in der /etc/exports-Datei hinzugefügt hast, speichere die Datei und schließe den Editor.

4. NFS-Server neu starten oder Exportliste aktualisieren:

Damit die Änderungen in der /etc/exports-Datei wirksam werden, musst du den NFS-Server neu starten oder die Exportliste aktualisieren. Führe einen der folgenden Befehle aus:

Bash

sudo systemctl restart nfs-server.service

oder

Bash

sudo exportfs -ra

Der Befehl exportfs -ra aktualisiert die Exporttabelle, ohne den gesamten Server neu zu starten.

5. Firewall konfigurieren:

Wenn deine Ubuntu Server Firewall (UFW) aktiviert ist, musst du den NFS-Port (standardmäßig 2049) und möglicherweise weitere zugehörige Ports öffnen, damit Clients auf die Freigaben zugreifen können. Du kannst die NFS-Regel in UFW aktivieren:

Bash

sudo ufw allow nfs

Alternativ kannst du die spezifischen Ports freigeben:

Bash

sudo ufw allow 111/tcp  # Portmapper
sudo ufw allow 111/udp  # Portmapper
sudo ufw allow 2049/tcp # NFS
sudo ufw allow 2049/udp # NFS
sudo ufw allow 32768:60000/tcp # Für zusätzliche Mount-Daemons (kann je nach Konfiguration variieren)
sudo ufw allow 32768:60000/udp # Für zusätzliche Mount-Daemons (kann je nach Konfiguration variieren)

Nachdem du die Regeln hinzugefügt hast, aktiviere UFW falls noch nicht geschehen:

Bash

sudo ufw enable

Überprüfe den Status der Firewall mit:

Bash

sudo ufw status

6. Zugriff vom Client testen:

Nun kannst du von einem anderen Rechner in deinem Netzwerk versuchen, auf die freigegebenen Ordner zuzugreifen. Stelle sicher, dass der NFS-Client auf dem anderen Rechner installiert ist (z.B. nfs-common unter Debian/Ubuntu).

Auf dem Client-Rechner kannst du den freigegebenen Ordner mounten. Erstelle zuerst einen Mountpunkt (einen leeren Ordner):

Bash

mkdir /mnt/nfs_share

Ersetze /mnt/nfs_share durch den gewünschten Mountpunkt.

Mount dann den freigegebenen Ordner vom Server (ersetze <IP_des_Servers> durch die tatsächliche IP-Adresse deines Ubuntu Servers und /home/deinbenutzer/gemeinsam durch den freigegebenen Pfad):

Bash

sudo mount -t nfs <IP_des_Servers>:/home/deinbenutzer/gemeinsam /mnt/nfs_share

Wenn alles funktioniert hat, solltest du nun auf die Dateien und Ordner im Mountpunkt /mnt/nfs_share auf deinem Client zugreifen können.

7. Automatisches Mounten beim Systemstart (optional):

Wenn du möchtest, dass der freigegebene Ordner automatisch beim Starten des Client-Rechners gemountet wird, kannst du einen Eintrag in der /etc/fstab-Datei des Clients hinzufügen. Öffne die Datei mit einem Editor:

Bash

sudo nano /etc/fstab

Füge eine Zeile im folgenden Format hinzu:

<IP_des_Servers>:<freigegebener_ordner> <mountpunkt> nfs <optionen> 0 0

Zum Beispiel:

192.168.1.101:/home/deinbenutzer/gemeinsam /mnt/nfs_share nfs rw,user,noauto 0 0

Erläuterung der Optionen in /etc/fstab:

  • rw: Lese- und Schreibzugriff.
  • user: Erlaubt normalen Benutzern das Mounten und Unmounten.
  • noauto: Verhindert das automatische Mounten beim Systemstart. Du musst es manuell mounten. Wenn du es automatisch mounten möchtest, verwende auto.
  • _netdev: Stellt sicher, dass das Netzwerk verfügbar ist, bevor versucht wird, das NFS-Share zu mounten. Dies ist wichtig für Netzwerk-Dateisysteme.

Nachdem du die Zeile hinzugefügt hast, speichere die Datei und schließe den Editor. Du kannst den Mountpunkt testen, indem du den Befehl sudo mount -a ausführst.

Das war’s! Du hast erfolgreich Ordner auf deinem Ubuntu Server per NFS freigegeben. Denke daran, die Zugriffsrechte in der /etc/exports-Datei sorgfältig zu konfigurieren, um die Sicherheit deines Servers zu gewährleisten. Viel Erfolg!

Ah, du möchtest also die NFS-Freigabe so einschränken, dass nur Benutzer mit gültigen Benutzerkonten auf deinem Ubuntu Server darauf zugreifen können? Das ist ein wichtiger Sicherheitsaspekt! NFS selbst bietet keine direkte Benutzerauthentifizierung im Sinne von Passwörtern. Es basiert hauptsächlich auf der IP-Adresse des Clients und optionalen UID/GID-Zuordnungen.

Um den Zugriff auf Benutzer zu beschränken, die auch auf deinem System existieren, musst du die Art und Weise, wie NFS Benutzer-IDs (UIDs) und Gruppen-IDs (GIDs) behandelt, konfigurieren. Hier sind die wichtigsten Punkte und Optionen, die du dabei berücksichtigen kannst:

1. Vermeidung von no_root_squash:

Wie bereits erwähnt, erlaubt no_root_squash dem root-Benutzer auf dem Client, als root auf dem Server zu agieren. Das ist ein enormes Sicherheitsrisiko und sollte in den meisten Fällen vermieden werden. Stelle sicher, dass du root_squash (die Standardeinstellung) verwendest oder explizit in deinen Exportoptionen angibst:

/home/deinbenutzer/gemeinsam <client(s)>(rw,sync,no_subtree_check,root_squash)

Mit root_squash wird der root-Benutzer auf dem Client dem anonymen Benutzer (meist nobody) auf dem Server zugeordnet.

2. Verwendung von konsistenten UIDs und GIDs:

Die effektivste Methode, den Zugriff auf bestimmte Benutzer zu beschränken, besteht darin sicherzustellen, dass die Benutzer auf den Client-Rechnern, die Zugriff benötigen, die gleichen Benutzer-IDs (UIDs) und Gruppen-IDs (GIDs) haben wie die entsprechenden Benutzer auf dem Server.

  • Herausforderung: Standardmäßig weisen verschiedene Linux-Distributionen und sogar verschiedene Installationen derselben Distribution Benutzern oft unterschiedliche UIDs und GIDs zu.
  • Lösung: Du musst sicherstellen, dass die relevanten Benutzerkonten auf den Client-Rechnern, die Zugriff benötigen, exakt dieselben numerischen UIDs und GIDs haben wie die Benutzer auf dem Server, denen du Zugriff gewähren möchtest.
    • Du kannst die UID und GID eines Benutzers auf einem Linux-System mit dem Befehl id <benutzername> herausfinden.
    • Um die UID und GID eines Benutzers auf einem Client-Rechner zu ändern, kannst du den Befehl usermod -u <neue_uid> <benutzername> und groupmod -g <neue_gid> <gruppenname> verwenden. Sei hier extrem vorsichtig! Das Ändern von UIDs und GIDs kann zu Problemen mit Dateiberechtigungen auf dem Client-System führen. Es ist oft einfacher, neue Benutzer mit spezifischen UIDs/GIDs zu erstellen, wenn das System neu aufgesetzt wird oder wenn du genau weißt, was du tust.
  • Export-Optionen für UID/GID-Mapping:
    • all_squash: Wie bereits erwähnt, ordnet diese Option alle Benutzer- und Gruppen-IDs auf dem Client dem anonymen Benutzer/der anonymen Gruppe auf dem Server zu. Das ist nicht das, was du möchtest, da es den Zugriff nicht auf bestimmte Benutzer beschränkt.
    • anonuid=<uid> und anongid=<gid>: Diese Optionen erlauben dir, die UID und GID festzulegen, denen anonyme Zugriffe (einschließlich des “gesquashten” root-Benutzers) zugeordnet werden sollen. Das hilft nicht direkt bei der Beschränkung auf bestimmte existierende Serverbenutzer.

3. Zusätzliche Sicherheitsmaßnahmen (nicht direkt NFS-Benutzerbeschränkung):

Obwohl NFS selbst keine Passwort-Authentifizierung bietet, kannst du zusätzliche Sicherheitsmaßnahmen auf Netzwerkebene in Betracht ziehen, um den Zugriff weiter einzuschränken:

  • Beschränkung auf bestimmte IP-Adressen oder Netzwerke: In deiner /etc/exports-Datei solltest du die Freigaben immer auf die spezifischen IP-Adressen oder Netzwerke beschränken, von denen du Zugriffe erwartest. Vermeide die Verwendung von * für alle Clients, wenn möglich.
  • Verwendung eines sicheren Netzwerks: Stelle sicher, dass sich deine Server und Clients in einem vertrauenswürdigen und sicheren Netzwerk befinden.
  • Firewall-Regeln: Konfiguriere deine Firewall (UFW) so, dass nur Verbindungen von den erlaubten IP-Adressen oder Netzwerken zum NFS-Port zugelassen werden.

Zusammenfassend lässt sich sagen:

Die direkteste Methode, den Zugriff auf NFS-Freigaben auf Benutzer zu beschränken, die auch auf deinem System existieren, ist die Sicherstellung konsistenter UIDs und GIDs zwischen Server und Clients. Wenn ein Benutzer auf dem Client dieselbe UID hat wie ein Benutzer auf dem Server, greift er auf die Dateien und Ordner auf dem Server mit den entsprechenden Berechtigungen dieses Benutzers zu (vorausgesetzt, die Exportoptionen erlauben dies).

Es ist wichtig zu verstehen, dass NFS keine Authentifizierung im herkömmlichen Sinne durchführt. Es vertraut darauf, dass der Client die korrekte Benutzer-ID sendet. Daher ist die physische Sicherheit deines Netzwerks und die Kontrolle über die Clients, die auf den NFS-Server zugreifen dürfen (mittels IP-Beschränkungen in /etc/exports und Firewall-Regeln), ebenfalls entscheidend.

Wenn du eine stärkere Benutzerauthentifizierung benötigst, solltest du alternative oder ergänzende Technologien wie Kerberos für NFS in Betracht ziehen. Die Konfiguration von Kerberos ist jedoch deutlich komplexer.

Für die meisten einfachen Anwendungsfälle in einem vertrauenswürdigen lokalen Netzwerk ist die Konfiguration von root_squash und die sorgfältige Verwaltung der UIDs und GIDs der relevanten Benutzer auf den Clients die praktikabelste Methode, um den Zugriff auf Benutzer zu beschränken, die auch auf deinem System existieren.